summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatti Bickel <mabi@gentoo.org>2007-06-06 21:33:23 +0000
committerMatti Bickel <mabi@gentoo.org>2007-06-06 21:33:23 +0000
commitaee8f06999d27a242d26cdb864b813662f1b1231 (patch)
treee61534eea72296f091c79a7a3431984b1d8bd1ac
downloadmabi-aee8f06999d27a242d26cdb864b813662f1b1231.tar.gz
mabi-aee8f06999d27a242d26cdb864b813662f1b1231.tar.bz2
mabi-aee8f06999d27a242d26cdb864b813662f1b1231.zip
initial import from gentoo-x86
svn path=/; revision=1
-rw-r--r--ion3/ChangeLog281
-rw-r--r--ion3/Manifest157
-rw-r--r--ion3/files/20061223/201_all_fix-paths.patch90
-rw-r--r--ion3/files/20061223/202_all_fix-menus.patch13
-rw-r--r--ion3/files/20061223/205_all_ion-lock.patch22
-rw-r--r--ion3/files/20061223/207_all_bindings-manpage.patch117
-rw-r--r--ion3/files/20070203/201_all_fix-paths.patch90
-rw-r--r--ion3/files/20070203/202_all_fix-menus.patch13
-rw-r--r--ion3/files/20070203/205_all_ion-lock.patch22
-rw-r--r--ion3/files/20070203/207_all_bindings-manpage.patch117
-rw-r--r--ion3/files/20070318/201_all_fix-paths.patch90
-rw-r--r--ion3/files/20070318/202_all_fix-menus.patch13
-rw-r--r--ion3/files/20070318/205_all_ion-lock.patch22
-rw-r--r--ion3/files/20070318/207_all_bindings-manpage.patch117
-rw-r--r--ion3/files/20070318/208_all_as-needed.patch12
-rw-r--r--ion3/files/20070506/200_all_fix_includes.patch22
-rw-r--r--ion3/files/20070506/201_all_fix-paths.patch90
-rw-r--r--ion3/files/20070506/202_all_fix-menus.patch13
-rw-r--r--ion3/files/20070506/205_all_ion-lock.patch22
-rw-r--r--ion3/files/20070506/208_all_as-needed.patch12
-rw-r--r--ion3/files/digest-ion3-200603263
-rw-r--r--ion3/files/digest-ion3-2006122315
-rw-r--r--ion3/files/digest-ion3-20070318-r212
-rw-r--r--ion3/files/digest-ion3-20070506-r115
-rw-r--r--ion3/files/ion3-20060317-truetype.patch741
-rw-r--r--ion3/files/ion3-20060326-truetype.patch741
-rw-r--r--ion3/files/ion3.desktop9
-rw-r--r--ion3/files/pwm3.desktop9
-rw-r--r--ion3/files/xft-ion3-20070318.patch689
-rw-r--r--ion3/files/xft-ion3-20070506.patch669
-rw-r--r--ion3/ion3-20060326.ebuild84
-rw-r--r--ion3/ion3-20061223.ebuild175
-rw-r--r--ion3/ion3-20070318-r2.ebuild190
-rw-r--r--ion3/ion3-20070506-r1.ebuild195
-rw-r--r--ion3/metadata.xml9
35 files changed, 4891 insertions, 0 deletions
diff --git a/ion3/ChangeLog b/ion3/ChangeLog
new file mode 100644
index 0000000..211350b
--- /dev/null
+++ b/ion3/ChangeLog
@@ -0,0 +1,281 @@
+# ChangeLog for x11-wm/ion3
+# Copyright 2000-2007 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/x11-wm/ion3/ChangeLog,v 1.55 2007/06/05 13:29:53 mabi Exp $
+
+ 05 Jun 2007; Matti Bickel <mabi@gentoo.org> ion3-20060326.ebuild,
+ ion3-20061223.ebuild, ion3-20070318-r2.ebuild:
+ Change all ion-truetype USE to ion3-voidupstreamsupport-truetype, thanks to
+ Mr. Bones for notifying me
+
+ 03 Jun 2007; Matti Bickel <mabi@gentoo.org> ion3-20070506-r1.ebuild:
+ Patch version.h at request of upstream
+
+ 03 Jun 2007; Matti Bickel <mabi@gentoo.org> metadata.xml,
+ ion3-20070506-r1.ebuild:
+ Conform to upstream's license, officially take maintainership
+
+ 02 Jun 2007; Matti Bickel <mabi@gentoo.org>
+ +files/xft-ion3-20070506.patch:
+ Added missing xft-ion3-20070506.patch (bug #180491)
+
+*ion3-20070506-r1 (01 Jun 2007)
+
+ 01 Jun 2007; Matti Bickel <mabi@gentoo.org> -ion3-20070318.ebuild,
+ -ion3-20070506.ebuild, +ion3-20070506-r1.ebuild:
+ fix retarded use of $(get_libdir), fix LICENSE
+
+*ion3-20070506 (12 May 2007)
+
+ 12 May 2007; Matti Bickel <mabi@gentoo.org>
+ +files/20070506/200_all_fix_includes.patch,
+ +files/20070506/201_all_fix-paths.patch,
+ +files/20070506/202_all_fix-menus.patch,
+ +files/20070506/205_all_ion-lock.patch,
+ +files/20070506/208_all_as-needed.patch, +ion3-20070506.ebuild:
+ Version bump. Note that this is the first release candidate. All
+ unconditional patches are minor according to the changed license file.
+ Also note that IUSE has changed in accordance with the new license.
+ Please reproduce any error you might have with all useflags disabled before
+ bugging upstream. File bugs at bugs.gentoo.org instead.
+
+*ion3-20070318-r2 (30 Apr 2007)
+
+ 30 Apr 2007; Matti Bickel <mabi@gentoo.org>
+ +files/20070318/208_all_as-needed.patch, -ion3-20070318-r1.ebuild,
+ +ion3-20070318-r2.ebuild:
+ patch --as-needed instead of filtering it (bug #171391)
+
+*ion3-20070318-r1 (28 Apr 2007)
+
+ 28 Apr 2007; Matti Bickel <mabi@gentoo.org> -ion3-20060317.ebuild,
+ -ion3-20070203.ebuild, +ion3-20070318-r1.ebuild:
+ filtering --as-needed now, cleanup
+
+ 26 Mar 2007; RaĂşl Porcel <armin76@gentoo.org> ion3-20061223.ebuild,
+ ion3-20070203.ebuild, ion3-20070318.ebuild:
+ Readd ~ia64 wrt bug 162985
+
+*ion3-20070318 (25 Mar 2007)
+
+ 25 Mar 2007; Matti Bickel <mabi@gentoo.org>
+ +files/20070318/201_all_fix-paths.patch,
+ +files/20070318/205_all_ion-lock.patch, +files/xft-ion3-20070318.patch,
+ +files/20070318/202_all_fix-menus.patch,
+ +files/20070318/207_all_bindings-manpage.patch, +ion3-20070318.ebuild:
+ Version bump; readded iontruetype USE for problems with non latin fonts,
+ added docs
+
+*ion3-20070203 (11 Mar 2007)
+
+ 11 Mar 2007; Matti Bickel <mabi@gentoo.org>
+ +files/20070203/201_all_fix-paths.patch,
+ +files/20070203/202_all_fix-menus.patch,
+ +files/20070203/205_all_ion-lock.patch,
+ +files/20070203/207_all_bindings-manpage.patch, +ion3-20070203.ebuild:
+ Version bump (warning: no xinerama, no xft support)
+
+ 21 Feb 2007; Markus Ullmann <jokey@gentoo.org> ChangeLog:
+ Redigest for Manifest2
+
+ 03 Feb 2007; Simon Stelling <blubb@gentoo.org> ion3-20061223.ebuild:
+ re-add ~amd64; bug 162985
+
+ 03 Feb 2007; Jason Wever <weeve@gentoo.org> ion3-20061223.ebuild:
+ Added ~sparc keyword wrt bug #162985.
+
+ 22 Jan 2007; Matti Bickel <mabi@gentoo.org> ion3-20061223.ebuild:
+ Fixing sandbox violation (missing sed add) (bug #163104)
+
+*ion3-20061223-r1 (20 Jan 2007)
+
+ 20 Jan 2007; Matti Bickel <mabi@gentoo.org>
+ +files/20061223/201_all_fix-paths.patch,
+ +files/20061223/202_all_fix-menus.patch,
+ +files/20061223/205_all_ion-lock.patch,
+ +files/20061223/207_all_bindings-manpage.patch, +ion3-20061223.ebuild:
+ Revision bump (bug #136077)
+
+ 27 Dec 2006; Matti Bickel <mabi@gentoo.org> ion3-20060317.ebuild,
+ ion3-20060326.ebuild:
+ Fix deps to lua-5.0.* (bug #158628)
+
+ 08 Dec 2006; <twp@gentoo.org> ion3-20060326.ebuild:
+ Added x11-libs/libSM dependency. Bug # 157171.
+
+*ion3-20060326 (06 Apr 2006)
+
+ 06 Apr 2006; Tom Payne <twp@gentoo.org>
+ -files/ion3-20060305-truetype.patch, +files/ion3-20060326-truetype.patch,
+ -ion3-20060305.ebuild, -ion3-20060305-r1.ebuild, +ion3-20060326.ebuild:
+ Version bump.
+
+ 20 Mar 2006; Tom Payne <twp@gentoo.org> ion3-20060305-r1.ebuild,
+ ion3-20060317.ebuild:
+ Use USE=iontruetype rather than USE=truetype to enable XFT support at
+ request of upstream.
+
+*ion3-20060317 (17 Mar 2006)
+
+ 17 Mar 2006; Tom Payne <twp@gentoo.org>
+ +files/ion3-20060317-truetype.patch, -ion3-20060107.ebuild,
+ +ion3-20060317.ebuild:
+ Version bump.
+
+*ion3-20060305-r1 (14 Mar 2006)
+
+ 14 Mar 2006; Tom Payne <twp@gentoo.org>
+ +files/ion3-20060305-truetype.patch, +ion3-20060305-r1.ebuild:
+ Added truetype support. Patch from Clemens Fruhwirth.
+
+*ion3-20060305 (05 Mar 2006)
+
+ 05 Mar 2006; Tom Payne <twp@gentoo.org>
+ -files/ion3-20051029-statusd-locale.patch, -ion3-20051210.ebuild,
+ +ion3-20060305.ebuild:
+ Version bump.
+
+ 23 Feb 2006; Markus Rothe <corsair@gentoo.org> ion3-20060107.ebuild:
+ Added ~ppc64; bug #123845
+
+*ion3-20060107 (15 Jan 2006)
+
+ 15 Jan 2006; Tom Payne <twp@gentoo.org> -ion3-20051029.ebuild,
+ +ion3-20060107.ebuild:
+ Version bump and patch for modular X. Bug # 117459. Thanks Mike Auty.
+
+ 15 Jan 2006; Tom Payne <twp@gentoo.org> -ion3-20050116.ebuild:
+ Remove old version. ion3 is still under development and should not be marked
+ stable.
+
+*ion3-20051210 (10 Dec 2005)
+
+ 10 Dec 2005; Tom Payne <twp@gentoo.org> -files/ion3-20051023-r1.patch,
+ -ion3-20050820.ebuild, -ion3-20051023-r1.ebuild, +ion3-20051210.ebuild:
+ Version bump.
+
+ 01 Nov 2005; Tom Payne <twp@gentoo.org>
+ +files/ion3-20051029-statusd-locale.patch, ion3-20051029.ebuild:
+ Add patch for amd64. Bug # 110860.
+
+*ion3-20051029 (29 Oct 2005)
+
+ 29 Oct 2005; Tom Payne <twp@gentoo.org> +ion3-20051029.ebuild:
+ Version bump.
+
+*ion3-20051023-r1 (26 Oct 2005)
+
+ 26 Oct 2005; Tom Payne <twp@gentoo.org> +files/ion3-20051023-r1.patch,
+ -ion3-20051023.ebuild, +ion3-20051023-r1.ebuild:
+ Apply patch to fix status bar issue. Bug # 110417. Thanks Frank Zschockelt
+
+*ion3-20051023 (24 Oct 2005)
+
+ 24 Oct 2005; Tom Payne <twp@gentoo.org> -ion3-20050728.ebuild,
+ +ion3-20051023.ebuild:
+ Version bump. Remove old version.
+
+*ion3-20050820 (16 Sep 2005)
+
+ 16 Sep 2005; Tom Payne <twp@gentoo.org> -ion3-20050625.ebuild,
+ +ion3-20050820.ebuild:
+ Version bump. Remove old version.
+
+*ion3-20050728 (19 Aug 2005)
+
+ 19 Aug 2005; Tom Payne <twp@gentoo.org> -ion3-20050502.ebuild,
+ +ion3-20050728.ebuild:
+ Version bump. Remove old version.
+
+*ion3-20050625 (10 Jul 2005)
+
+ 10 Jul 2005; Tom Payne <twp@gentoo.org> -ion3-20050322.ebuild,
+ +ion3-20050625.ebuild:
+ Version bump. Removed old version.
+
+ 01 Jul 2005; Joseph Jezak <josejx@gentoo.org> ion3-20050116.ebuild:
+ Marked ppc stable for bug #97635.
+
+*ion3-20050505 (10 May 2005)
+
+ 10 May 2005: Joshua Charles Campbell <warpzero@gentoo.org> ion3-20050505.ebuild,
+ Version bump.
+
+ 21 Apr 2005; Aron Griffis <agriffis@gentoo.org> ion3-20050116.ebuild,
+ ion3-20050322.ebuild:
+ Add ia64 keywords
+
+ 04 Apr 2005; Aron Griffis <agriffis@gentoo.org> ion3-20050116.ebuild:
+ stable on amd64
+
+*ion3-20050322 (26 Mar 2005)
+
+ 26 Mar 2005; Tom Payne <twp@gentoo.org> -files/ion.desktop,
+ -ion3-20041104.ebuild, -ion3-20050102.ebuild, ion3-20050116.ebuild,
+ +ion3-20050322.ebuild:
+ Version bump. Remove references to ion3-svn. Remove old version.
+
+ 03 Feb 2005; Gustavo Zacarias <gustavoz@gentoo.org> ion3-20050116.ebuild:
+ Stable on sparc
+
+ 28 Jan 2005; Aron Griffis <agriffis@gentoo.org> ion3-20050116.ebuild:
+ stable on alpha and x86
+
+*ion3-20050116 (25 Jan 2005)
+
+ 25 Jan 2005; Tom Payne <twp@gentoo.org> +ion3-20050116.ebuild:
+ Version bump. Bug # 79516. Removed old version.
+
+*ion3-20050102 (02 Jan 2005)
+
+ 02 Jan 2005; Tom Payne <twp@gentoo.org> +ion3-20050102.ebuild:
+ Version bump.
+
+ 01 Jan 2005; Tom Payne <twp@gentoo.org> ion3-20041005.ebuild,
+ ion3-20041104.ebuild:
+ Stable on x86.
+
+ 20 Dec 2004; Tom Payne <twp@gentoo.org> -ion3-20040906.ebuild:
+ Removed old version.
+
+ 19 Dec 2004; Tom Payne <twp@gentoo.org>
+ -files/ion3-20040316-libtu-I.patch, -files/ion3-20040316_p1-rename.patch:
+ Remove unused patches.
+
+*ion3-20041104 (19 Dec 2004)
+
+ 19 Dec 2004; Tom Payne <twp@gentoo.org> ion3-20040906.ebuild,
+ ion3-20041005.ebuild, +ion3-20041104.ebuild:
+ Prevent sandbox violation. Bug # 73672. Version bump. Bug # 74203.
+
+*ion3-20041005 (05 Oct 2004)
+
+ 05 Oct 2004; Tom Payne <twp@gentoo.org> -ion3-20040316_p1-r1.ebuild,
+ -ion3-20040316_p1.ebuild, +ion3-20041005.ebuild:
+ Version bump, remove old versions.
+
+*ion3-20040906 (06 Sep 2004)
+
+ 06 Sep 2004; Tom Payne <twp@gentoo.org> +ion3-20040906.ebuild:
+ Version bump.
+
+ 05 Sep 2004; Guy Martin <gmsoft@gentoo.org> ion3-20040316_p1-r1.ebuild:
+ Fixed for hppa. Marked ~hppa.
+
+*ion3-20040316_p1-r1 (09 May 2004)
+
+ 09 May 2004; <twp@gentoo.org> +files/ion3-20040316_p1-rename.patch,
+ +files/ion3.desktop, +files/pwm3.desktop, +ion3-20040316_p1-r1.ebuild:
+ Rename binaries, directories, etc. from ion to ion3.
+
+ 07 Apr 2004; Travis Tilley <lv@gentoo.org> ion3-20040316_p1.ebuild:
+ added ~amd64 keyword
+
+*ion3-20040316_p1 (23 Mar 2004)
+
+ 23 Mar 2004; Tom Payne <twp@gentoo.org> ion3-20040316_p1.ebuild :
+ Version bump.
+
+*ion3-20040316 (16 Mar 2004)
+
+ 16 Mar 2004; Tom Payne <twp@gentoo.org> ion3-20040316.ebuild :
+ Initial import.
diff --git a/ion3/Manifest b/ion3/Manifest
new file mode 100644
index 0000000..e28f165
--- /dev/null
+++ b/ion3/Manifest
@@ -0,0 +1,157 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+AUX 20061223/201_all_fix-paths.patch 2578 RMD160 1e507b2b7493f94c9e63de2d1c5e7a4a370f2bbe SHA1 92cb162401d7e970a1429437bfeef9c9684f62fb SHA256 e1eca4fca542aeeb2b6dd39b7f082d49dc7c9b526bb23b668c72fab639c2c76c
+MD5 e9d2532398ca5bebda1b6e3758227006 files/20061223/201_all_fix-paths.patch 2578
+RMD160 1e507b2b7493f94c9e63de2d1c5e7a4a370f2bbe files/20061223/201_all_fix-paths.patch 2578
+SHA256 e1eca4fca542aeeb2b6dd39b7f082d49dc7c9b526bb23b668c72fab639c2c76c files/20061223/201_all_fix-paths.patch 2578
+AUX 20061223/202_all_fix-menus.patch 914 RMD160 99dc842cf99391f965d1553e862a57b98e397592 SHA1 fdd9f2bf50c2363bf97727e8c01b29920f0c541d SHA256 534148c3657cf894d99ac11ef228d87bd371e688b79ecdf96e264f7a1c753ced
+MD5 5f9da59501907e01cde25b5451f6feab files/20061223/202_all_fix-menus.patch 914
+RMD160 99dc842cf99391f965d1553e862a57b98e397592 files/20061223/202_all_fix-menus.patch 914
+SHA256 534148c3657cf894d99ac11ef228d87bd371e688b79ecdf96e264f7a1c753ced files/20061223/202_all_fix-menus.patch 914
+AUX 20061223/205_all_ion-lock.patch 780 RMD160 9834836d55fb390f06d8e3c1ea821ef01c1a74b8 SHA1 6bd0278dd7d56fd9f1025fae8a00db24bf0e781f SHA256 ea4ad810355fab8a848e6506a6a2762b5ab9c37f28a7edac73030e6026bc3fae
+MD5 4f2dcedcbf6d885723d1b888f0aacb87 files/20061223/205_all_ion-lock.patch 780
+RMD160 9834836d55fb390f06d8e3c1ea821ef01c1a74b8 files/20061223/205_all_ion-lock.patch 780
+SHA256 ea4ad810355fab8a848e6506a6a2762b5ab9c37f28a7edac73030e6026bc3fae files/20061223/205_all_ion-lock.patch 780
+AUX 20061223/207_all_bindings-manpage.patch 3159 RMD160 efcb802e1e00b85398facc945053fe793ed2d223 SHA1 c9a317080edd7a4f297c40572ca5a6474851ca87 SHA256 1e5d315510dde32a94b0e967cc1a315cd84cbb43f03b9a928ad80ee7a75945ba
+MD5 dbd4e494033db439cd0610ef880e2659 files/20061223/207_all_bindings-manpage.patch 3159
+RMD160 efcb802e1e00b85398facc945053fe793ed2d223 files/20061223/207_all_bindings-manpage.patch 3159
+SHA256 1e5d315510dde32a94b0e967cc1a315cd84cbb43f03b9a928ad80ee7a75945ba files/20061223/207_all_bindings-manpage.patch 3159
+AUX 20070203/201_all_fix-paths.patch 2578 RMD160 1e507b2b7493f94c9e63de2d1c5e7a4a370f2bbe SHA1 92cb162401d7e970a1429437bfeef9c9684f62fb SHA256 e1eca4fca542aeeb2b6dd39b7f082d49dc7c9b526bb23b668c72fab639c2c76c
+MD5 e9d2532398ca5bebda1b6e3758227006 files/20070203/201_all_fix-paths.patch 2578
+RMD160 1e507b2b7493f94c9e63de2d1c5e7a4a370f2bbe files/20070203/201_all_fix-paths.patch 2578
+SHA256 e1eca4fca542aeeb2b6dd39b7f082d49dc7c9b526bb23b668c72fab639c2c76c files/20070203/201_all_fix-paths.patch 2578
+AUX 20070203/202_all_fix-menus.patch 914 RMD160 99dc842cf99391f965d1553e862a57b98e397592 SHA1 fdd9f2bf50c2363bf97727e8c01b29920f0c541d SHA256 534148c3657cf894d99ac11ef228d87bd371e688b79ecdf96e264f7a1c753ced
+MD5 5f9da59501907e01cde25b5451f6feab files/20070203/202_all_fix-menus.patch 914
+RMD160 99dc842cf99391f965d1553e862a57b98e397592 files/20070203/202_all_fix-menus.patch 914
+SHA256 534148c3657cf894d99ac11ef228d87bd371e688b79ecdf96e264f7a1c753ced files/20070203/202_all_fix-menus.patch 914
+AUX 20070203/205_all_ion-lock.patch 780 RMD160 9834836d55fb390f06d8e3c1ea821ef01c1a74b8 SHA1 6bd0278dd7d56fd9f1025fae8a00db24bf0e781f SHA256 ea4ad810355fab8a848e6506a6a2762b5ab9c37f28a7edac73030e6026bc3fae
+MD5 4f2dcedcbf6d885723d1b888f0aacb87 files/20070203/205_all_ion-lock.patch 780
+RMD160 9834836d55fb390f06d8e3c1ea821ef01c1a74b8 files/20070203/205_all_ion-lock.patch 780
+SHA256 ea4ad810355fab8a848e6506a6a2762b5ab9c37f28a7edac73030e6026bc3fae files/20070203/205_all_ion-lock.patch 780
+AUX 20070203/207_all_bindings-manpage.patch 3159 RMD160 efcb802e1e00b85398facc945053fe793ed2d223 SHA1 c9a317080edd7a4f297c40572ca5a6474851ca87 SHA256 1e5d315510dde32a94b0e967cc1a315cd84cbb43f03b9a928ad80ee7a75945ba
+MD5 dbd4e494033db439cd0610ef880e2659 files/20070203/207_all_bindings-manpage.patch 3159
+RMD160 efcb802e1e00b85398facc945053fe793ed2d223 files/20070203/207_all_bindings-manpage.patch 3159
+SHA256 1e5d315510dde32a94b0e967cc1a315cd84cbb43f03b9a928ad80ee7a75945ba files/20070203/207_all_bindings-manpage.patch 3159
+AUX 20070318/201_all_fix-paths.patch 2578 RMD160 1e507b2b7493f94c9e63de2d1c5e7a4a370f2bbe SHA1 92cb162401d7e970a1429437bfeef9c9684f62fb SHA256 e1eca4fca542aeeb2b6dd39b7f082d49dc7c9b526bb23b668c72fab639c2c76c
+MD5 e9d2532398ca5bebda1b6e3758227006 files/20070318/201_all_fix-paths.patch 2578
+RMD160 1e507b2b7493f94c9e63de2d1c5e7a4a370f2bbe files/20070318/201_all_fix-paths.patch 2578
+SHA256 e1eca4fca542aeeb2b6dd39b7f082d49dc7c9b526bb23b668c72fab639c2c76c files/20070318/201_all_fix-paths.patch 2578
+AUX 20070318/202_all_fix-menus.patch 990 RMD160 a49c2e8c44c4c7ddceae989a0637cb4ca51647f4 SHA1 ef72a6d5b100c8148d96f6718bc95a456a3b51eb SHA256 2f9404a884e28f9d7ff42ba6ae24df99436b7a9f3c75560282fb87daa9fdf9af
+MD5 aecae9e8f4e48e9b74532a3309643598 files/20070318/202_all_fix-menus.patch 990
+RMD160 a49c2e8c44c4c7ddceae989a0637cb4ca51647f4 files/20070318/202_all_fix-menus.patch 990
+SHA256 2f9404a884e28f9d7ff42ba6ae24df99436b7a9f3c75560282fb87daa9fdf9af files/20070318/202_all_fix-menus.patch 990
+AUX 20070318/205_all_ion-lock.patch 780 RMD160 9834836d55fb390f06d8e3c1ea821ef01c1a74b8 SHA1 6bd0278dd7d56fd9f1025fae8a00db24bf0e781f SHA256 ea4ad810355fab8a848e6506a6a2762b5ab9c37f28a7edac73030e6026bc3fae
+MD5 4f2dcedcbf6d885723d1b888f0aacb87 files/20070318/205_all_ion-lock.patch 780
+RMD160 9834836d55fb390f06d8e3c1ea821ef01c1a74b8 files/20070318/205_all_ion-lock.patch 780
+SHA256 ea4ad810355fab8a848e6506a6a2762b5ab9c37f28a7edac73030e6026bc3fae files/20070318/205_all_ion-lock.patch 780
+AUX 20070318/207_all_bindings-manpage.patch 3159 RMD160 efcb802e1e00b85398facc945053fe793ed2d223 SHA1 c9a317080edd7a4f297c40572ca5a6474851ca87 SHA256 1e5d315510dde32a94b0e967cc1a315cd84cbb43f03b9a928ad80ee7a75945ba
+MD5 dbd4e494033db439cd0610ef880e2659 files/20070318/207_all_bindings-manpage.patch 3159
+RMD160 efcb802e1e00b85398facc945053fe793ed2d223 files/20070318/207_all_bindings-manpage.patch 3159
+SHA256 1e5d315510dde32a94b0e967cc1a315cd84cbb43f03b9a928ad80ee7a75945ba files/20070318/207_all_bindings-manpage.patch 3159
+AUX 20070318/208_all_as-needed.patch 350 RMD160 d4a5d21442b8cdb618e116dd542389b2c6a0d442 SHA1 2a59201ad480f35e7553c4bd470c696fc5dc0436 SHA256 0bedd444e6384f35f6b37c4ec2848150f25ae1d1b93fe5062934887786cba893
+MD5 477892385b4dd0708761fe54886459d7 files/20070318/208_all_as-needed.patch 350
+RMD160 d4a5d21442b8cdb618e116dd542389b2c6a0d442 files/20070318/208_all_as-needed.patch 350
+SHA256 0bedd444e6384f35f6b37c4ec2848150f25ae1d1b93fe5062934887786cba893 files/20070318/208_all_as-needed.patch 350
+AUX 20070506/200_all_fix_includes.patch 893 RMD160 cc39ca826bacfd0c3d1ea5f2d314fb0b52e27fb7 SHA1 a3661dc5568a8417f2efba212fd6785c4ac67aa4 SHA256 e8b2cefc75631d9ea7e5085528eea5f51fc4d41b9dd8d02d9da039928cb55ee2
+MD5 8f7a63a0ee74b4ecce09dbc78f84a26c files/20070506/200_all_fix_includes.patch 893
+RMD160 cc39ca826bacfd0c3d1ea5f2d314fb0b52e27fb7 files/20070506/200_all_fix_includes.patch 893
+SHA256 e8b2cefc75631d9ea7e5085528eea5f51fc4d41b9dd8d02d9da039928cb55ee2 files/20070506/200_all_fix_includes.patch 893
+AUX 20070506/201_all_fix-paths.patch 2578 RMD160 1e507b2b7493f94c9e63de2d1c5e7a4a370f2bbe SHA1 92cb162401d7e970a1429437bfeef9c9684f62fb SHA256 e1eca4fca542aeeb2b6dd39b7f082d49dc7c9b526bb23b668c72fab639c2c76c
+MD5 e9d2532398ca5bebda1b6e3758227006 files/20070506/201_all_fix-paths.patch 2578
+RMD160 1e507b2b7493f94c9e63de2d1c5e7a4a370f2bbe files/20070506/201_all_fix-paths.patch 2578
+SHA256 e1eca4fca542aeeb2b6dd39b7f082d49dc7c9b526bb23b668c72fab639c2c76c files/20070506/201_all_fix-paths.patch 2578
+AUX 20070506/202_all_fix-menus.patch 990 RMD160 a49c2e8c44c4c7ddceae989a0637cb4ca51647f4 SHA1 ef72a6d5b100c8148d96f6718bc95a456a3b51eb SHA256 2f9404a884e28f9d7ff42ba6ae24df99436b7a9f3c75560282fb87daa9fdf9af
+MD5 aecae9e8f4e48e9b74532a3309643598 files/20070506/202_all_fix-menus.patch 990
+RMD160 a49c2e8c44c4c7ddceae989a0637cb4ca51647f4 files/20070506/202_all_fix-menus.patch 990
+SHA256 2f9404a884e28f9d7ff42ba6ae24df99436b7a9f3c75560282fb87daa9fdf9af files/20070506/202_all_fix-menus.patch 990
+AUX 20070506/205_all_ion-lock.patch 780 RMD160 9834836d55fb390f06d8e3c1ea821ef01c1a74b8 SHA1 6bd0278dd7d56fd9f1025fae8a00db24bf0e781f SHA256 ea4ad810355fab8a848e6506a6a2762b5ab9c37f28a7edac73030e6026bc3fae
+MD5 4f2dcedcbf6d885723d1b888f0aacb87 files/20070506/205_all_ion-lock.patch 780
+RMD160 9834836d55fb390f06d8e3c1ea821ef01c1a74b8 files/20070506/205_all_ion-lock.patch 780
+SHA256 ea4ad810355fab8a848e6506a6a2762b5ab9c37f28a7edac73030e6026bc3fae files/20070506/205_all_ion-lock.patch 780
+AUX 20070506/208_all_as-needed.patch 350 RMD160 d4a5d21442b8cdb618e116dd542389b2c6a0d442 SHA1 2a59201ad480f35e7553c4bd470c696fc5dc0436 SHA256 0bedd444e6384f35f6b37c4ec2848150f25ae1d1b93fe5062934887786cba893
+MD5 477892385b4dd0708761fe54886459d7 files/20070506/208_all_as-needed.patch 350
+RMD160 d4a5d21442b8cdb618e116dd542389b2c6a0d442 files/20070506/208_all_as-needed.patch 350
+SHA256 0bedd444e6384f35f6b37c4ec2848150f25ae1d1b93fe5062934887786cba893 files/20070506/208_all_as-needed.patch 350
+AUX ion3-20060317-truetype.patch 19704 RMD160 6a11b4d81926224171618c036b5597948e23d89a SHA1 c387e111c65d098793ef59d020225d3770688a2a SHA256 a1934d7ea40f959579b4b4b20f08bcbc9f037beb7e50737f8110273f7f5f58d5
+MD5 f77e47b00b912f3b0b6bb35a53f158a1 files/ion3-20060317-truetype.patch 19704
+RMD160 6a11b4d81926224171618c036b5597948e23d89a files/ion3-20060317-truetype.patch 19704
+SHA256 a1934d7ea40f959579b4b4b20f08bcbc9f037beb7e50737f8110273f7f5f58d5 files/ion3-20060317-truetype.patch 19704
+AUX ion3-20060326-truetype.patch 19704 RMD160 ca9b3ee77b0a61384006728cd8839d76f6957c13 SHA1 9d4e24979cbf1434f16245054232b39c52a46e6e SHA256 3e241b25c938241e3f791203486fef17072ff46b1d77f54c8da7e23c2849c56d
+MD5 137137dfcda1e2b062faec090c1c792d files/ion3-20060326-truetype.patch 19704
+RMD160 ca9b3ee77b0a61384006728cd8839d76f6957c13 files/ion3-20060326-truetype.patch 19704
+SHA256 3e241b25c938241e3f791203486fef17072ff46b1d77f54c8da7e23c2849c56d files/ion3-20060326-truetype.patch 19704
+AUX ion3.desktop 217 RMD160 438917d6c0370e7a368598ea611ec7658312627d SHA1 cf5cd1f09faf7530f8cb2f832a17c0cf893541c4 SHA256 4742797e200b956abf3d0b94d860aa7430c9f67a97f3640ef2c28168fa773bb9
+MD5 00450ed1292b72e2be71b9860c4db6ee files/ion3.desktop 217
+RMD160 438917d6c0370e7a368598ea611ec7658312627d files/ion3.desktop 217
+SHA256 4742797e200b956abf3d0b94d860aa7430c9f67a97f3640ef2c28168fa773bb9 files/ion3.desktop 217
+AUX pwm3.desktop 170 RMD160 7a33137ccf3857cacd7ff693df2e8952e16e3a84 SHA1 7ff6792b6e61a9a2fbb4f0fa7e3d9dbf856c8d28 SHA256 e068670634d31e58db4f54e703707f7908d30ced7f765e30ab590615b3d5dccd
+MD5 e5e408ab1f83116c2138a26b20c86653 files/pwm3.desktop 170
+RMD160 7a33137ccf3857cacd7ff693df2e8952e16e3a84 files/pwm3.desktop 170
+SHA256 e068670634d31e58db4f54e703707f7908d30ced7f765e30ab590615b3d5dccd files/pwm3.desktop 170
+AUX xft-ion3-20070318.patch 19100 RMD160 7d0d01e42d65961655046f6485011425311e8723 SHA1 618fbe025e634c3aac844bdc1a2210dbecb60215 SHA256 d5e57e91185ae5c508ed036d689b5ea58e7322b633705503cfaa5ac18ff9f936
+MD5 319a7254cf4093a9e84993515b9462ec files/xft-ion3-20070318.patch 19100
+RMD160 7d0d01e42d65961655046f6485011425311e8723 files/xft-ion3-20070318.patch 19100
+SHA256 d5e57e91185ae5c508ed036d689b5ea58e7322b633705503cfaa5ac18ff9f936 files/xft-ion3-20070318.patch 19100
+AUX xft-ion3-20070506.patch 18375 RMD160 2510ae25502346f0347eafce8a313aac4db2a36c SHA1 ae75b297d6cf8c3f5dfd3793c22d754369f982bb SHA256 1db26c1db08b9a87530ef29ad2538cf191bc5d08630cc776f1dbd61940eff21f
+MD5 68f3da20b45ec583347b5325d9062e19 files/xft-ion3-20070506.patch 18375
+RMD160 2510ae25502346f0347eafce8a313aac4db2a36c files/xft-ion3-20070506.patch 18375
+SHA256 1db26c1db08b9a87530ef29ad2538cf191bc5d08630cc776f1dbd61940eff21f files/xft-ion3-20070506.patch 18375
+DIST ion-3ds-20060326.tar.gz 617533 RMD160 147e6ad20c69ca8fe5a80dcd57ce6002a2b3cde1 SHA1 5202322198071f7cee2aefc2bcc8bd0b3a08a490 SHA256 9f3c96c961e47c61e9c10b57de820b608b9d9fdaa43a893e63499b3f17231124
+DIST ion-3ds-20061223.tar.gz 649463 RMD160 dc61a012354a30f1a83b8b0970b8c09724ea4c9c SHA1 8bccf120ce27b26feb67a916ba61748e85e69733 SHA256 0970fef74de659de45813471560ebe2f97b893de7a238ea00755fcaeb9b7d89e
+DIST ion-3ds-20070318.tar.gz 657282 RMD160 a7cc9baea3624b0ed840fdc82fc5db2ac1018d9a SHA1 f352a1c7f6f465478141d538b2a4c3f3e81a4f30 SHA256 712da027fb12774f67d933d95a95452d98a5658617fc5515011ca79b6035258a
+DIST ion-3rc-20070506.tar.gz 640482 RMD160 b5dda6a7a48c1f3d433b2a2b1c37294ece79a259 SHA1 81071df77b720ebad5630bd15a4c6b6e0787caf0 SHA256 850dce3bd1be5d200fda5ba3e6085f397b35c720f7758dc5481bf503fe5d2f56
+DIST ion-doc-3rc-20070506.tar.gz 669471 RMD160 aa9e75b60c121d3cd62f60afed4592fe1bc0da87 SHA1 1991e12e4f72153f2e02c70910322317c73a7c01 SHA256 9dac4f5e69121b98cf6e5da455d6185f00605cf237f14fc4f8578446f622476e
+DIST ion3-doc-20070318.tar.bz2 38870 RMD160 5fc0225ad23f1c96b5e979d66185ea608372297d SHA1 93c14f675f5fba3212232ed127af4d4481716884 SHA256 22ca643ca5df67086f12d3f106b16094017477c41fd1ebd73d30607db206821b
+DIST ion3-mod-ionflux-20070512.tar.bz2 12770 RMD160 8e834de0c3048b676bc5c5d5454aedac09129eb3 SHA1 d482654557104adfbf6d184e44f87a993577720a SHA256 63c4902159923aa02921e39aa7746ca8819ba1c216efa8fa6384fd093f60d18c
+DIST ion3-mod-ionflux_20061022.orig.tar.gz 14847 RMD160 86bcc2a260f3e37d613bcebd66f37616e56d3926 SHA1 64d56a158de66cd15b03dfdccc8162509432fa01 SHA256 f9fd872d2d5b35f882d9a9161dee52fd5b2bb346c46f9e6cc30922dcda99c935
+DIST ion3-mod-xrandr-20061021.tar.bz2 10762 RMD160 cca3f472e32b8aff1ce8af123c24e17574c1b197 SHA1 9c36bc4be2a97f6a9256054ffbb946ad7dc6965a SHA256 cd2225a356ddfc6f02062bf23c1e90fa573661347ff185316aeae0e18eee72ef
+DIST ion3-mod-xrandr-20070220.tar.bz2 10822 RMD160 680714961af7e6b81896c4d989baded5ea4c5222 SHA1 11e3829f16b48e90de71469b2013a0cda9ac2eb8 SHA256 858a72ad203fb98f3cea672809a2cdfd7cb87cfa744e622e5a04d2f87cc1ae38
+DIST ion3-mod-xrandr-20070410.tar.bz2 10833 RMD160 8542c0dfebfd1536e6a1ad89a3b791609ca8f16e SHA1 a1ef665e0914154bf89f8b5fc8f282695438f06f SHA256 80f23a435b21f8691fc63b78394fa29b25b5304f46895dd961ac905bcc76c82f
+DIST ion3-scripts-20070322.tar.bz2 101212 RMD160 101a6dd933b5b9b495ca4607a7e0d48d48a9c409 SHA1 7dbbec42f3b97da16d05987347f0c3ae54c76eec SHA256 6864d75f2f7ca021368b52051c297f5590047257ca39d0332af65c7fef0f8d39
+DIST ion3-scripts-20070510.tar.bz2 100952 RMD160 4ac0fff86a039d5890bd934d80c33bb5a78fb02d SHA1 c255ed826a19bc681ed34f41c4cd6dd053da76d6 SHA256 53c4705ab6f880404aae92cef3018a956ee1b55d0e22ef93c12d30527a419a61
+DIST ion3-scripts_20061214.orig.tar.gz 129181 RMD160 b22827c490f23252c1953582d24a19a5aa0aaed0 SHA1 7095657b7bc3f7eba5e564e67ca09bb7b0e1a010 SHA256 82e25973fcfdd282bdb3734191f8a5b0d711b2bf0cb64196d3b42351185fdbcf
+DIST xft-ion3-for-darcs-20061202.diff 20126 RMD160 054efa097492531d800bca85582d5b6836567408 SHA1 2405218fb387c3ac76ff1612bd6f4482cf459a0f SHA256 6af98c329395acb46ddbdac4f0ba023c6e5344914cc06cdfa82339526ce25b3c
+EBUILD ion3-20060326.ebuild 1982 RMD160 1c859482c49b2def0ef08ab184cbfe281cac8af2 SHA1 cf58eebbd87779b38f4fb8b5c50b0c4de517ad65 SHA256 17736fa6d2e1d6583b5e4aab65fe7d2f04182a3706c190f4cd4aecd9a8468e9b
+MD5 7b4a28c80dae5906c25580c43c7c7843 ion3-20060326.ebuild 1982
+RMD160 1c859482c49b2def0ef08ab184cbfe281cac8af2 ion3-20060326.ebuild 1982
+SHA256 17736fa6d2e1d6583b5e4aab65fe7d2f04182a3706c190f4cd4aecd9a8468e9b ion3-20060326.ebuild 1982
+EBUILD ion3-20061223.ebuild 4722 RMD160 b09e68bf8a4b15360f1b4cf697c003accbaf0cf7 SHA1 a5406157dd74d3a3895fc1f380f21d5d1e9ea83f SHA256 e6ba303437dff3b9d47e3e63510f7340ba59bfea6f36d59da38270dc0dfb0036
+MD5 f76cea28a1b0a06fbb8fb409511804fc ion3-20061223.ebuild 4722
+RMD160 b09e68bf8a4b15360f1b4cf697c003accbaf0cf7 ion3-20061223.ebuild 4722
+SHA256 e6ba303437dff3b9d47e3e63510f7340ba59bfea6f36d59da38270dc0dfb0036 ion3-20061223.ebuild 4722
+EBUILD ion3-20070318-r2.ebuild 4459 RMD160 6e5a41d514af4043ff4470b8f50ffa72d1df259d SHA1 d660701623f3abb7f96ba3f1b8aa1bc249fef104 SHA256 a64bf98ed42972a1eea1ecc6c5be823a19ce4eb739e597e21c984ff5735a69cb
+MD5 772dc99239ea28b4193098e2c79f78e1 ion3-20070318-r2.ebuild 4459
+RMD160 6e5a41d514af4043ff4470b8f50ffa72d1df259d ion3-20070318-r2.ebuild 4459
+SHA256 a64bf98ed42972a1eea1ecc6c5be823a19ce4eb739e597e21c984ff5735a69cb ion3-20070318-r2.ebuild 4459
+EBUILD ion3-20070506-r1.ebuild 5213 RMD160 e875b068c509e7beef53433026a3f6e066c33738 SHA1 339fe6bc5ccee1bfdf4b3392987cc134e35088ba SHA256 b7b387296ff6a0c4a4cddb0eb5eb6ffb81b90ab143e148002a59cec917ceff9f
+MD5 ae60013d4557315112a038ff7f8753d8 ion3-20070506-r1.ebuild 5213
+RMD160 e875b068c509e7beef53433026a3f6e066c33738 ion3-20070506-r1.ebuild 5213
+SHA256 b7b387296ff6a0c4a4cddb0eb5eb6ffb81b90ab143e148002a59cec917ceff9f ion3-20070506-r1.ebuild 5213
+MISC ChangeLog 9375 RMD160 08bf33112717263c0b4e558bc50e6f9b236b37be SHA1 bde18842f3f475ce6a9b733c874c238c9f7718a2 SHA256 46973185aea6b11feede86351bd8d1f101e5ae44281d55a81007fa6549ee1161
+MD5 2c9769f447da0af131114862138619c3 ChangeLog 9375
+RMD160 08bf33112717263c0b4e558bc50e6f9b236b37be ChangeLog 9375
+SHA256 46973185aea6b11feede86351bd8d1f101e5ae44281d55a81007fa6549ee1161 ChangeLog 9375
+MISC metadata.xml 248 RMD160 7e7a4fe276728c6c4d6d0face7f0708dae9776d7 SHA1 b16dc683091d4a7cee7f9b8a6d6034a257df80b0 SHA256 3f6027d293a7bd953fd444ba8a1345ca6b9c00c28b35e8328386b9635d8eb71f
+MD5 c4aada614ade13541606f0901dffd61f metadata.xml 248
+RMD160 7e7a4fe276728c6c4d6d0face7f0708dae9776d7 metadata.xml 248
+SHA256 3f6027d293a7bd953fd444ba8a1345ca6b9c00c28b35e8328386b9635d8eb71f metadata.xml 248
+MD5 27ad3490f271ac787c7c59dcee131a73 files/digest-ion3-20060326 250
+RMD160 ee5cd1057ee8e32b8e30b05fb8e036082dbdf47d files/digest-ion3-20060326 250
+SHA256 43e4165551f43f347ae8bd8beb5a8fe24f29c39d4273107bd541c271c89eef6c files/digest-ion3-20060326 250
+MD5 d7afa3f01f843fd76f3e13e9dcac45b1 files/digest-ion3-20061223 1367
+RMD160 2639e26fb415e009a08fb27b822a62fcbc5e00f7 files/digest-ion3-20061223 1367
+SHA256 0a8be4455d11e16b8f4c20d6b7019d73d7e564f1a9c41134b512fd982dc675c4 files/digest-ion3-20061223 1367
+MD5 1f454e2ba54eec9e1f3fa03e307b61f6 files/digest-ion3-20070318-r2 1045
+RMD160 7087b16c049c3b8b4d150ab7eb8a461e67ae28e6 files/digest-ion3-20070318-r2 1045
+SHA256 b2181757e7912e1c67e67d7f3e4200e3cf9b8c4d2eea0ff964f2e92e6e3ea66d files/digest-ion3-20070318-r2 1045
+MD5 d738828fdba8dec081e12431ad73be86 files/digest-ion3-20070506-r1 1331
+RMD160 2bb97783b8262b0ec65a9dcd75d359dc3ef1a2e3 files/digest-ion3-20070506-r1 1331
+SHA256 f2b7c50a3bf973359aa6e899f99fede7ebdd3698b2e93918d9f5e1306ef6ae19 files/digest-ion3-20070506-r1 1331
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFGZWX1fNMcoUhJ7GwRApHgAJ48DE5NCY1YTiWNJ+4pJRlD5WBrAgCfSDvk
+ScaMMSRXIsoYXDuwP/Mt0OA=
+=U76L
+-----END PGP SIGNATURE-----
diff --git a/ion3/files/20061223/201_all_fix-paths.patch b/ion3/files/20061223/201_all_fix-paths.patch
new file mode 100644
index 0000000..7f8f228
--- /dev/null
+++ b/ion3/files/20061223/201_all_fix-paths.patch
@@ -0,0 +1,90 @@
+diff -Nur ion-3ds-20060519.orig/system.mk ion-3ds-20060519/system.mk
+--- ion-3ds-20060519.orig/system.mk 2006-05-18 18:06:53.000000000 -0500
++++ ion-3ds-20060519/system.mk 2006-05-18 23:51:23.000000000 -0500
+@@ -7,7 +7,7 @@
+ ## Installation paths
+ ##
+
+-PREFIX=/usr/local
++PREFIX=/usr
+
+ # Unless you are creating a package conforming to some OS's standards, you
+ # probably do not want to modify the following directories:
+@@ -15,7 +15,7 @@
+ # Main binaries
+ BINDIR=$(PREFIX)/bin
+ # Configuration .lua files
+-ETCDIR=$(PREFIX)/etc/ion3
++ETCDIR=/etc/X11/ion3
+ # Some .lua files and ion-* shell scripts
+ SHAREDIR=$(PREFIX)/share/ion3
+ # Manual pages
+@@ -27,11 +27,11 @@
+ # Nothing at the moment
+ LIBDIR=$(PREFIX)/lib
+ # Modules
+-MODULEDIR=$(LIBDIR)/ion3/mod
++MODULEDIR=$(LIBDIR)/ion3/mod
+ # Compiled Lua source code
+ LCDIR=$(LIBDIR)/ion3/lc
+ # ion-completefile (does not belong in SHAREDIR being a binary file)
+-EXTRABINDIR=$(LIBDIR)/ion3/bin
++EXTRABINDIR=$(LIBDIR)/ion3/bin
+ # For ion-completeman system-wide cache
+ VARDIR=/var/cache/ion3
+ # Message catalogs
+@@ -56,18 +56,18 @@
+
+ # If you have installed Lua 5.1 from the official tarball without changing
+ # paths, this should do it.
+-LUA_DIR=/usr/local
+-LUA_LIBS = -L$(LUA_DIR)/lib -llua
+-LUA_INCLUDES = -I$(LUA_DIR)/include
+-LUA=$(LUA_DIR)/bin/lua
+-LUAC=$(LUA_DIR)/bin/luac
++#LUA_DIR=/usr/local
++#LUA_LIBS = -L$(LUA_DIR)/lib -llua
++#LUA_INCLUDES = -I$(LUA_DIR)/include
++#LUA=$(LUA_DIR)/bin/lua
++#LUAC=$(LUA_DIR)/bin/luac
+
+ # If you are using the Debian packages, the following settings should be
+ # what you want.
+-#LUA_LIBS=`pkg-config --libs lua5.1`
+-#LUA_INCLUDES=`pkg-config --cflags lua5.1`
+-#LUA=`which lua5.1`
+-#LUAC=`which luac5.1`
++LUA_LIBS=`pkg-config --libs lua`
++LUA_INCLUDES=`pkg-config --cflags lua`
++LUA=`which lua`
++LUAC=`which luac`
+
+
+ ##
+@@ -107,7 +107,7 @@
+ # asprintf and vasprintf in the c library. (gnu libc has.)
+ # If HAS_SYSTEM_ASPRINTF is not defined, an implementation
+ # in sprintf_2.2/ is used.
+-#HAS_SYSTEM_ASPRINTF=1
++HAS_SYSTEM_ASPRINTF=1
+
+
+ # If you're on an archaic system (such as relatively recent *BSD releases)
+@@ -144,14 +144,14 @@
+
+ #C89_SOURCE=-ansi
+
+-#POSIX_SOURCE=-D_POSIX_SOURCE
++POSIX_SOURCE=-D_POSIX_SOURCE
+
+ # Most systems
+-#XOPEN_SOURCE=-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED
++XOPEN_SOURCE=-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED
+ # SunOS, (Irix)
+ #XOPEN_SOURCE=-D__EXTENSIONS__
+
+-#C99_SOURCE=-std=c99 -DCF_HAS_VA_COPY
++C99_SOURCE=-std=c99 -DCF_HAS_VA_COPY
+
+ # The -DCF_HAS_VA_COPY option should allow for some optimisations, and
+ # in some cases simply defining
diff --git a/ion3/files/20061223/202_all_fix-menus.patch b/ion3/files/20061223/202_all_fix-menus.patch
new file mode 100644
index 0000000..f218a33
--- /dev/null
+++ b/ion3/files/20061223/202_all_fix-menus.patch
@@ -0,0 +1,13 @@
+diff -Naur ../work/ion-3ds-20061223/etc/cfg_ioncore.lua ion-3ds-20061223/etc/cfg_ioncore.lua
+--- ../work/ion-3ds-20061223/etc/cfg_ioncore.lua 2006-12-23 17:59:43.000000000 +0300
++++ ion-3ds-20061223/etc/cfg_ioncore.lua 2006-12-31 15:35:59.000000000 +0300
+@@ -324,7 +324,8 @@
+ -- Main menu
+ defmenu("mainmenu", {
+ submenu("Programs", "appmenu"),
+- menuentry("Lock screen", "ioncore.exec_on(_, 'xlock')"),
++ menuentry("Lock screen",
++ "ioncore.exec_on(_, ioncore.lookup_script('ion-lock'))"),
+ menuentry("Help", "mod_query.query_man(_)"),
+ menuentry("About Ion", "mod_query.show_about_ion(_)"),
+ submenu("Styles", "stylemenu"),
diff --git a/ion3/files/20061223/205_all_ion-lock.patch b/ion3/files/20061223/205_all_ion-lock.patch
new file mode 100644
index 0000000..dda2016
--- /dev/null
+++ b/ion3/files/20061223/205_all_ion-lock.patch
@@ -0,0 +1,22 @@
+diff -Nur ion3-20050322.orig/utils/Makefile ion3-20050322/utils/Makefile
+--- ion3-20050322.orig/utils/Makefile 2005-03-22 14:31:06.000000000 +0000
++++ ion3-20050322/utils/Makefile 2005-03-22 16:29:37.197355881 +0000
+@@ -11,7 +11,7 @@
+ SUBDIRS=ion-completefile
+ INSTALL_SUBDIRS=$(SUBDIRS)
+
+-SHELLSCRIPTS = ion-runinxterm ion-completeman
++SHELLSCRIPTS = ion-runinxterm ion-completeman ion-lock
+
+ TARGETS = ion-completeman
+
+diff -Nur ion3-20050322.orig/utils/ion-lock ion3-20050322/utils/ion-lock
+--- ion3-20050322.orig/utils/ion-lock 1970-01-01 00:00:00.000000000 +0000
++++ ion3-20050322/utils/ion-lock 2005-03-22 16:29:19.550092305 +0000
+@@ -0,0 +1,6 @@
++#!/bin/sh
++if xscreensaver-command -version >/dev/null 2>&1; then
++ exec xscreensaver-command -lock
++else
++ exec xlock
++fi
diff --git a/ion3/files/20061223/207_all_bindings-manpage.patch b/ion3/files/20061223/207_all_bindings-manpage.patch
new file mode 100644
index 0000000..5fac548
--- /dev/null
+++ b/ion3/files/20061223/207_all_bindings-manpage.patch
@@ -0,0 +1,117 @@
+diff -Nur ion3-20061020.orig/man/ion3.cs.in ion3-20061020/man/ion3.cs.in
+--- ion3-20061020.orig/man/ion3.cs.in 2006-10-20 17:43:37.000000000 +0200
++++ ion3-20061020/man/ion3.cs.in 2006-10-23 20:42:12.000000000 +0200
+@@ -81,6 +81,10 @@
+
+ .SS Globální přiřazení
+
++BINDINGS:WFrame
++
++.SS Přiřazení pro přesun/změnu velikosti
++
+ BINDINGS:WScreen
+
+ .SS Přiřazení pro práci s nejvyššími rámy a obrazovkami a jejich potomky
+diff -Nur ion3-20061020.orig/man/ion3.fi.in ion3-20061020/man/ion3.fi.in
+--- ion3-20061020.orig/man/ion3.fi.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/ion3.fi.in 2006-10-23 20:42:12.000000000 +0200
+@@ -84,6 +84,10 @@
+
+ .SS Yleisesti saatavilla olevat sidonnat
+
++BINDINGS:WFrame
++
++.SS Siirto ja koonmuutostilan sidonnat
++
+ BINDINGS:WScreen
+
+ .SS Näytöillä tai ylimmän tason kehyksissä toimivat sidonnat
+diff -Nur ion3-20061020.orig/man/ion3.in ion3-20061020/man/ion3.in
+--- ion3-20061020.orig/man/ion3.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/ion3.in 2006-10-23 20:42:12.000000000 +0200
+@@ -82,6 +82,10 @@
+
+ .SS Globally available bindings
+
++BINDINGS:WFrame
++
++.SS Move/resize mode bindings
++
+ BINDINGS:WScreen
+
+ .SS Bindings operating on top-level frames and screens and their children
+diff -Nur ion3-20061020.orig/man/pwm3.cs.in ion3-20061020/man/pwm3.cs.in
+--- ion3-20061020.orig/man/pwm3.cs.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/pwm3.cs.in 2006-10-23 20:42:12.000000000 +0200
+@@ -56,6 +56,10 @@
+
+ .SS Globální přiřazení
+
++BINDINGS:WFrame
++
++.SS Přiřazení pro přesun/změnu velikosti
++
+ BINDINGS:WScreen
+
+ .".SS Přiřazení pro práci s rámy, obrazovkami a jejich potomky
+@@ -64,10 +68,6 @@
+
+ .SS Přiřazení pro práci s rámy a jejich potomky
+
+-BINDINGS:WFrame
+-
+-.SS Přiřazení pro přesun/změnu velikosti
+-
+ BINDINGS:WMoveresMode
+
+ .SS Přiřazení pro plovoucí pracovní plochy [mod_floatws]
+diff -Nur ion3-20061020.orig/man/pwm3.fi.in ion3-20061020/man/pwm3.fi.in
+--- ion3-20061020.orig/man/pwm3.fi.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/pwm3.fi.in 2006-10-23 20:42:12.000000000 +0200
+@@ -57,6 +57,10 @@
+
+ .SS Yleisesti saatavilla olevat sidonnat
+
++BINDINGS:WFrame
++
++.SS Siirto ja koonmuutostilan sidonnat
++
+ BINDINGS:WScreen
+
+ .\".SS Kehyksiä ja näyttöjä, sekä niiden lapsia käsittelevät sidonnat
+@@ -65,10 +69,6 @@
+
+ .SS Kehyksiä, sekä niiden lapsia käsittelevät sidonnat
+
+-BINDINGS:WFrame
+-
+-.SS Siirto ja koonmuutostilan sidonnat
+-
+ BINDINGS:WMoveresMode
+
+ .SS Kelluvien työpöytien ja kehyksien sidonnat [mod_floatws]
+diff -Nur ion3-20061020.orig/man/pwm3.in ion3-20061020/man/pwm3.in
+--- ion3-20061020.orig/man/pwm3.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/pwm3.in 2006-10-23 20:42:12.000000000 +0200
+@@ -57,6 +57,10 @@
+
+ .SS Globally available bindings
+
++BINDINGS:WFrame
++
++.SS Move/resize mode bindings
++
+ BINDINGS:WScreen
+
+ .".SS Bindings operating on both frames and screens and their children
+@@ -65,10 +69,6 @@
+
+ .SS Bindings operating on frames and their children
+
+-BINDINGS:WFrame
+-
+-.SS Move/resize mode bindings
+-
+ BINDINGS:WMoveresMode
+
+ .SS Bindings for floating workspaces and frames [mod_floatws]
diff --git a/ion3/files/20070203/201_all_fix-paths.patch b/ion3/files/20070203/201_all_fix-paths.patch
new file mode 100644
index 0000000..7f8f228
--- /dev/null
+++ b/ion3/files/20070203/201_all_fix-paths.patch
@@ -0,0 +1,90 @@
+diff -Nur ion-3ds-20060519.orig/system.mk ion-3ds-20060519/system.mk
+--- ion-3ds-20060519.orig/system.mk 2006-05-18 18:06:53.000000000 -0500
++++ ion-3ds-20060519/system.mk 2006-05-18 23:51:23.000000000 -0500
+@@ -7,7 +7,7 @@
+ ## Installation paths
+ ##
+
+-PREFIX=/usr/local
++PREFIX=/usr
+
+ # Unless you are creating a package conforming to some OS's standards, you
+ # probably do not want to modify the following directories:
+@@ -15,7 +15,7 @@
+ # Main binaries
+ BINDIR=$(PREFIX)/bin
+ # Configuration .lua files
+-ETCDIR=$(PREFIX)/etc/ion3
++ETCDIR=/etc/X11/ion3
+ # Some .lua files and ion-* shell scripts
+ SHAREDIR=$(PREFIX)/share/ion3
+ # Manual pages
+@@ -27,11 +27,11 @@
+ # Nothing at the moment
+ LIBDIR=$(PREFIX)/lib
+ # Modules
+-MODULEDIR=$(LIBDIR)/ion3/mod
++MODULEDIR=$(LIBDIR)/ion3/mod
+ # Compiled Lua source code
+ LCDIR=$(LIBDIR)/ion3/lc
+ # ion-completefile (does not belong in SHAREDIR being a binary file)
+-EXTRABINDIR=$(LIBDIR)/ion3/bin
++EXTRABINDIR=$(LIBDIR)/ion3/bin
+ # For ion-completeman system-wide cache
+ VARDIR=/var/cache/ion3
+ # Message catalogs
+@@ -56,18 +56,18 @@
+
+ # If you have installed Lua 5.1 from the official tarball without changing
+ # paths, this should do it.
+-LUA_DIR=/usr/local
+-LUA_LIBS = -L$(LUA_DIR)/lib -llua
+-LUA_INCLUDES = -I$(LUA_DIR)/include
+-LUA=$(LUA_DIR)/bin/lua
+-LUAC=$(LUA_DIR)/bin/luac
++#LUA_DIR=/usr/local
++#LUA_LIBS = -L$(LUA_DIR)/lib -llua
++#LUA_INCLUDES = -I$(LUA_DIR)/include
++#LUA=$(LUA_DIR)/bin/lua
++#LUAC=$(LUA_DIR)/bin/luac
+
+ # If you are using the Debian packages, the following settings should be
+ # what you want.
+-#LUA_LIBS=`pkg-config --libs lua5.1`
+-#LUA_INCLUDES=`pkg-config --cflags lua5.1`
+-#LUA=`which lua5.1`
+-#LUAC=`which luac5.1`
++LUA_LIBS=`pkg-config --libs lua`
++LUA_INCLUDES=`pkg-config --cflags lua`
++LUA=`which lua`
++LUAC=`which luac`
+
+
+ ##
+@@ -107,7 +107,7 @@
+ # asprintf and vasprintf in the c library. (gnu libc has.)
+ # If HAS_SYSTEM_ASPRINTF is not defined, an implementation
+ # in sprintf_2.2/ is used.
+-#HAS_SYSTEM_ASPRINTF=1
++HAS_SYSTEM_ASPRINTF=1
+
+
+ # If you're on an archaic system (such as relatively recent *BSD releases)
+@@ -144,14 +144,14 @@
+
+ #C89_SOURCE=-ansi
+
+-#POSIX_SOURCE=-D_POSIX_SOURCE
++POSIX_SOURCE=-D_POSIX_SOURCE
+
+ # Most systems
+-#XOPEN_SOURCE=-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED
++XOPEN_SOURCE=-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED
+ # SunOS, (Irix)
+ #XOPEN_SOURCE=-D__EXTENSIONS__
+
+-#C99_SOURCE=-std=c99 -DCF_HAS_VA_COPY
++C99_SOURCE=-std=c99 -DCF_HAS_VA_COPY
+
+ # The -DCF_HAS_VA_COPY option should allow for some optimisations, and
+ # in some cases simply defining
diff --git a/ion3/files/20070203/202_all_fix-menus.patch b/ion3/files/20070203/202_all_fix-menus.patch
new file mode 100644
index 0000000..f218a33
--- /dev/null
+++ b/ion3/files/20070203/202_all_fix-menus.patch
@@ -0,0 +1,13 @@
+diff -Naur ../work/ion-3ds-20061223/etc/cfg_ioncore.lua ion-3ds-20061223/etc/cfg_ioncore.lua
+--- ../work/ion-3ds-20061223/etc/cfg_ioncore.lua 2006-12-23 17:59:43.000000000 +0300
++++ ion-3ds-20061223/etc/cfg_ioncore.lua 2006-12-31 15:35:59.000000000 +0300
+@@ -324,7 +324,8 @@
+ -- Main menu
+ defmenu("mainmenu", {
+ submenu("Programs", "appmenu"),
+- menuentry("Lock screen", "ioncore.exec_on(_, 'xlock')"),
++ menuentry("Lock screen",
++ "ioncore.exec_on(_, ioncore.lookup_script('ion-lock'))"),
+ menuentry("Help", "mod_query.query_man(_)"),
+ menuentry("About Ion", "mod_query.show_about_ion(_)"),
+ submenu("Styles", "stylemenu"),
diff --git a/ion3/files/20070203/205_all_ion-lock.patch b/ion3/files/20070203/205_all_ion-lock.patch
new file mode 100644
index 0000000..dda2016
--- /dev/null
+++ b/ion3/files/20070203/205_all_ion-lock.patch
@@ -0,0 +1,22 @@
+diff -Nur ion3-20050322.orig/utils/Makefile ion3-20050322/utils/Makefile
+--- ion3-20050322.orig/utils/Makefile 2005-03-22 14:31:06.000000000 +0000
++++ ion3-20050322/utils/Makefile 2005-03-22 16:29:37.197355881 +0000
+@@ -11,7 +11,7 @@
+ SUBDIRS=ion-completefile
+ INSTALL_SUBDIRS=$(SUBDIRS)
+
+-SHELLSCRIPTS = ion-runinxterm ion-completeman
++SHELLSCRIPTS = ion-runinxterm ion-completeman ion-lock
+
+ TARGETS = ion-completeman
+
+diff -Nur ion3-20050322.orig/utils/ion-lock ion3-20050322/utils/ion-lock
+--- ion3-20050322.orig/utils/ion-lock 1970-01-01 00:00:00.000000000 +0000
++++ ion3-20050322/utils/ion-lock 2005-03-22 16:29:19.550092305 +0000
+@@ -0,0 +1,6 @@
++#!/bin/sh
++if xscreensaver-command -version >/dev/null 2>&1; then
++ exec xscreensaver-command -lock
++else
++ exec xlock
++fi
diff --git a/ion3/files/20070203/207_all_bindings-manpage.patch b/ion3/files/20070203/207_all_bindings-manpage.patch
new file mode 100644
index 0000000..5fac548
--- /dev/null
+++ b/ion3/files/20070203/207_all_bindings-manpage.patch
@@ -0,0 +1,117 @@
+diff -Nur ion3-20061020.orig/man/ion3.cs.in ion3-20061020/man/ion3.cs.in
+--- ion3-20061020.orig/man/ion3.cs.in 2006-10-20 17:43:37.000000000 +0200
++++ ion3-20061020/man/ion3.cs.in 2006-10-23 20:42:12.000000000 +0200
+@@ -81,6 +81,10 @@
+
+ .SS Globální přiřazení
+
++BINDINGS:WFrame
++
++.SS Přiřazení pro přesun/změnu velikosti
++
+ BINDINGS:WScreen
+
+ .SS Přiřazení pro práci s nejvyššími rámy a obrazovkami a jejich potomky
+diff -Nur ion3-20061020.orig/man/ion3.fi.in ion3-20061020/man/ion3.fi.in
+--- ion3-20061020.orig/man/ion3.fi.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/ion3.fi.in 2006-10-23 20:42:12.000000000 +0200
+@@ -84,6 +84,10 @@
+
+ .SS Yleisesti saatavilla olevat sidonnat
+
++BINDINGS:WFrame
++
++.SS Siirto ja koonmuutostilan sidonnat
++
+ BINDINGS:WScreen
+
+ .SS Näytöillä tai ylimmän tason kehyksissä toimivat sidonnat
+diff -Nur ion3-20061020.orig/man/ion3.in ion3-20061020/man/ion3.in
+--- ion3-20061020.orig/man/ion3.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/ion3.in 2006-10-23 20:42:12.000000000 +0200
+@@ -82,6 +82,10 @@
+
+ .SS Globally available bindings
+
++BINDINGS:WFrame
++
++.SS Move/resize mode bindings
++
+ BINDINGS:WScreen
+
+ .SS Bindings operating on top-level frames and screens and their children
+diff -Nur ion3-20061020.orig/man/pwm3.cs.in ion3-20061020/man/pwm3.cs.in
+--- ion3-20061020.orig/man/pwm3.cs.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/pwm3.cs.in 2006-10-23 20:42:12.000000000 +0200
+@@ -56,6 +56,10 @@
+
+ .SS Globální přiřazení
+
++BINDINGS:WFrame
++
++.SS Přiřazení pro přesun/změnu velikosti
++
+ BINDINGS:WScreen
+
+ .".SS Přiřazení pro práci s rámy, obrazovkami a jejich potomky
+@@ -64,10 +68,6 @@
+
+ .SS Přiřazení pro práci s rámy a jejich potomky
+
+-BINDINGS:WFrame
+-
+-.SS Přiřazení pro přesun/změnu velikosti
+-
+ BINDINGS:WMoveresMode
+
+ .SS Přiřazení pro plovoucí pracovní plochy [mod_floatws]
+diff -Nur ion3-20061020.orig/man/pwm3.fi.in ion3-20061020/man/pwm3.fi.in
+--- ion3-20061020.orig/man/pwm3.fi.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/pwm3.fi.in 2006-10-23 20:42:12.000000000 +0200
+@@ -57,6 +57,10 @@
+
+ .SS Yleisesti saatavilla olevat sidonnat
+
++BINDINGS:WFrame
++
++.SS Siirto ja koonmuutostilan sidonnat
++
+ BINDINGS:WScreen
+
+ .\".SS Kehyksiä ja näyttöjä, sekä niiden lapsia käsittelevät sidonnat
+@@ -65,10 +69,6 @@
+
+ .SS Kehyksiä, sekä niiden lapsia käsittelevät sidonnat
+
+-BINDINGS:WFrame
+-
+-.SS Siirto ja koonmuutostilan sidonnat
+-
+ BINDINGS:WMoveresMode
+
+ .SS Kelluvien työpöytien ja kehyksien sidonnat [mod_floatws]
+diff -Nur ion3-20061020.orig/man/pwm3.in ion3-20061020/man/pwm3.in
+--- ion3-20061020.orig/man/pwm3.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/pwm3.in 2006-10-23 20:42:12.000000000 +0200
+@@ -57,6 +57,10 @@
+
+ .SS Globally available bindings
+
++BINDINGS:WFrame
++
++.SS Move/resize mode bindings
++
+ BINDINGS:WScreen
+
+ .".SS Bindings operating on both frames and screens and their children
+@@ -65,10 +69,6 @@
+
+ .SS Bindings operating on frames and their children
+
+-BINDINGS:WFrame
+-
+-.SS Move/resize mode bindings
+-
+ BINDINGS:WMoveresMode
+
+ .SS Bindings for floating workspaces and frames [mod_floatws]
diff --git a/ion3/files/20070318/201_all_fix-paths.patch b/ion3/files/20070318/201_all_fix-paths.patch
new file mode 100644
index 0000000..7f8f228
--- /dev/null
+++ b/ion3/files/20070318/201_all_fix-paths.patch
@@ -0,0 +1,90 @@
+diff -Nur ion-3ds-20060519.orig/system.mk ion-3ds-20060519/system.mk
+--- ion-3ds-20060519.orig/system.mk 2006-05-18 18:06:53.000000000 -0500
++++ ion-3ds-20060519/system.mk 2006-05-18 23:51:23.000000000 -0500
+@@ -7,7 +7,7 @@
+ ## Installation paths
+ ##
+
+-PREFIX=/usr/local
++PREFIX=/usr
+
+ # Unless you are creating a package conforming to some OS's standards, you
+ # probably do not want to modify the following directories:
+@@ -15,7 +15,7 @@
+ # Main binaries
+ BINDIR=$(PREFIX)/bin
+ # Configuration .lua files
+-ETCDIR=$(PREFIX)/etc/ion3
++ETCDIR=/etc/X11/ion3
+ # Some .lua files and ion-* shell scripts
+ SHAREDIR=$(PREFIX)/share/ion3
+ # Manual pages
+@@ -27,11 +27,11 @@
+ # Nothing at the moment
+ LIBDIR=$(PREFIX)/lib
+ # Modules
+-MODULEDIR=$(LIBDIR)/ion3/mod
++MODULEDIR=$(LIBDIR)/ion3/mod
+ # Compiled Lua source code
+ LCDIR=$(LIBDIR)/ion3/lc
+ # ion-completefile (does not belong in SHAREDIR being a binary file)
+-EXTRABINDIR=$(LIBDIR)/ion3/bin
++EXTRABINDIR=$(LIBDIR)/ion3/bin
+ # For ion-completeman system-wide cache
+ VARDIR=/var/cache/ion3
+ # Message catalogs
+@@ -56,18 +56,18 @@
+
+ # If you have installed Lua 5.1 from the official tarball without changing
+ # paths, this should do it.
+-LUA_DIR=/usr/local
+-LUA_LIBS = -L$(LUA_DIR)/lib -llua
+-LUA_INCLUDES = -I$(LUA_DIR)/include
+-LUA=$(LUA_DIR)/bin/lua
+-LUAC=$(LUA_DIR)/bin/luac
++#LUA_DIR=/usr/local
++#LUA_LIBS = -L$(LUA_DIR)/lib -llua
++#LUA_INCLUDES = -I$(LUA_DIR)/include
++#LUA=$(LUA_DIR)/bin/lua
++#LUAC=$(LUA_DIR)/bin/luac
+
+ # If you are using the Debian packages, the following settings should be
+ # what you want.
+-#LUA_LIBS=`pkg-config --libs lua5.1`
+-#LUA_INCLUDES=`pkg-config --cflags lua5.1`
+-#LUA=`which lua5.1`
+-#LUAC=`which luac5.1`
++LUA_LIBS=`pkg-config --libs lua`
++LUA_INCLUDES=`pkg-config --cflags lua`
++LUA=`which lua`
++LUAC=`which luac`
+
+
+ ##
+@@ -107,7 +107,7 @@
+ # asprintf and vasprintf in the c library. (gnu libc has.)
+ # If HAS_SYSTEM_ASPRINTF is not defined, an implementation
+ # in sprintf_2.2/ is used.
+-#HAS_SYSTEM_ASPRINTF=1
++HAS_SYSTEM_ASPRINTF=1
+
+
+ # If you're on an archaic system (such as relatively recent *BSD releases)
+@@ -144,14 +144,14 @@
+
+ #C89_SOURCE=-ansi
+
+-#POSIX_SOURCE=-D_POSIX_SOURCE
++POSIX_SOURCE=-D_POSIX_SOURCE
+
+ # Most systems
+-#XOPEN_SOURCE=-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED
++XOPEN_SOURCE=-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED
+ # SunOS, (Irix)
+ #XOPEN_SOURCE=-D__EXTENSIONS__
+
+-#C99_SOURCE=-std=c99 -DCF_HAS_VA_COPY
++C99_SOURCE=-std=c99 -DCF_HAS_VA_COPY
+
+ # The -DCF_HAS_VA_COPY option should allow for some optimisations, and
+ # in some cases simply defining
diff --git a/ion3/files/20070318/202_all_fix-menus.patch b/ion3/files/20070318/202_all_fix-menus.patch
new file mode 100644
index 0000000..c2d77c8
--- /dev/null
+++ b/ion3/files/20070318/202_all_fix-menus.patch
@@ -0,0 +1,13 @@
+diff -Naur ../work/ion-3ds-20061223/etc/cfg_ioncore.lua ion-3ds-20061223/etc/cfg_ioncore.lua
+--- ../work/ion-3ds-20061223/etc/cfg_ioncore.lua 2006-12-23 17:59:43.000000000 +0300
++++ ion-3ds-20061223/etc/cfg_ioncore.lua 2006-12-31 15:35:59.000000000 +0300
+@@ -331,7 +331,8 @@
+ defmenu("mainmenu", {
+ menuentry("Run...", "mod_query.query_exec(_)"),
+ menuentry("Terminal", "ioncore.exec_on(_, XTERM or 'xterm')"),
+- menuentry("Lock screen", "ioncore.exec_on(_, 'xlock')"),
++ menuentry("Lock screen",
++ "ioncore.exec_on(_, ioncore.lookup_script('ion-lock'))"),
+ menuentry("Help", "mod_query.query_man(_)"),
+ menuentry("About Ion", "mod_query.show_about_ion(_)"),
+ submenu("Styles", "stylemenu"),
diff --git a/ion3/files/20070318/205_all_ion-lock.patch b/ion3/files/20070318/205_all_ion-lock.patch
new file mode 100644
index 0000000..dda2016
--- /dev/null
+++ b/ion3/files/20070318/205_all_ion-lock.patch
@@ -0,0 +1,22 @@
+diff -Nur ion3-20050322.orig/utils/Makefile ion3-20050322/utils/Makefile
+--- ion3-20050322.orig/utils/Makefile 2005-03-22 14:31:06.000000000 +0000
++++ ion3-20050322/utils/Makefile 2005-03-22 16:29:37.197355881 +0000
+@@ -11,7 +11,7 @@
+ SUBDIRS=ion-completefile
+ INSTALL_SUBDIRS=$(SUBDIRS)
+
+-SHELLSCRIPTS = ion-runinxterm ion-completeman
++SHELLSCRIPTS = ion-runinxterm ion-completeman ion-lock
+
+ TARGETS = ion-completeman
+
+diff -Nur ion3-20050322.orig/utils/ion-lock ion3-20050322/utils/ion-lock
+--- ion3-20050322.orig/utils/ion-lock 1970-01-01 00:00:00.000000000 +0000
++++ ion3-20050322/utils/ion-lock 2005-03-22 16:29:19.550092305 +0000
+@@ -0,0 +1,6 @@
++#!/bin/sh
++if xscreensaver-command -version >/dev/null 2>&1; then
++ exec xscreensaver-command -lock
++else
++ exec xlock
++fi
diff --git a/ion3/files/20070318/207_all_bindings-manpage.patch b/ion3/files/20070318/207_all_bindings-manpage.patch
new file mode 100644
index 0000000..5fac548
--- /dev/null
+++ b/ion3/files/20070318/207_all_bindings-manpage.patch
@@ -0,0 +1,117 @@
+diff -Nur ion3-20061020.orig/man/ion3.cs.in ion3-20061020/man/ion3.cs.in
+--- ion3-20061020.orig/man/ion3.cs.in 2006-10-20 17:43:37.000000000 +0200
++++ ion3-20061020/man/ion3.cs.in 2006-10-23 20:42:12.000000000 +0200
+@@ -81,6 +81,10 @@
+
+ .SS Globální přiřazení
+
++BINDINGS:WFrame
++
++.SS Přiřazení pro přesun/změnu velikosti
++
+ BINDINGS:WScreen
+
+ .SS Přiřazení pro práci s nejvyššími rámy a obrazovkami a jejich potomky
+diff -Nur ion3-20061020.orig/man/ion3.fi.in ion3-20061020/man/ion3.fi.in
+--- ion3-20061020.orig/man/ion3.fi.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/ion3.fi.in 2006-10-23 20:42:12.000000000 +0200
+@@ -84,6 +84,10 @@
+
+ .SS Yleisesti saatavilla olevat sidonnat
+
++BINDINGS:WFrame
++
++.SS Siirto ja koonmuutostilan sidonnat
++
+ BINDINGS:WScreen
+
+ .SS Näytöillä tai ylimmän tason kehyksissä toimivat sidonnat
+diff -Nur ion3-20061020.orig/man/ion3.in ion3-20061020/man/ion3.in
+--- ion3-20061020.orig/man/ion3.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/ion3.in 2006-10-23 20:42:12.000000000 +0200
+@@ -82,6 +82,10 @@
+
+ .SS Globally available bindings
+
++BINDINGS:WFrame
++
++.SS Move/resize mode bindings
++
+ BINDINGS:WScreen
+
+ .SS Bindings operating on top-level frames and screens and their children
+diff -Nur ion3-20061020.orig/man/pwm3.cs.in ion3-20061020/man/pwm3.cs.in
+--- ion3-20061020.orig/man/pwm3.cs.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/pwm3.cs.in 2006-10-23 20:42:12.000000000 +0200
+@@ -56,6 +56,10 @@
+
+ .SS Globální přiřazení
+
++BINDINGS:WFrame
++
++.SS Přiřazení pro přesun/změnu velikosti
++
+ BINDINGS:WScreen
+
+ .".SS Přiřazení pro práci s rámy, obrazovkami a jejich potomky
+@@ -64,10 +68,6 @@
+
+ .SS Přiřazení pro práci s rámy a jejich potomky
+
+-BINDINGS:WFrame
+-
+-.SS Přiřazení pro přesun/změnu velikosti
+-
+ BINDINGS:WMoveresMode
+
+ .SS Přiřazení pro plovoucí pracovní plochy [mod_floatws]
+diff -Nur ion3-20061020.orig/man/pwm3.fi.in ion3-20061020/man/pwm3.fi.in
+--- ion3-20061020.orig/man/pwm3.fi.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/pwm3.fi.in 2006-10-23 20:42:12.000000000 +0200
+@@ -57,6 +57,10 @@
+
+ .SS Yleisesti saatavilla olevat sidonnat
+
++BINDINGS:WFrame
++
++.SS Siirto ja koonmuutostilan sidonnat
++
+ BINDINGS:WScreen
+
+ .\".SS Kehyksiä ja näyttöjä, sekä niiden lapsia käsittelevät sidonnat
+@@ -65,10 +69,6 @@
+
+ .SS Kehyksiä, sekä niiden lapsia käsittelevät sidonnat
+
+-BINDINGS:WFrame
+-
+-.SS Siirto ja koonmuutostilan sidonnat
+-
+ BINDINGS:WMoveresMode
+
+ .SS Kelluvien työpöytien ja kehyksien sidonnat [mod_floatws]
+diff -Nur ion3-20061020.orig/man/pwm3.in ion3-20061020/man/pwm3.in
+--- ion3-20061020.orig/man/pwm3.in 2006-10-20 17:43:36.000000000 +0200
++++ ion3-20061020/man/pwm3.in 2006-10-23 20:42:12.000000000 +0200
+@@ -57,6 +57,10 @@
+
+ .SS Globally available bindings
+
++BINDINGS:WFrame
++
++.SS Move/resize mode bindings
++
+ BINDINGS:WScreen
+
+ .".SS Bindings operating on both frames and screens and their children
+@@ -65,10 +69,6 @@
+
+ .SS Bindings operating on frames and their children
+
+-BINDINGS:WFrame
+-
+-.SS Move/resize mode bindings
+-
+ BINDINGS:WMoveresMode
+
+ .SS Bindings for floating workspaces and frames [mod_floatws]
diff --git a/ion3/files/20070318/208_all_as-needed.patch b/ion3/files/20070318/208_all_as-needed.patch
new file mode 100644
index 0000000..662a078
--- /dev/null
+++ b/ion3/files/20070318/208_all_as-needed.patch
@@ -0,0 +1,12 @@
+diff -uNr ion-3ds-20070318.orig/de/Makefile ion-3ds-20070318/de/Makefile
+--- ion-3ds-20070318.orig/de/Makefile 2007-03-18 21:31:37.000000000 +0100
++++ ion-3ds-20070318/de/Makefile 2007-04-30 17:30:23.000000000 +0200
+@@ -17,6 +17,8 @@
+
+ MAKE_EXPORTS=de
+
++LDFLAGS+=-lXext
++
+ ######################################
+
+ include $(TOPDIR)/build/rules.mk
diff --git a/ion3/files/20070506/200_all_fix_includes.patch b/ion3/files/20070506/200_all_fix_includes.patch
new file mode 100644
index 0000000..19f7edc
--- /dev/null
+++ b/ion3/files/20070506/200_all_fix_includes.patch
@@ -0,0 +1,22 @@
+diff -uNr ion-3rc-20070506.orig/ioncore/ioncore.c ion-3rc-20070506/ioncore/ioncore.c
+--- ion-3rc-20070506.orig/ioncore/ioncore.c 2007-05-12 22:04:33.000000000 +0200
++++ ion-3rc-20070506/ioncore/ioncore.c 2007-05-12 22:23:30.000000000 +0200
+@@ -11,6 +11,7 @@
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <string.h>
++#include <strings.h>
+ #include <errno.h>
+ #include <sys/types.h>
+ #include <ctype.h>
+diff -uNr ion-3rc-20070506.orig/utils/ion-completefile/ion-completefile.c ion-3rc-20070506/utils/ion-completefile/ion-completefile.c
+--- ion-3rc-20070506.orig/utils/ion-completefile/ion-completefile.c 2007-05-12 22:04:33.000000000 +0200
++++ ion-3rc-20070506/utils/ion-completefile/ion-completefile.c 2007-05-12 22:05:13.000000000 +0200
+@@ -54,6 +54,7 @@
+
+ #include <sys/param.h>
+ #include <sys/types.h>
++#include <stdio.h>
+ #include <stdlib.h>
+ #include <dirent.h>
+ #include <string.h>
diff --git a/ion3/files/20070506/201_all_fix-paths.patch b/ion3/files/20070506/201_all_fix-paths.patch
new file mode 100644
index 0000000..7f8f228
--- /dev/null
+++ b/ion3/files/20070506/201_all_fix-paths.patch
@@ -0,0 +1,90 @@
+diff -Nur ion-3ds-20060519.orig/system.mk ion-3ds-20060519/system.mk
+--- ion-3ds-20060519.orig/system.mk 2006-05-18 18:06:53.000000000 -0500
++++ ion-3ds-20060519/system.mk 2006-05-18 23:51:23.000000000 -0500
+@@ -7,7 +7,7 @@
+ ## Installation paths
+ ##
+
+-PREFIX=/usr/local
++PREFIX=/usr
+
+ # Unless you are creating a package conforming to some OS's standards, you
+ # probably do not want to modify the following directories:
+@@ -15,7 +15,7 @@
+ # Main binaries
+ BINDIR=$(PREFIX)/bin
+ # Configuration .lua files
+-ETCDIR=$(PREFIX)/etc/ion3
++ETCDIR=/etc/X11/ion3
+ # Some .lua files and ion-* shell scripts
+ SHAREDIR=$(PREFIX)/share/ion3
+ # Manual pages
+@@ -27,11 +27,11 @@
+ # Nothing at the moment
+ LIBDIR=$(PREFIX)/lib
+ # Modules
+-MODULEDIR=$(LIBDIR)/ion3/mod
++MODULEDIR=$(LIBDIR)/ion3/mod
+ # Compiled Lua source code
+ LCDIR=$(LIBDIR)/ion3/lc
+ # ion-completefile (does not belong in SHAREDIR being a binary file)
+-EXTRABINDIR=$(LIBDIR)/ion3/bin
++EXTRABINDIR=$(LIBDIR)/ion3/bin
+ # For ion-completeman system-wide cache
+ VARDIR=/var/cache/ion3
+ # Message catalogs
+@@ -56,18 +56,18 @@
+
+ # If you have installed Lua 5.1 from the official tarball without changing
+ # paths, this should do it.
+-LUA_DIR=/usr/local
+-LUA_LIBS = -L$(LUA_DIR)/lib -llua
+-LUA_INCLUDES = -I$(LUA_DIR)/include
+-LUA=$(LUA_DIR)/bin/lua
+-LUAC=$(LUA_DIR)/bin/luac
++#LUA_DIR=/usr/local
++#LUA_LIBS = -L$(LUA_DIR)/lib -llua
++#LUA_INCLUDES = -I$(LUA_DIR)/include
++#LUA=$(LUA_DIR)/bin/lua
++#LUAC=$(LUA_DIR)/bin/luac
+
+ # If you are using the Debian packages, the following settings should be
+ # what you want.
+-#LUA_LIBS=`pkg-config --libs lua5.1`
+-#LUA_INCLUDES=`pkg-config --cflags lua5.1`
+-#LUA=`which lua5.1`
+-#LUAC=`which luac5.1`
++LUA_LIBS=`pkg-config --libs lua`
++LUA_INCLUDES=`pkg-config --cflags lua`
++LUA=`which lua`
++LUAC=`which luac`
+
+
+ ##
+@@ -107,7 +107,7 @@
+ # asprintf and vasprintf in the c library. (gnu libc has.)
+ # If HAS_SYSTEM_ASPRINTF is not defined, an implementation
+ # in sprintf_2.2/ is used.
+-#HAS_SYSTEM_ASPRINTF=1
++HAS_SYSTEM_ASPRINTF=1
+
+
+ # If you're on an archaic system (such as relatively recent *BSD releases)
+@@ -144,14 +144,14 @@
+
+ #C89_SOURCE=-ansi
+
+-#POSIX_SOURCE=-D_POSIX_SOURCE
++POSIX_SOURCE=-D_POSIX_SOURCE
+
+ # Most systems
+-#XOPEN_SOURCE=-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED
++XOPEN_SOURCE=-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED
+ # SunOS, (Irix)
+ #XOPEN_SOURCE=-D__EXTENSIONS__
+
+-#C99_SOURCE=-std=c99 -DCF_HAS_VA_COPY
++C99_SOURCE=-std=c99 -DCF_HAS_VA_COPY
+
+ # The -DCF_HAS_VA_COPY option should allow for some optimisations, and
+ # in some cases simply defining
diff --git a/ion3/files/20070506/202_all_fix-menus.patch b/ion3/files/20070506/202_all_fix-menus.patch
new file mode 100644
index 0000000..c2d77c8
--- /dev/null
+++ b/ion3/files/20070506/202_all_fix-menus.patch
@@ -0,0 +1,13 @@
+diff -Naur ../work/ion-3ds-20061223/etc/cfg_ioncore.lua ion-3ds-20061223/etc/cfg_ioncore.lua
+--- ../work/ion-3ds-20061223/etc/cfg_ioncore.lua 2006-12-23 17:59:43.000000000 +0300
++++ ion-3ds-20061223/etc/cfg_ioncore.lua 2006-12-31 15:35:59.000000000 +0300
+@@ -331,7 +331,8 @@
+ defmenu("mainmenu", {
+ menuentry("Run...", "mod_query.query_exec(_)"),
+ menuentry("Terminal", "ioncore.exec_on(_, XTERM or 'xterm')"),
+- menuentry("Lock screen", "ioncore.exec_on(_, 'xlock')"),
++ menuentry("Lock screen",
++ "ioncore.exec_on(_, ioncore.lookup_script('ion-lock'))"),
+ menuentry("Help", "mod_query.query_man(_)"),
+ menuentry("About Ion", "mod_query.show_about_ion(_)"),
+ submenu("Styles", "stylemenu"),
diff --git a/ion3/files/20070506/205_all_ion-lock.patch b/ion3/files/20070506/205_all_ion-lock.patch
new file mode 100644
index 0000000..dda2016
--- /dev/null
+++ b/ion3/files/20070506/205_all_ion-lock.patch
@@ -0,0 +1,22 @@
+diff -Nur ion3-20050322.orig/utils/Makefile ion3-20050322/utils/Makefile
+--- ion3-20050322.orig/utils/Makefile 2005-03-22 14:31:06.000000000 +0000
++++ ion3-20050322/utils/Makefile 2005-03-22 16:29:37.197355881 +0000
+@@ -11,7 +11,7 @@
+ SUBDIRS=ion-completefile
+ INSTALL_SUBDIRS=$(SUBDIRS)
+
+-SHELLSCRIPTS = ion-runinxterm ion-completeman
++SHELLSCRIPTS = ion-runinxterm ion-completeman ion-lock
+
+ TARGETS = ion-completeman
+
+diff -Nur ion3-20050322.orig/utils/ion-lock ion3-20050322/utils/ion-lock
+--- ion3-20050322.orig/utils/ion-lock 1970-01-01 00:00:00.000000000 +0000
++++ ion3-20050322/utils/ion-lock 2005-03-22 16:29:19.550092305 +0000
+@@ -0,0 +1,6 @@
++#!/bin/sh
++if xscreensaver-command -version >/dev/null 2>&1; then
++ exec xscreensaver-command -lock
++else
++ exec xlock
++fi
diff --git a/ion3/files/20070506/208_all_as-needed.patch b/ion3/files/20070506/208_all_as-needed.patch
new file mode 100644
index 0000000..662a078
--- /dev/null
+++ b/ion3/files/20070506/208_all_as-needed.patch
@@ -0,0 +1,12 @@
+diff -uNr ion-3ds-20070318.orig/de/Makefile ion-3ds-20070318/de/Makefile
+--- ion-3ds-20070318.orig/de/Makefile 2007-03-18 21:31:37.000000000 +0100
++++ ion-3ds-20070318/de/Makefile 2007-04-30 17:30:23.000000000 +0200
+@@ -17,6 +17,8 @@
+
+ MAKE_EXPORTS=de
+
++LDFLAGS+=-lXext
++
+ ######################################
+
+ include $(TOPDIR)/build/rules.mk
diff --git a/ion3/files/digest-ion3-20060326 b/ion3/files/digest-ion3-20060326
new file mode 100644
index 0000000..1b1ac52
--- /dev/null
+++ b/ion3/files/digest-ion3-20060326
@@ -0,0 +1,3 @@
+MD5 3d5628d4efe93f2de804cf5b01abc743 ion-3ds-20060326.tar.gz 617533
+RMD160 147e6ad20c69ca8fe5a80dcd57ce6002a2b3cde1 ion-3ds-20060326.tar.gz 617533
+SHA256 9f3c96c961e47c61e9c10b57de820b608b9d9fdaa43a893e63499b3f17231124 ion-3ds-20060326.tar.gz 617533
diff --git a/ion3/files/digest-ion3-20061223 b/ion3/files/digest-ion3-20061223
new file mode 100644
index 0000000..1de1302
--- /dev/null
+++ b/ion3/files/digest-ion3-20061223
@@ -0,0 +1,15 @@
+MD5 861887705546ddb5f240f10dbdab5098 ion-3ds-20061223.tar.gz 649463
+RMD160 dc61a012354a30f1a83b8b0970b8c09724ea4c9c ion-3ds-20061223.tar.gz 649463
+SHA256 0970fef74de659de45813471560ebe2f97b893de7a238ea00755fcaeb9b7d89e ion-3ds-20061223.tar.gz 649463
+MD5 3133bab28e984dd568e03e4e3fd0cdd7 ion3-mod-ionflux_20061022.orig.tar.gz 14847
+RMD160 86bcc2a260f3e37d613bcebd66f37616e56d3926 ion3-mod-ionflux_20061022.orig.tar.gz 14847
+SHA256 f9fd872d2d5b35f882d9a9161dee52fd5b2bb346c46f9e6cc30922dcda99c935 ion3-mod-ionflux_20061022.orig.tar.gz 14847
+MD5 454d6eb52c2c7c3622582a97e8e89184 ion3-mod-xrandr-20061021.tar.bz2 10762
+RMD160 cca3f472e32b8aff1ce8af123c24e17574c1b197 ion3-mod-xrandr-20061021.tar.bz2 10762
+SHA256 cd2225a356ddfc6f02062bf23c1e90fa573661347ff185316aeae0e18eee72ef ion3-mod-xrandr-20061021.tar.bz2 10762
+MD5 fd5c13cd038464cab15134e3aaa68617 ion3-scripts_20061214.orig.tar.gz 129181
+RMD160 b22827c490f23252c1953582d24a19a5aa0aaed0 ion3-scripts_20061214.orig.tar.gz 129181
+SHA256 82e25973fcfdd282bdb3734191f8a5b0d711b2bf0cb64196d3b42351185fdbcf ion3-scripts_20061214.orig.tar.gz 129181
+MD5 83a2a2a19cb3faed66b5517e31bee17f xft-ion3-for-darcs-20061202.diff 20126
+RMD160 054efa097492531d800bca85582d5b6836567408 xft-ion3-for-darcs-20061202.diff 20126
+SHA256 6af98c329395acb46ddbdac4f0ba023c6e5344914cc06cdfa82339526ce25b3c xft-ion3-for-darcs-20061202.diff 20126
diff --git a/ion3/files/digest-ion3-20070318-r2 b/ion3/files/digest-ion3-20070318-r2
new file mode 100644
index 0000000..b233dc8
--- /dev/null
+++ b/ion3/files/digest-ion3-20070318-r2
@@ -0,0 +1,12 @@
+MD5 f02264ab7ecc990c2cd322f57a5e8a4d ion-3ds-20070318.tar.gz 657282
+RMD160 a7cc9baea3624b0ed840fdc82fc5db2ac1018d9a ion-3ds-20070318.tar.gz 657282
+SHA256 712da027fb12774f67d933d95a95452d98a5658617fc5515011ca79b6035258a ion-3ds-20070318.tar.gz 657282
+MD5 b6ec641eac93eb32a97de4baf02f4da0 ion3-doc-20070318.tar.bz2 38870
+RMD160 5fc0225ad23f1c96b5e979d66185ea608372297d ion3-doc-20070318.tar.bz2 38870
+SHA256 22ca643ca5df67086f12d3f106b16094017477c41fd1ebd73d30607db206821b ion3-doc-20070318.tar.bz2 38870
+MD5 4ce492ba5311d74328655923386868ee ion3-mod-xrandr-20070220.tar.bz2 10822
+RMD160 680714961af7e6b81896c4d989baded5ea4c5222 ion3-mod-xrandr-20070220.tar.bz2 10822
+SHA256 858a72ad203fb98f3cea672809a2cdfd7cb87cfa744e622e5a04d2f87cc1ae38 ion3-mod-xrandr-20070220.tar.bz2 10822
+MD5 47c6573679eead6183c49bdbc660aedd ion3-scripts-20070322.tar.bz2 101212
+RMD160 101a6dd933b5b9b495ca4607a7e0d48d48a9c409 ion3-scripts-20070322.tar.bz2 101212
+SHA256 6864d75f2f7ca021368b52051c297f5590047257ca39d0332af65c7fef0f8d39 ion3-scripts-20070322.tar.bz2 101212
diff --git a/ion3/files/digest-ion3-20070506-r1 b/ion3/files/digest-ion3-20070506-r1
new file mode 100644
index 0000000..bfefeec
--- /dev/null
+++ b/ion3/files/digest-ion3-20070506-r1
@@ -0,0 +1,15 @@
+MD5 c005ebeb89894eefbb414897d874cee6 ion-3rc-20070506.tar.gz 640482
+RMD160 b5dda6a7a48c1f3d433b2a2b1c37294ece79a259 ion-3rc-20070506.tar.gz 640482
+SHA256 850dce3bd1be5d200fda5ba3e6085f397b35c720f7758dc5481bf503fe5d2f56 ion-3rc-20070506.tar.gz 640482
+MD5 45dc4b83f2badbade8389953b3c49da7 ion-doc-3rc-20070506.tar.gz 669471
+RMD160 aa9e75b60c121d3cd62f60afed4592fe1bc0da87 ion-doc-3rc-20070506.tar.gz 669471
+SHA256 9dac4f5e69121b98cf6e5da455d6185f00605cf237f14fc4f8578446f622476e ion-doc-3rc-20070506.tar.gz 669471
+MD5 c8c2d7b039f751db017275f5f977702e ion3-mod-ionflux-20070512.tar.bz2 12770
+RMD160 8e834de0c3048b676bc5c5d5454aedac09129eb3 ion3-mod-ionflux-20070512.tar.bz2 12770
+SHA256 63c4902159923aa02921e39aa7746ca8819ba1c216efa8fa6384fd093f60d18c ion3-mod-ionflux-20070512.tar.bz2 12770
+MD5 dcb17665b215d0891be40392f57197c1 ion3-mod-xrandr-20070410.tar.bz2 10833
+RMD160 8542c0dfebfd1536e6a1ad89a3b791609ca8f16e ion3-mod-xrandr-20070410.tar.bz2 10833
+SHA256 80f23a435b21f8691fc63b78394fa29b25b5304f46895dd961ac905bcc76c82f ion3-mod-xrandr-20070410.tar.bz2 10833
+MD5 33495ed87edd9c5734a1c413847a3b3d ion3-scripts-20070510.tar.bz2 100952
+RMD160 4ac0fff86a039d5890bd934d80c33bb5a78fb02d ion3-scripts-20070510.tar.bz2 100952
+SHA256 53c4705ab6f880404aae92cef3018a956ee1b55d0e22ef93c12d30527a419a61 ion3-scripts-20070510.tar.bz2 100952
diff --git a/ion3/files/ion3-20060317-truetype.patch b/ion3/files/ion3-20060317-truetype.patch
new file mode 100644
index 0000000..2675dfd
--- /dev/null
+++ b/ion3/files/ion3-20060317-truetype.patch
@@ -0,0 +1,741 @@
+diff -Naur ion-3ds-20060317/configure.ac ion-3ds/configure.ac
+--- ion-3ds-20060317/configure.ac 2006-03-17 20:43:29.000000000 +0100
++++ ion-3ds/configure.ac 2006-03-17 23:17:45.000000000 +0100
+@@ -420,6 +420,18 @@
+
+ dnl }}}
+
++AC_ARG_ENABLE([xft],
++ [AS_HELP_STRING([--disable-xft],
++ [Disable XFT Support])])
++
++if test "x$enable_xft" != xno; then
++ XFT_CFLAGS=`xft-config --cflags`
++ XFT_CFLAGS="${XFT_CFLAGS} -DXFT"
++ XFT_LIBS=`xft-config --libs`
++fi
++
++AC_SUBST([XFT_CFLAGS])
++AC_SUBST([XFT_LIBS])
+
+ AC_OUTPUT([system-ac.mk])
+
+diff -Naur ion-3ds-20060317/de/brush.c ion-3ds/de/brush.c
+--- ion-3ds-20060317/de/brush.c 2006-03-17 20:43:04.000000000 +0100
++++ ion-3ds/de/brush.c 2006-03-17 23:17:45.000000000 +0100
+@@ -37,7 +37,9 @@
+ brush->indicator_w=0;
+ brush->win=win;
+ brush->clip_set=FALSE;
+-
++#ifdef XFT
++ brush->draw=NULL;
++#endif /* XFT */
+ style->usecount++;
+
+ if(!grbrush_init(&(brush->grbrush))){
+@@ -65,7 +67,6 @@
+ CREATEOBJ_IMPL(DEBrush, debrush, (p, win, stylename, style));
+ }
+
+-
+ static DEBrush *do_get_brush(Window win, WRootWin *rootwin,
+ const char *stylename, bool slave)
+ {
+@@ -104,6 +105,10 @@
+ {
+ destyle_unref(brush->d);
+ brush->d=NULL;
++#ifdef XFT
++ if(brush->draw!=NULL)
++ XftDrawDestroy(brush->draw);
++#endif /* XFT */
+ grbrush_deinit(&(brush->grbrush));
+ }
+
+@@ -114,6 +119,21 @@
+ }
+
+
++#ifdef XFT
++XftDraw *debrush_get_draw(DEBrush *brush, Drawable d)
++{
++ if(brush->draw==NULL)
++ brush->draw=XftDrawCreate(ioncore_g.dpy, d,
++ XftDEDefaultVisual(),
++ DefaultColormap(ioncore_g.dpy,
++ 0));
++ else
++ XftDrawChange(brush->draw, d);
++
++ return brush->draw;
++}
++#endif
++
+ /*}}}*/
+
+
+diff -Naur ion-3ds-20060317/de/brush.h ion-3ds/de/brush.h
+--- ion-3ds-20060317/de/brush.h 2006-03-17 20:43:04.000000000 +0100
++++ ion-3ds/de/brush.h 2006-03-17 23:17:45.000000000 +0100
+@@ -17,6 +17,9 @@
+ #include <ioncore/common.h>
+ #include <ioncore/gr.h>
+ #include <ioncore/rectangle.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+
+ INTRCLASS(DEBrush);
+
+@@ -34,6 +37,9 @@
+ DECLCLASS(DEBrush){
+ GrBrush grbrush;
+ DEStyle *d;
++#ifdef XFT
++ XftDraw *draw;
++#endif
+ DEBrushExtrasFn *extras_fn;
+ int indicator_w;
+ Window win;
+@@ -104,5 +110,8 @@
+ const char *attr);
+ extern void debrush_clear_area(DEBrush *brush, const WRectangle *geom);
+
++#ifdef XFT
++XftDraw *debrush_get_draw(DEBrush *brush, Drawable d);
++#endif
+
+ #endif /* ION_DE_BRUSH_H */
+diff -Naur ion-3ds-20060317/de/colour.c ion-3ds/de/colour.c
+--- ion-3ds-20060317/de/colour.c 2006-03-17 20:43:04.000000000 +0100
++++ ion-3ds/de/colour.c 2006-03-17 23:17:45.000000000 +0100
+@@ -12,12 +12,23 @@
+ #include <ioncore/common.h>
+ #include "colour.h"
+
+-
+ bool de_alloc_colour(WRootWin *rootwin, DEColour *ret, const char *name)
+ {
++#ifndef XFT
+ XColor c;
+ bool ok=FALSE;
++#else /* XFT */
++ if(name==NULL)
++ return FALSE;
++ return XftColorAllocName(
++ ioncore_g.dpy,
++ XftDEDefaultVisual(),
++ rootwin->default_cmap,
++ name,
++ ret);
++#endif /* XFT */
+
++#ifndef XFT
+ if(name==NULL)
+ return FALSE;
+
+@@ -28,11 +39,13 @@
+ }
+
+ return ok;
++#endif /* ! XFT */
+ }
+
+
+ bool de_duplicate_colour(WRootWin *rootwin, DEColour in, DEColour *out)
+ {
++#ifndef XFT
+ XColor c;
+ c.pixel=in;
+ XQueryColor(ioncore_g.dpy, rootwin->default_cmap, &c);
+@@ -41,11 +54,20 @@
+ return TRUE;
+ }
+ return FALSE;
++#else /* XFT */
++ return XftColorAllocName(
++ ioncore_g.dpy,
++ XftDEDefaultVisual(),
++ rootwin->default_cmap,
++ &(in.color),
++ out);
++#endif /* XFT */
+ }
+
+
+ void de_free_colour_group(WRootWin *rootwin, DEColourGroup *cg)
+ {
++#ifndef XFT
+ DEColour pixels[5];
+
+ pixels[0]=cg->bg;
+@@ -60,15 +82,26 @@
+ free(cg->spec);
+ cg->spec=NULL;
+ }
++#else /* XFT */
++ de_free_colour(rootwin, cg->bg);
++ de_free_colour(rootwin, cg->fg);
++ de_free_colour(rootwin, cg->hl);
++ de_free_colour(rootwin, cg->sh);
++ de_free_colour(rootwin, cg->pad);
++#endif /* XFT */
+ }
+
+
+ void de_free_colour(WRootWin *rootwin, DEColour col)
+ {
++#ifndef XFT
+ DEColour pixels[1];
+
+ pixels[0]=col;
+
+ XFreeColors(ioncore_g.dpy, rootwin->default_cmap, pixels, 1, 0);
++#else /* XFT */
++ XftColorFree(ioncore_g.dpy, XftDEDefaultVisual(), rootwin->default_cmap, &col);
++#endif /* XFT */
+ }
+
+diff -Naur ion-3ds-20060317/de/colour.h ion-3ds/de/colour.h
+--- ion-3ds-20060317/de/colour.h 2006-03-17 20:43:04.000000000 +0100
++++ ion-3ds/de/colour.h 2006-03-17 23:17:45.000000000 +0100
+@@ -15,12 +15,19 @@
+ #include <ioncore/common.h>
+ #include <ioncore/global.h>
+ #include <ioncore/rootwin.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+
+
+ INTRSTRUCT(DEColourGroup);
+
+
++#ifndef XFT
+ typedef unsigned long DEColour;
++#else /* XFT */
++typedef XftColor DEColour;
++#endif /* XFT */
+
+
+ DECLSTRUCT(DEColourGroup){
+@@ -37,5 +44,6 @@
+ bool de_duplicate_colour(WRootWin *rootwin, DEColour in, DEColour *out);
+ void de_free_colour_group(WRootWin *rootwin, DEColourGroup *cg);
+ void de_free_colour(WRootWin *rootwin, DEColour col);
++#define XftDEDefaultVisual() DefaultVisual(ioncore_g.dpy, 0)
+
+ #endif /* ION_DE_COLOUR_H */
+diff -Naur ion-3ds-20060317/de/draw.c ion-3ds/de/draw.c
+--- ion-3ds-20060317/de/draw.c 2006-03-17 20:43:04.000000000 +0100
++++ ion-3ds/de/draw.c 2006-03-17 23:17:45.000000000 +0100
+@@ -79,7 +79,11 @@
+ w--;
+ h--;
+
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, tlc);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, tlc.pixel);
++#endif /* XFT */
+
+
+ a=(br!=0);
+@@ -99,7 +103,11 @@
+ }
+
+
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, brc);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, brc.pixel);
++#endif /* XFT */
+
+ a=(tl!=0);
+ b=0;
+@@ -174,19 +182,35 @@
+ GrBorderLine line)
+ {
+ if(line==GR_BORDERLINE_LEFT && geom->h>0){
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, tlc);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, tlc.pixel);
++#endif /* XFT */
+ XDrawRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y, tl, geom->h);
+ geom->x+=tl;
+ }else if(line==GR_BORDERLINE_TOP && geom->w>0){
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, tlc);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, tlc.pixel);
++#endif /* XFT */
+ XDrawRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y, geom->w, tl);
+ geom->y+=tl;
+ }else if(line==GR_BORDERLINE_RIGHT && geom->h>0){
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, brc);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, brc.pixel);
++#endif /* XFT */
+ XDrawRectangle(ioncore_g.dpy, win, gc, geom->x+geom->w-1-br, geom->y, br, geom->h);
+ geom->w-=br;
+ }else if(line==GR_BORDERLINE_BOTTOM && geom->w>0){
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, brc);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, brc.pixel);
++#endif /* XFT */
+ XDrawRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y+geom->h-1-br, geom->w, br);
+ geom->h-=br;
+ }
+@@ -276,7 +300,11 @@
+ }
+
+ if(MATCHES2("*-*-tagged", a1, a2)){
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, d->copy_gc, cg->fg);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, d->copy_gc, cg->fg.pixel);
++#endif /* XFT */
+
+ copy_masked(brush, d->tag_pixmap, brush->win, 0, 0,
+ d->tag_pixmap_w, d->tag_pixmap_h,
+@@ -326,7 +354,11 @@
+ GC gc=brush->d->normal_gc;
+
+ if(TRUE/*needfill*/){
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, cg->bg);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, cg->bg.pixel);
++#endif /* XFT */
+ XFillRectangle(ioncore_g.dpy, brush->win, gc, geom->x, geom->y,
+ geom->w, geom->h);
+ }
+@@ -468,7 +500,11 @@
+ attr.background_pixmap=ParentRelative;
+ }else{
+ attrflags=CWBackPixel;
++#ifndef XFT
+ attr.background_pixel=brush->d->cgrp.bg;
++#else /* XFT */
++ attr.background_pixel=brush->d->cgrp.bg.pixel;
++#endif /* XFT */
+ }
+
+ XChangeWindowAttributes(ioncore_g.dpy, brush->win, attrflags, &attr);
+@@ -484,7 +520,11 @@
+ if(cg==NULL)
+ return;
+
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, cg->bg);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, cg->bg.pixel);
++#endif /* XFT */
+ XFillRectangle(ioncore_g.dpy, brush->win, gc,
+ geom->x, geom->y, geom->w, geom->h);
+ }
+diff -Naur ion-3ds-20060317/de/font.c ion-3ds/de/font.c
+--- ion-3ds-20060317/de/font.c 2006-03-17 20:43:04.000000000 +0100
++++ ion-3ds/de/font.c 2006-03-17 23:17:45.000000000 +0100
+@@ -14,7 +14,9 @@
+ #include <libtu/objp.h>
+ #include <ioncore/common.h>
+ #include "font.h"
++#ifndef XFT
+ #include "fontset.h"
++#endif /* ! XFT */
+ #include "brush.h"
+
+
+@@ -26,10 +28,13 @@
+
+ DEFont *de_load_font(const char *fontname)
+ {
++#ifdef XFT
++ XftFont *font;
++#endif
+ DEFont *fnt;
+ XFontSet fontset=NULL;
+ XFontStruct *fontstruct=NULL;
+-
++
+ assert(fontname!=NULL);
+
+ /* There shouldn't be that many fonts... */
+@@ -40,6 +45,7 @@
+ }
+ }
+
++#ifndef XFT
+ if(ioncore_g.use_mb){
+ fontset=de_create_font_set(fontname);
+ if(fontset!=NULL){
+@@ -66,13 +72,34 @@
+ return NULL;
+ }
+
++#else /* XFT */
++ if(strncmp(fontname, "xft:", 4)==0){
++ font=XftFontOpenName(ioncore_g.dpy, DefaultScreen(ioncore_g.dpy),
++ fontname+4);
++ }else{
++ font=XftFontOpenXlfd(ioncore_g.dpy, DefaultScreen(ioncore_g.dpy), fontname);
++ }
++
++ if(font==NULL){
++ if(strcmp(fontname, CF_FALLBACK_FONT_NAME)!=0){
++ warn(TR("Could not load font \"%s\", trying \"%s\""),
++ fontname, CF_FALLBACK_FONT_NAME);
++ return de_load_font(CF_FALLBACK_FONT_NAME);
++ }
++ return NULL;
++ }
++#endif /* XFT */
+ fnt=ALLOC(DEFont);
+
+ if(fnt==NULL)
+- return NULL;
++ return NULL;
+
++#ifndef XFT
+ fnt->fontset=fontset;
+ fnt->fontstruct=fontstruct;
++#else
++ fnt->font=font;
++#endif
+ fnt->pattern=scopy(fontname);
+ fnt->next=NULL;
+ fnt->prev=NULL;
+@@ -92,11 +119,13 @@
+ style->font=font;
+ font->refcount++;
+
++#ifndef XFT
+ if(style->font->fontstruct!=NULL){
+ XSetFont(ioncore_g.dpy, style->normal_gc,
+ style->font->fontstruct->fid);
+ }
+
++#endif /* ! XFT */
+ return TRUE;
+ }
+
+@@ -111,11 +140,13 @@
+ if(style->font==NULL)
+ return FALSE;
+
++#ifndef XFT
+ if(style->font->fontstruct!=NULL){
+ XSetFont(ioncore_g.dpy, style->normal_gc,
+ style->font->fontstruct->fid);
+ }
+
++#endif /* ! XFT */
+ return TRUE;
+ }
+
+@@ -125,13 +156,17 @@
+ if(--font->refcount!=0)
+ return;
+
++#ifndef XFT
+ if(font->fontset!=NULL)
+ XFreeFontSet(ioncore_g.dpy, font->fontset);
+ if(font->fontstruct!=NULL)
+ XFreeFont(ioncore_g.dpy, font->fontstruct);
++#else /* XFT */
++ if(font->font!=NULL)
++ XftFontClose(ioncore_g.dpy, font->font);
++#endif /* XFT */
+ if(font->pattern!=NULL)
+- free(font->pattern);
+-
++ free(font->pattern);
+ UNLINK_ITEM(fonts, font, next, prev);
+ free(font);
+ }
+@@ -156,6 +191,7 @@
+
+ void defont_get_font_extents(DEFont *font, GrFontExtents *fnte)
+ {
++#ifndef XFT
+ if(font->fontset!=NULL){
+ XFontSetExtents *ext=XExtentsOfFontSet(font->fontset);
+ if(ext==NULL)
+@@ -171,7 +207,14 @@
+ fnte->baseline=fnt->ascent;
+ return;
+ }
+-
++#else /* XFT */
++ if(font->font!=NULL){
++ fnte->max_height=font->font->ascent+font->font->descent;
++ fnte->max_width=font->font->max_advance_width;
++ fnte->baseline=font->font->ascent;
++ return;
++ }
++#endif /* XFT */
+ fail:
+ DE_RESET_FONT_EXTENTS(fnte);
+ }
+@@ -188,20 +231,35 @@
+
+ uint defont_get_text_width(DEFont *font, const char *text, uint len)
+ {
++#ifndef XFT
+ if(font->fontset!=NULL){
+ XRectangle lext;
+ #ifdef CF_DE_USE_XUTF8
+- if(ioncore_g.enc_utf8)
+- Xutf8TextExtents(font->fontset, text, len, NULL, &lext);
+- else
++ if(ioncore_g.enc_utf8)
++ Xutf8TextExtents(font->fontset, text, len, NULL, &lext);
++ else
+ #endif
+- XmbTextExtents(font->fontset, text, len, NULL, &lext);
+- return lext.width;
++ XmbTextExtents(font->fontset, text, len, NULL, &lext);
++ return lext.width;
+ }else if(font->fontstruct!=NULL){
+ return XTextWidth(font->fontstruct, text, len);
+ }else{
+ return 0;
+ }
++#else /* XFT */
++ if(font->font!=NULL){
++ XGlyphInfo extents;
++ if(ioncore_g.enc_utf8)
++ XftTextExtentsUtf8(ioncore_g.dpy, font->font, (XftChar8 *)text, len,
++ &extents);
++ else
++ XftTextExtents8(ioncore_g.dpy, font->font, (XftChar8 *)text, len,
++ &extents);
++ return extents.xOff;
++ }else{
++ return 0;
++ }
++#endif /* XFT */
+ }
+
+
+@@ -211,6 +269,7 @@
+ /*{{{ String drawing */
+
+
++#ifndef XFT
+ void debrush_do_draw_string_default(DEBrush *brush, int x, int y,
+ const char *str, int len, bool needfill,
+ DEColourGroup *colours)
+@@ -256,6 +315,41 @@
+ }
+ }
+
++#else /* XFT */
++void debrush_do_draw_string_default(DEBrush *brush,
++ int x, int y, const char *str,
++ int len, bool needfill,
++ DEColourGroup *colours)
++{
++ Window win = brush->win;
++ GC gc=brush->d->normal_gc;
++ XftDraw *draw;
++ XftFont *font;
++
++ if(brush->d->font==NULL)
++ return;
++
++ font=brush->d->font->font;
++ draw=debrush_get_draw(brush, win);
++
++ if(TRUE/*needfill*/){
++ XGlyphInfo extents;
++ if(ioncore_g.enc_utf8)
++ XftTextExtentsUtf8(ioncore_g.dpy, font, (XftChar8 *)str, len,
++ &extents);
++ else
++ XftTextExtents8(ioncore_g.dpy, font, (XftChar8 *)str, len, &extents);
++ XftDrawRect(draw, &(colours->bg), x-extents.x, y-extents.y,
++ extents.width, extents.height);
++ }
++
++ if(ioncore_g.enc_utf8)
++ XftDrawStringUtf8(draw, &(colours->fg), font, x, y, (XftChar8 *)str,
++ len);
++ else
++ XftDrawString8(draw, &(colours->fg), font, x, y, (XftChar8 *)str, len);
++}
++#endif /* XFT */
+
+ void debrush_do_draw_string(DEBrush *brush, int x, int y,
+ const char *str, int len, bool needfill,
+diff -Naur ion-3ds-20060317/de/font.h ion-3ds/de/font.h
+--- ion-3ds-20060317/de/font.h 2006-03-17 20:43:04.000000000 +0100
++++ ion-3ds/de/font.h 2006-03-17 23:17:45.000000000 +0100
+@@ -14,6 +14,9 @@
+
+ #include <ioncore/common.h>
+ #include <ioncore/gr.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+
+ INTRSTRUCT(DEFont);
+
+@@ -29,6 +32,9 @@
+ int refcount;
+ XFontSet fontset;
+ XFontStruct *fontstruct;
++#ifdef XFT /* XFT */
++ XftFont *font;
++#endif /* XFT */
+ DEFont *next, *prev;
+ };
+
+diff -Naur ion-3ds-20060317/de/init.c ion-3ds/de/init.c
+--- ion-3ds-20060317/de/init.c 2006-03-17 20:43:04.000000000 +0100
++++ ion-3ds/de/init.c 2006-03-17 23:17:45.000000000 +0100
+@@ -113,16 +113,19 @@
+ void de_get_colour_group(WRootWin *rootwin, DEColourGroup *cg,
+ ExtlTab tab, DEStyle *based_on)
+ {
+- de_get_colour(rootwin, &(cg->hl), tab, based_on, "highlight_colour",
+- DE_WHITE(rootwin));
+- de_get_colour(rootwin, &(cg->sh), tab, based_on, "shadow_colour",
+- DE_WHITE(rootwin));
+- de_get_colour(rootwin, &(cg->bg), tab, based_on, "background_colour",
+- DE_BLACK(rootwin));
+- de_get_colour(rootwin, &(cg->fg), tab, based_on, "foreground_colour",
+- DE_WHITE(rootwin));
+- de_get_colour(rootwin, &(cg->pad), tab, based_on, "padding_colour",
+- cg->bg);
++ DEColour black, white;
++#ifdef XFT
++ de_alloc_colour(rootwin, &black, "black");
++ de_alloc_colour(rootwin, &white, "white");
++#else
++ black=DE_BLACK(rootwin);
++ white=DE_WHITE(rootwin);
++#endif
++ de_get_colour(rootwin, &(cg->hl), tab, based_on, "highlight_colour", white);
++ de_get_colour(rootwin, &(cg->sh), tab, based_on, "shadow_colour", white);
++ de_get_colour(rootwin, &(cg->bg), tab, based_on, "background_colour", black);
++ de_get_colour(rootwin, &(cg->fg), tab, based_on, "foreground_colour", white);
++ de_get_colour(rootwin, &(cg->pad), tab, based_on, "padding_colour", cg->bg);
+ }
+
+
+@@ -329,7 +332,6 @@
+
+ char de_ion_api_version[]=ION_API_VERSION;
+
+-
+ bool de_init()
+ {
+ WRootWin *rootwin;
+diff -Naur ion-3ds-20060317/de/Makefile ion-3ds/de/Makefile
+--- ion-3ds-20060317/de/Makefile 2006-03-17 20:43:01.000000000 +0100
++++ ion-3ds/de/Makefile 2006-03-17 23:17:45.000000000 +0100
+@@ -8,13 +8,12 @@
+
+ ######################################
+
++
+ INCLUDES += $(X11_INCLUDES) $(LIBTU_INCLUDES) $(LIBEXTL_INCLUDES) -I..
+ CFLAGS += $(XOPEN_SOURCE) $(C99_SOURCE)
+
+ SOURCES=init.c draw.c font.c colour.c brush.c fontset.c style.c
+-
+ MODULE=de
+-
+ MAKE_EXPORTS=de
+
+ ######################################
+diff -Naur ion-3ds-20060317/de/style.c ion-3ds/de/style.c
+--- ion-3ds-20060317/de/style.c 2006-03-17 20:43:04.000000000 +0100
++++ ion-3ds/de/style.c 2006-03-17 23:17:45.000000000 +0100
+@@ -74,10 +74,17 @@
+ /*gcv.function=GXclear;*/
+ gcv.stipple=stipple_pixmap;
+ gcvmask=GCFillStyle|GCStipple/*|GCFunction*/;
++#ifndef XFT
+ if(style->font!=NULL && style->font->fontstruct!=NULL){
+ gcv.font=style->font->fontstruct->fid;
+ gcvmask|=GCFont;
+ }
++#else /* XFT */
++// if(style->font!=NULL){
++// gcv.font=style->font;
++// gcvmask|=GCFont;
++// }
++#endif /* XFT */
+
+ style->stipple_gc=XCreateGC(dpy, root, gcvmask, &gcv);
+ XCopyGC(dpy, style->normal_gc,
+@@ -206,6 +213,14 @@
+
+ bool destyle_init(DEStyle *style, WRootWin *rootwin, const char *name)
+ {
++ DEColour black, white;
++#ifdef XFT
++ de_alloc_colour(rootwin, &black, "black");
++ de_alloc_colour(rootwin, &white, "white");
++#else
++ black=DE_BLACK(rootwin);
++ white=DE_WHITE(rootwin);
++#endif /* XFT */
+ style->style=scopy(name);
+ if(style->style==NULL)
+ return FALSE;
+@@ -229,11 +244,11 @@
+
+ style->cgrp_alloced=FALSE;
+ style->cgrp.spec=NULL;
+- style->cgrp.bg=DE_BLACK(rootwin);
+- style->cgrp.pad=DE_BLACK(rootwin);
+- style->cgrp.fg=DE_WHITE(rootwin);
+- style->cgrp.hl=DE_WHITE(rootwin);
+- style->cgrp.sh=DE_WHITE(rootwin);
++ style->cgrp.bg=black;
++ style->cgrp.pad=black;
++ style->cgrp.fg=white;
++ style->cgrp.hl=white;
++ style->cgrp.sh=white;
+
+ style->font=NULL;
+
+@@ -255,7 +270,7 @@
+ static DEStyle *do_create_style(WRootWin *rootwin, const char *name)
+ {
+ DEStyle *style=ALLOC(DEStyle);
+- if(style!=NULL){
++ if(style!=NULL) {
+ if(!destyle_init(style, rootwin, name)){
+ free(style);
+ return NULL;
+diff -Naur ion-3ds-20060317/de/style.h ion-3ds/de/style.h
+--- ion-3ds-20060317/de/style.h 2006-03-17 20:43:04.000000000 +0100
++++ ion-3ds/de/style.h 2006-03-17 23:17:45.000000000 +0100
+@@ -76,6 +76,7 @@
+ Pixmap tag_pixmap;
+ int tag_pixmap_w;
+ int tag_pixmap_h;
++ int xft_style;
+
+ DEStyle *next, *prev;
+ };
+diff -Naur ion-3ds-20060317/system-ac.mk.in ion-3ds/system-ac.mk.in
+--- ion-3ds-20060317/system-ac.mk.in 2006-03-17 20:43:03.000000000 +0100
++++ ion-3ds/system-ac.mk.in 2006-03-17 23:17:45.000000000 +0100
+@@ -188,3 +188,7 @@
+ STRIP=@STRIP@
+
+ RM=rm
++
++### XFT Support
++CFLAGS+=@XFT_CFLAGS@
++LIBS+=@XFT_LIBS@
diff --git a/ion3/files/ion3-20060326-truetype.patch b/ion3/files/ion3-20060326-truetype.patch
new file mode 100644
index 0000000..ea94577
--- /dev/null
+++ b/ion3/files/ion3-20060326-truetype.patch
@@ -0,0 +1,741 @@
+diff -Naur ion-3ds-20060326/configure.ac ion-3ds/configure.ac
+--- ion-3ds-20060326/configure.ac 2006-03-26 11:37:58.000000000 +0200
++++ ion-3ds/configure.ac 2006-04-06 10:08:37.000000000 +0200
+@@ -420,6 +420,18 @@
+
+ dnl }}}
+
++AC_ARG_ENABLE([xft],
++ [AS_HELP_STRING([--disable-xft],
++ [Disable XFT Support])])
++
++if test "x$enable_xft" != xno; then
++ XFT_CFLAGS=`xft-config --cflags`
++ XFT_CFLAGS="${XFT_CFLAGS} -DXFT"
++ XFT_LIBS=`xft-config --libs`
++fi
++
++AC_SUBST([XFT_CFLAGS])
++AC_SUBST([XFT_LIBS])
+
+ AC_OUTPUT([system-ac.mk])
+
+diff -Naur ion-3ds-20060326/de/brush.c ion-3ds/de/brush.c
+--- ion-3ds-20060326/de/brush.c 2006-03-26 11:37:34.000000000 +0200
++++ ion-3ds/de/brush.c 2006-04-06 10:08:37.000000000 +0200
+@@ -37,7 +37,9 @@
+ brush->indicator_w=0;
+ brush->win=win;
+ brush->clip_set=FALSE;
+-
++#ifdef XFT
++ brush->draw=NULL;
++#endif /* XFT */
+ style->usecount++;
+
+ if(!grbrush_init(&(brush->grbrush))){
+@@ -65,7 +67,6 @@
+ CREATEOBJ_IMPL(DEBrush, debrush, (p, win, stylename, style));
+ }
+
+-
+ static DEBrush *do_get_brush(Window win, WRootWin *rootwin,
+ const char *stylename, bool slave)
+ {
+@@ -104,6 +105,10 @@
+ {
+ destyle_unref(brush->d);
+ brush->d=NULL;
++#ifdef XFT
++ if(brush->draw!=NULL)
++ XftDrawDestroy(brush->draw);
++#endif /* XFT */
+ grbrush_deinit(&(brush->grbrush));
+ }
+
+@@ -114,6 +119,21 @@
+ }
+
+
++#ifdef XFT
++XftDraw *debrush_get_draw(DEBrush *brush, Drawable d)
++{
++ if(brush->draw==NULL)
++ brush->draw=XftDrawCreate(ioncore_g.dpy, d,
++ XftDEDefaultVisual(),
++ DefaultColormap(ioncore_g.dpy,
++ 0));
++ else
++ XftDrawChange(brush->draw, d);
++
++ return brush->draw;
++}
++#endif
++
+ /*}}}*/
+
+
+diff -Naur ion-3ds-20060326/de/brush.h ion-3ds/de/brush.h
+--- ion-3ds-20060326/de/brush.h 2006-03-26 11:37:34.000000000 +0200
++++ ion-3ds/de/brush.h 2006-04-06 10:08:37.000000000 +0200
+@@ -17,6 +17,9 @@
+ #include <ioncore/common.h>
+ #include <ioncore/gr.h>
+ #include <ioncore/rectangle.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+
+ INTRCLASS(DEBrush);
+
+@@ -34,6 +37,9 @@
+ DECLCLASS(DEBrush){
+ GrBrush grbrush;
+ DEStyle *d;
++#ifdef XFT
++ XftDraw *draw;
++#endif
+ DEBrushExtrasFn *extras_fn;
+ int indicator_w;
+ Window win;
+@@ -104,5 +110,8 @@
+ const char *attr);
+ extern void debrush_clear_area(DEBrush *brush, const WRectangle *geom);
+
++#ifdef XFT
++XftDraw *debrush_get_draw(DEBrush *brush, Drawable d);
++#endif
+
+ #endif /* ION_DE_BRUSH_H */
+diff -Naur ion-3ds-20060326/de/colour.c ion-3ds/de/colour.c
+--- ion-3ds-20060326/de/colour.c 2006-03-26 11:37:34.000000000 +0200
++++ ion-3ds/de/colour.c 2006-04-06 10:08:37.000000000 +0200
+@@ -12,12 +12,23 @@
+ #include <ioncore/common.h>
+ #include "colour.h"
+
+-
+ bool de_alloc_colour(WRootWin *rootwin, DEColour *ret, const char *name)
+ {
++#ifndef XFT
+ XColor c;
+ bool ok=FALSE;
++#else /* XFT */
++ if(name==NULL)
++ return FALSE;
++ return XftColorAllocName(
++ ioncore_g.dpy,
++ XftDEDefaultVisual(),
++ rootwin->default_cmap,
++ name,
++ ret);
++#endif /* XFT */
+
++#ifndef XFT
+ if(name==NULL)
+ return FALSE;
+
+@@ -28,11 +39,13 @@
+ }
+
+ return ok;
++#endif /* ! XFT */
+ }
+
+
+ bool de_duplicate_colour(WRootWin *rootwin, DEColour in, DEColour *out)
+ {
++#ifndef XFT
+ XColor c;
+ c.pixel=in;
+ XQueryColor(ioncore_g.dpy, rootwin->default_cmap, &c);
+@@ -41,11 +54,20 @@
+ return TRUE;
+ }
+ return FALSE;
++#else /* XFT */
++ return XftColorAllocName(
++ ioncore_g.dpy,
++ XftDEDefaultVisual(),
++ rootwin->default_cmap,
++ &(in.color),
++ out);
++#endif /* XFT */
+ }
+
+
+ void de_free_colour_group(WRootWin *rootwin, DEColourGroup *cg)
+ {
++#ifndef XFT
+ DEColour pixels[5];
+
+ pixels[0]=cg->bg;
+@@ -60,15 +82,26 @@
+ free(cg->spec);
+ cg->spec=NULL;
+ }
++#else /* XFT */
++ de_free_colour(rootwin, cg->bg);
++ de_free_colour(rootwin, cg->fg);
++ de_free_colour(rootwin, cg->hl);
++ de_free_colour(rootwin, cg->sh);
++ de_free_colour(rootwin, cg->pad);
++#endif /* XFT */
+ }
+
+
+ void de_free_colour(WRootWin *rootwin, DEColour col)
+ {
++#ifndef XFT
+ DEColour pixels[1];
+
+ pixels[0]=col;
+
+ XFreeColors(ioncore_g.dpy, rootwin->default_cmap, pixels, 1, 0);
++#else /* XFT */
++ XftColorFree(ioncore_g.dpy, XftDEDefaultVisual(), rootwin->default_cmap, &col);
++#endif /* XFT */
+ }
+
+diff -Naur ion-3ds-20060326/de/colour.h ion-3ds/de/colour.h
+--- ion-3ds-20060326/de/colour.h 2006-03-26 11:37:34.000000000 +0200
++++ ion-3ds/de/colour.h 2006-04-06 10:08:37.000000000 +0200
+@@ -15,12 +15,19 @@
+ #include <ioncore/common.h>
+ #include <ioncore/global.h>
+ #include <ioncore/rootwin.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+
+
+ INTRSTRUCT(DEColourGroup);
+
+
++#ifndef XFT
+ typedef unsigned long DEColour;
++#else /* XFT */
++typedef XftColor DEColour;
++#endif /* XFT */
+
+
+ DECLSTRUCT(DEColourGroup){
+@@ -37,5 +44,6 @@
+ bool de_duplicate_colour(WRootWin *rootwin, DEColour in, DEColour *out);
+ void de_free_colour_group(WRootWin *rootwin, DEColourGroup *cg);
+ void de_free_colour(WRootWin *rootwin, DEColour col);
++#define XftDEDefaultVisual() DefaultVisual(ioncore_g.dpy, 0)
+
+ #endif /* ION_DE_COLOUR_H */
+diff -Naur ion-3ds-20060326/de/draw.c ion-3ds/de/draw.c
+--- ion-3ds-20060326/de/draw.c 2006-03-26 11:37:34.000000000 +0200
++++ ion-3ds/de/draw.c 2006-04-06 10:08:37.000000000 +0200
+@@ -79,7 +79,11 @@
+ w--;
+ h--;
+
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, tlc);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, tlc.pixel);
++#endif /* XFT */
+
+
+ a=(br!=0);
+@@ -99,7 +103,11 @@
+ }
+
+
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, brc);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, brc.pixel);
++#endif /* XFT */
+
+ a=(tl!=0);
+ b=0;
+@@ -174,19 +182,35 @@
+ GrBorderLine line)
+ {
+ if(line==GR_BORDERLINE_LEFT && geom->h>0){
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, tlc);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, tlc.pixel);
++#endif /* XFT */
+ XDrawRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y, tl, geom->h);
+ geom->x+=tl;
+ }else if(line==GR_BORDERLINE_TOP && geom->w>0){
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, tlc);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, tlc.pixel);
++#endif /* XFT */
+ XDrawRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y, geom->w, tl);
+ geom->y+=tl;
+ }else if(line==GR_BORDERLINE_RIGHT && geom->h>0){
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, brc);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, brc.pixel);
++#endif /* XFT */
+ XDrawRectangle(ioncore_g.dpy, win, gc, geom->x+geom->w-1-br, geom->y, br, geom->h);
+ geom->w-=br;
+ }else if(line==GR_BORDERLINE_BOTTOM && geom->w>0){
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, brc);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, brc.pixel);
++#endif /* XFT */
+ XDrawRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y+geom->h-1-br, geom->w, br);
+ geom->h-=br;
+ }
+@@ -276,7 +300,11 @@
+ }
+
+ if(MATCHES2("*-*-tagged", a1, a2)){
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, d->copy_gc, cg->fg);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, d->copy_gc, cg->fg.pixel);
++#endif /* XFT */
+
+ copy_masked(brush, d->tag_pixmap, brush->win, 0, 0,
+ d->tag_pixmap_w, d->tag_pixmap_h,
+@@ -326,7 +354,11 @@
+ GC gc=brush->d->normal_gc;
+
+ if(TRUE/*needfill*/){
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, cg->bg);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, cg->bg.pixel);
++#endif /* XFT */
+ XFillRectangle(ioncore_g.dpy, brush->win, gc, geom->x, geom->y,
+ geom->w, geom->h);
+ }
+@@ -468,7 +500,11 @@
+ attr.background_pixmap=ParentRelative;
+ }else{
+ attrflags=CWBackPixel;
++#ifndef XFT
+ attr.background_pixel=brush->d->cgrp.bg;
++#else /* XFT */
++ attr.background_pixel=brush->d->cgrp.bg.pixel;
++#endif /* XFT */
+ }
+
+ XChangeWindowAttributes(ioncore_g.dpy, brush->win, attrflags, &attr);
+@@ -484,7 +520,11 @@
+ if(cg==NULL)
+ return;
+
++#ifndef XFT
+ XSetForeground(ioncore_g.dpy, gc, cg->bg);
++#else /* XFT */
++ XSetForeground(ioncore_g.dpy, gc, cg->bg.pixel);
++#endif /* XFT */
+ XFillRectangle(ioncore_g.dpy, brush->win, gc,
+ geom->x, geom->y, geom->w, geom->h);
+ }
+diff -Naur ion-3ds-20060326/de/font.c ion-3ds/de/font.c
+--- ion-3ds-20060326/de/font.c 2006-03-26 11:37:34.000000000 +0200
++++ ion-3ds/de/font.c 2006-04-06 10:08:37.000000000 +0200
+@@ -14,7 +14,9 @@
+ #include <libtu/objp.h>
+ #include <ioncore/common.h>
+ #include "font.h"
++#ifndef XFT
+ #include "fontset.h"
++#endif /* ! XFT */
+ #include "brush.h"
+
+
+@@ -26,10 +28,13 @@
+
+ DEFont *de_load_font(const char *fontname)
+ {
++#ifdef XFT
++ XftFont *font;
++#endif
+ DEFont *fnt;
+ XFontSet fontset=NULL;
+ XFontStruct *fontstruct=NULL;
+-
++
+ assert(fontname!=NULL);
+
+ /* There shouldn't be that many fonts... */
+@@ -40,6 +45,7 @@
+ }
+ }
+
++#ifndef XFT
+ if(ioncore_g.use_mb){
+ fontset=de_create_font_set(fontname);
+ if(fontset!=NULL){
+@@ -66,13 +72,34 @@
+ return NULL;
+ }
+
++#else /* XFT */
++ if(strncmp(fontname, "xft:", 4)==0){
++ font=XftFontOpenName(ioncore_g.dpy, DefaultScreen(ioncore_g.dpy),
++ fontname+4);
++ }else{
++ font=XftFontOpenXlfd(ioncore_g.dpy, DefaultScreen(ioncore_g.dpy), fontname);
++ }
++
++ if(font==NULL){
++ if(strcmp(fontname, CF_FALLBACK_FONT_NAME)!=0){
++ warn(TR("Could not load font \"%s\", trying \"%s\""),
++ fontname, CF_FALLBACK_FONT_NAME);
++ return de_load_font(CF_FALLBACK_FONT_NAME);
++ }
++ return NULL;
++ }
++#endif /* XFT */
+ fnt=ALLOC(DEFont);
+
+ if(fnt==NULL)
+- return NULL;
++ return NULL;
+
++#ifndef XFT
+ fnt->fontset=fontset;
+ fnt->fontstruct=fontstruct;
++#else
++ fnt->font=font;
++#endif
+ fnt->pattern=scopy(fontname);
+ fnt->next=NULL;
+ fnt->prev=NULL;
+@@ -92,11 +119,13 @@
+ style->font=font;
+ font->refcount++;
+
++#ifndef XFT
+ if(style->font->fontstruct!=NULL){
+ XSetFont(ioncore_g.dpy, style->normal_gc,
+ style->font->fontstruct->fid);
+ }
+
++#endif /* ! XFT */
+ return TRUE;
+ }
+
+@@ -111,11 +140,13 @@
+ if(style->font==NULL)
+ return FALSE;
+
++#ifndef XFT
+ if(style->font->fontstruct!=NULL){
+ XSetFont(ioncore_g.dpy, style->normal_gc,
+ style->font->fontstruct->fid);
+ }
+
++#endif /* ! XFT */
+ return TRUE;
+ }
+
+@@ -125,13 +156,17 @@
+ if(--font->refcount!=0)
+ return;
+
++#ifndef XFT
+ if(font->fontset!=NULL)
+ XFreeFontSet(ioncore_g.dpy, font->fontset);
+ if(font->fontstruct!=NULL)
+ XFreeFont(ioncore_g.dpy, font->fontstruct);
++#else /* XFT */
++ if(font->font!=NULL)
++ XftFontClose(ioncore_g.dpy, font->font);
++#endif /* XFT */
+ if(font->pattern!=NULL)
+- free(font->pattern);
+-
++ free(font->pattern);
+ UNLINK_ITEM(fonts, font, next, prev);
+ free(font);
+ }
+@@ -156,6 +191,7 @@
+
+ void defont_get_font_extents(DEFont *font, GrFontExtents *fnte)
+ {
++#ifndef XFT
+ if(font->fontset!=NULL){
+ XFontSetExtents *ext=XExtentsOfFontSet(font->fontset);
+ if(ext==NULL)
+@@ -171,7 +207,14 @@
+ fnte->baseline=fnt->ascent;
+ return;
+ }
+-
++#else /* XFT */
++ if(font->font!=NULL){
++ fnte->max_height=font->font->ascent+font->font->descent;
++ fnte->max_width=font->font->max_advance_width;
++ fnte->baseline=font->font->ascent;
++ return;
++ }
++#endif /* XFT */
+ fail:
+ DE_RESET_FONT_EXTENTS(fnte);
+ }
+@@ -188,20 +231,35 @@
+
+ uint defont_get_text_width(DEFont *font, const char *text, uint len)
+ {
++#ifndef XFT
+ if(font->fontset!=NULL){
+ XRectangle lext;
+ #ifdef CF_DE_USE_XUTF8
+- if(ioncore_g.enc_utf8)
+- Xutf8TextExtents(font->fontset, text, len, NULL, &lext);
+- else
++ if(ioncore_g.enc_utf8)
++ Xutf8TextExtents(font->fontset, text, len, NULL, &lext);
++ else
+ #endif
+- XmbTextExtents(font->fontset, text, len, NULL, &lext);
+- return lext.width;
++ XmbTextExtents(font->fontset, text, len, NULL, &lext);
++ return lext.width;
+ }else if(font->fontstruct!=NULL){
+ return XTextWidth(font->fontstruct, text, len);
+ }else{
+ return 0;
+ }
++#else /* XFT */
++ if(font->font!=NULL){
++ XGlyphInfo extents;
++ if(ioncore_g.enc_utf8)
++ XftTextExtentsUtf8(ioncore_g.dpy, font->font, (XftChar8 *)text, len,
++ &extents);
++ else
++ XftTextExtents8(ioncore_g.dpy, font->font, (XftChar8 *)text, len,
++ &extents);
++ return extents.xOff;
++ }else{
++ return 0;
++ }
++#endif /* XFT */
+ }
+
+
+@@ -211,6 +269,7 @@
+ /*{{{ String drawing */
+
+
++#ifndef XFT
+ void debrush_do_draw_string_default(DEBrush *brush, int x, int y,
+ const char *str, int len, bool needfill,
+ DEColourGroup *colours)
+@@ -256,6 +315,41 @@
+ }
+ }
+
++#else /* XFT */
++void debrush_do_draw_string_default(DEBrush *brush,
++ int x, int y, const char *str,
++ int len, bool needfill,
++ DEColourGroup *colours)
++{
++ Window win = brush->win;
++ GC gc=brush->d->normal_gc;
++ XftDraw *draw;
++ XftFont *font;
++
++ if(brush->d->font==NULL)
++ return;
++
++ font=brush->d->font->font;
++ draw=debrush_get_draw(brush, win);
++
++ if(TRUE/*needfill*/){
++ XGlyphInfo extents;
++ if(ioncore_g.enc_utf8)
++ XftTextExtentsUtf8(ioncore_g.dpy, font, (XftChar8 *)str, len,
++ &extents);
++ else
++ XftTextExtents8(ioncore_g.dpy, font, (XftChar8 *)str, len, &extents);
++ XftDrawRect(draw, &(colours->bg), x-extents.x, y-extents.y,
++ extents.width, extents.height);
++ }
++
++ if(ioncore_g.enc_utf8)
++ XftDrawStringUtf8(draw, &(colours->fg), font, x, y, (XftChar8 *)str,
++ len);
++ else
++ XftDrawString8(draw, &(colours->fg), font, x, y, (XftChar8 *)str, len);
++}
++#endif /* XFT */
+
+ void debrush_do_draw_string(DEBrush *brush, int x, int y,
+ const char *str, int len, bool needfill,
+diff -Naur ion-3ds-20060326/de/font.h ion-3ds/de/font.h
+--- ion-3ds-20060326/de/font.h 2006-03-26 11:37:34.000000000 +0200
++++ ion-3ds/de/font.h 2006-04-06 10:08:37.000000000 +0200
+@@ -14,6 +14,9 @@
+
+ #include <ioncore/common.h>
+ #include <ioncore/gr.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+
+ INTRSTRUCT(DEFont);
+
+@@ -29,6 +32,9 @@
+ int refcount;
+ XFontSet fontset;
+ XFontStruct *fontstruct;
++#ifdef XFT /* XFT */
++ XftFont *font;
++#endif /* XFT */
+ DEFont *next, *prev;
+ };
+
+diff -Naur ion-3ds-20060326/de/init.c ion-3ds/de/init.c
+--- ion-3ds-20060326/de/init.c 2006-03-26 11:37:34.000000000 +0200
++++ ion-3ds/de/init.c 2006-04-06 10:08:37.000000000 +0200
+@@ -113,16 +113,19 @@
+ void de_get_colour_group(WRootWin *rootwin, DEColourGroup *cg,
+ ExtlTab tab, DEStyle *based_on)
+ {
+- de_get_colour(rootwin, &(cg->hl), tab, based_on, "highlight_colour",
+- DE_WHITE(rootwin));
+- de_get_colour(rootwin, &(cg->sh), tab, based_on, "shadow_colour",
+- DE_WHITE(rootwin));
+- de_get_colour(rootwin, &(cg->bg), tab, based_on, "background_colour",
+- DE_BLACK(rootwin));
+- de_get_colour(rootwin, &(cg->fg), tab, based_on, "foreground_colour",
+- DE_WHITE(rootwin));
+- de_get_colour(rootwin, &(cg->pad), tab, based_on, "padding_colour",
+- cg->bg);
++ DEColour black, white;
++#ifdef XFT
++ de_alloc_colour(rootwin, &black, "black");
++ de_alloc_colour(rootwin, &white, "white");
++#else
++ black=DE_BLACK(rootwin);
++ white=DE_WHITE(rootwin);
++#endif
++ de_get_colour(rootwin, &(cg->hl), tab, based_on, "highlight_colour", white);
++ de_get_colour(rootwin, &(cg->sh), tab, based_on, "shadow_colour", white);
++ de_get_colour(rootwin, &(cg->bg), tab, based_on, "background_colour", black);
++ de_get_colour(rootwin, &(cg->fg), tab, based_on, "foreground_colour", white);
++ de_get_colour(rootwin, &(cg->pad), tab, based_on, "padding_colour", cg->bg);
+ }
+
+
+@@ -329,7 +332,6 @@
+
+ char de_ion_api_version[]=ION_API_VERSION;
+
+-
+ bool de_init()
+ {
+ WRootWin *rootwin;
+diff -Naur ion-3ds-20060326/de/Makefile ion-3ds/de/Makefile
+--- ion-3ds-20060326/de/Makefile 2006-03-26 11:37:32.000000000 +0200
++++ ion-3ds/de/Makefile 2006-04-06 10:08:37.000000000 +0200
+@@ -8,13 +8,12 @@
+
+ ######################################
+
++
+ INCLUDES += $(X11_INCLUDES) $(LIBTU_INCLUDES) $(LIBEXTL_INCLUDES) -I..
+ CFLAGS += $(XOPEN_SOURCE) $(C99_SOURCE)
+
+ SOURCES=init.c draw.c font.c colour.c brush.c fontset.c style.c
+-
+ MODULE=de
+-
+ MAKE_EXPORTS=de
+
+ ######################################
+diff -Naur ion-3ds-20060326/de/style.c ion-3ds/de/style.c
+--- ion-3ds-20060326/de/style.c 2006-03-26 11:37:34.000000000 +0200
++++ ion-3ds/de/style.c 2006-04-06 10:08:37.000000000 +0200
+@@ -74,10 +74,17 @@
+ /*gcv.function=GXclear;*/
+ gcv.stipple=stipple_pixmap;
+ gcvmask=GCFillStyle|GCStipple/*|GCFunction*/;
++#ifndef XFT
+ if(style->font!=NULL && style->font->fontstruct!=NULL){
+ gcv.font=style->font->fontstruct->fid;
+ gcvmask|=GCFont;
+ }
++#else /* XFT */
++// if(style->font!=NULL){
++// gcv.font=style->font;
++// gcvmask|=GCFont;
++// }
++#endif /* XFT */
+
+ style->stipple_gc=XCreateGC(dpy, root, gcvmask, &gcv);
+ XCopyGC(dpy, style->normal_gc,
+@@ -206,6 +213,14 @@
+
+ bool destyle_init(DEStyle *style, WRootWin *rootwin, const char *name)
+ {
++ DEColour black, white;
++#ifdef XFT
++ de_alloc_colour(rootwin, &black, "black");
++ de_alloc_colour(rootwin, &white, "white");
++#else
++ black=DE_BLACK(rootwin);
++ white=DE_WHITE(rootwin);
++#endif /* XFT */
+ style->style=scopy(name);
+ if(style->style==NULL)
+ return FALSE;
+@@ -229,11 +244,11 @@
+
+ style->cgrp_alloced=FALSE;
+ style->cgrp.spec=NULL;
+- style->cgrp.bg=DE_BLACK(rootwin);
+- style->cgrp.pad=DE_BLACK(rootwin);
+- style->cgrp.fg=DE_WHITE(rootwin);
+- style->cgrp.hl=DE_WHITE(rootwin);
+- style->cgrp.sh=DE_WHITE(rootwin);
++ style->cgrp.bg=black;
++ style->cgrp.pad=black;
++ style->cgrp.fg=white;
++ style->cgrp.hl=white;
++ style->cgrp.sh=white;
+
+ style->font=NULL;
+
+@@ -255,7 +270,7 @@
+ static DEStyle *do_create_style(WRootWin *rootwin, const char *name)
+ {
+ DEStyle *style=ALLOC(DEStyle);
+- if(style!=NULL){
++ if(style!=NULL) {
+ if(!destyle_init(style, rootwin, name)){
+ free(style);
+ return NULL;
+diff -Naur ion-3ds-20060326/de/style.h ion-3ds/de/style.h
+--- ion-3ds-20060326/de/style.h 2006-03-26 11:37:34.000000000 +0200
++++ ion-3ds/de/style.h 2006-04-06 10:08:37.000000000 +0200
+@@ -76,6 +76,7 @@
+ Pixmap tag_pixmap;
+ int tag_pixmap_w;
+ int tag_pixmap_h;
++ int xft_style;
+
+ DEStyle *next, *prev;
+ };
+diff -Naur ion-3ds-20060326/system-ac.mk.in ion-3ds/system-ac.mk.in
+--- ion-3ds-20060326/system-ac.mk.in 2006-03-26 11:37:33.000000000 +0200
++++ ion-3ds/system-ac.mk.in 2006-04-06 10:08:37.000000000 +0200
+@@ -188,3 +188,7 @@
+ STRIP=@STRIP@
+
+ RM=rm
++
++### XFT Support
++CFLAGS+=@XFT_CFLAGS@
++LIBS+=@XFT_LIBS@
diff --git a/ion3/files/ion3.desktop b/ion3/files/ion3.desktop
new file mode 100644
index 0000000..ba4103e
--- /dev/null
+++ b/ion3/files/ion3.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Ion3
+Comment=A tiling tabbed window manager designed with keyboard users in mind.
+Exec=ion3
+TryExec=ion3
+# no icon yet, only the top three are currently used
+Icon=
+Type=Application
diff --git a/ion3/files/pwm3.desktop b/ion3/files/pwm3.desktop
new file mode 100644
index 0000000..072f169
--- /dev/null
+++ b/ion3/files/pwm3.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=PWM3
+Comment=An X11 window manager
+Exec=pwm3
+TryExec=pwm3
+# no icon yet, only the top three are currently used
+Icon=
+Type=Application
diff --git a/ion3/files/xft-ion3-20070318.patch b/ion3/files/xft-ion3-20070318.patch
new file mode 100644
index 0000000..f2d9658
--- /dev/null
+++ b/ion3/files/xft-ion3-20070318.patch
@@ -0,0 +1,689 @@
+diff -Naur ../work/ion-3/build/ac/configure.ac ion-3ds-20070203/build/ac/configure.ac
+--- ../work/ion-3/build/ac/configure.ac 2007-02-21 13:11:28.000000000 +0300
++++ ion-3ds-20070203/build/ac/configure.ac 2007-02-21 13:11:56.000000000 +0300
+@@ -65,6 +65,8 @@
+
+ if test "x$enable_xinerama" = xno; then
+ _DCF_NO_XINERAMA="-DCF_NO_XINERAMA"
++else
++ _DCF_NO_XINERAMA="-DCF_XINERAMA"
+ fi
+
+ dnl }}}
+@@ -427,6 +429,18 @@
+
+ dnl }}}
+
++AC_ARG_ENABLE([xft],
++ [AS_HELP_STRING([--disable-xft],
++ [Disable XFT Support])])
++
++if test "x$enable_xft" != xno; then
++ XFT_CFLAGS=`xft-config --cflags`
++ XFT_CFLAGS="${XFT_CFLAGS} -DXFT"
++ XFT_LIBS=`xft-config --libs`
++fi
++
++AC_SUBST([XFT_CFLAGS])
++AC_SUBST([XFT_LIBS])
+
+ AC_OUTPUT([system-ac.mk])
+
+diff -Naur ../work/ion-3/build/ac/system-ac.mk.in ion-3ds-20070203/build/ac/system-ac.mk.in
+--- ../work/ion-3/build/ac/system-ac.mk.in 2007-02-21 13:11:28.000000000 +0300
++++ ion-3ds-20070203/build/ac/system-ac.mk.in 2007-02-21 13:11:56.000000000 +0300
+@@ -188,3 +188,7 @@
+ STRIP=@STRIP@
+
+ RM=rm
++
++### XFT Support
++CFLAGS+=@XFT_CFLAGS@
++LIBS+=@XFT_LIBS@
+diff -Naur ../work/ion-3/de/brush.c ion-3ds-20070203/de/brush.c
+--- ../work/ion-3/de/brush.c 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/brush.c 2007-02-21 13:11:57.000000000 +0300
+@@ -47,6 +47,9 @@
+
+ gr_stylespec_init(&brush->current_attr);
+
++#ifdef XFT
++ brush->draw=NULL;
++#endif /* XFT */
+ style->usecount++;
+
+ if(!grbrush_init(&(brush->grbrush))){
+@@ -127,6 +130,10 @@
+ {
+ destyle_unref(brush->d);
+ brush->d=NULL;
++#ifdef XFT
++ if(brush->draw!=NULL)
++ XftDrawDestroy(brush->draw);
++#endif /* XFT */
+ gr_stylespec_unalloc(&brush->current_attr);
+ grbrush_deinit(&(brush->grbrush));
+ }
+@@ -138,6 +145,21 @@
+ }
+
+
++#ifdef XFT
++XftDraw *debrush_get_draw(DEBrush *brush, Drawable d)
++{
++ if(brush->draw==NULL)
++ brush->draw=XftDrawCreate(ioncore_g.dpy, d,
++ XftDEDefaultVisual(),
++ DefaultColormap(ioncore_g.dpy,
++ 0));
++ else
++ XftDrawChange(brush->draw, d);
++
++ return brush->draw;
++}
++#endif
++
+ /*}}}*/
+
+
+diff -Naur ../work/ion-3/de/brush.h ion-3ds-20070203/de/brush.h
+--- ../work/ion-3/de/brush.h 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/brush.h 2007-02-21 13:11:57.000000000 +0300
+@@ -17,6 +17,9 @@
+ #include <ioncore/common.h>
+ #include <ioncore/gr.h>
+ #include <ioncore/rectangle.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+
+ INTRCLASS(DEBrush);
+
+@@ -36,6 +39,9 @@
+ DECLCLASS(DEBrush){
+ GrBrush grbrush;
+ DEStyle *d;
++#ifdef XFT
++ XftDraw *draw;
++#endif
+ DEBrushExtrasFn *extras_fn;
+ int indicator_w;
+ Window win;
+@@ -111,5 +117,8 @@
+ extern void debrush_fill_area(DEBrush *brush, const WRectangle *geom);
+ extern void debrush_clear_area(DEBrush *brush, const WRectangle *geom);
+
++#ifdef XFT
++XftDraw *debrush_get_draw(DEBrush *brush, Drawable d);
++#endif
+
+ #endif /* ION_DE_BRUSH_H */
+diff -Naur ../work/ion-3/de/colour.c ion-3ds-20070203/de/colour.c
+--- ../work/ion-3/de/colour.c 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/colour.c 2007-02-21 13:11:57.000000000 +0300
+@@ -15,9 +15,21 @@
+
+ bool de_alloc_colour(WRootWin *rootwin, DEColour *ret, const char *name)
+ {
++#ifndef XFT
+ XColor c;
+ bool ok=FALSE;
++#else /* XFT */
++ if(name==NULL)
++ return FALSE;
++ return XftColorAllocName(
++ ioncore_g.dpy,
++ XftDEDefaultVisual(),
++ rootwin->default_cmap,
++ name,
++ ret);
++#endif /* XFT */
+
++#ifndef XFT
+ if(name==NULL)
+ return FALSE;
+
+@@ -28,11 +40,13 @@
+ }
+
+ return ok;
++#endif /* ! XFT */
+ }
+
+
+ bool de_duplicate_colour(WRootWin *rootwin, DEColour in, DEColour *out)
+ {
++#ifndef XFT
+ XColor c;
+ c.pixel=in;
+ XQueryColor(ioncore_g.dpy, rootwin->default_cmap, &c);
+@@ -41,11 +55,20 @@
+ return TRUE;
+ }
+ return FALSE;
++#else /* XFT */
++ return XftColorAllocName(
++ ioncore_g.dpy,
++ XftDEDefaultVisual(),
++ rootwin->default_cmap,
++ &(in.color),
++ out);
++#endif /* XFT */
+ }
+
+
+ void de_free_colour_group(WRootWin *rootwin, DEColourGroup *cg)
+ {
++#ifndef XFT
+ DEColour pixels[5];
+
+ pixels[0]=cg->bg;
+@@ -57,15 +80,26 @@
+ XFreeColors(ioncore_g.dpy, rootwin->default_cmap, pixels, 5, 0);
+
+ gr_stylespec_unalloc(&cg->spec);
++#else /* XFT */
++ de_free_colour(rootwin, cg->bg);
++ de_free_colour(rootwin, cg->fg);
++ de_free_colour(rootwin, cg->hl);
++ de_free_colour(rootwin, cg->sh);
++ de_free_colour(rootwin, cg->pad);
++#endif /* XFT */
+ }
+
+
+ void de_free_colour(WRootWin *rootwin, DEColour col)
+ {
++#ifndef XFT
+ DEColour pixels[1];
+
+ pixels[0]=col;
+
+ XFreeColors(ioncore_g.dpy, rootwin->default_cmap, pixels, 1, 0);
++#else /* XFT */
++ XftColorFree(ioncore_g.dpy, XftDEDefaultVisual(), rootwin->default_cmap, &col);
++#endif /* XFT */
+ }
+
+diff -Naur ../work/ion-3/de/colour.h ion-3ds-20070203/de/colour.h
+--- ../work/ion-3/de/colour.h 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/colour.h 2007-02-21 13:11:57.000000000 +0300
+@@ -15,12 +15,19 @@
+ #include <ioncore/common.h>
+ #include <ioncore/global.h>
+ #include <ioncore/rootwin.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+
+
+ INTRSTRUCT(DEColourGroup);
+
+
++#ifndef XFT
+ typedef unsigned long DEColour;
++#else /* XFT */
++typedef XftColor DEColour;
++#endif /* XFT */
+
+
+ DECLSTRUCT(DEColourGroup){
+@@ -37,5 +44,6 @@
+ bool de_duplicate_colour(WRootWin *rootwin, DEColour in, DEColour *out);
+ void de_free_colour_group(WRootWin *rootwin, DEColourGroup *cg);
+ void de_free_colour(WRootWin *rootwin, DEColour col);
++#define XftDEDefaultVisual() DefaultVisual(ioncore_g.dpy, 0)
+
+ #endif /* ION_DE_COLOUR_H */
+diff -Naur ../work/ion-3/de/draw.c ion-3ds-20070203/de/draw.c
+--- ../work/ion-3/de/draw.c 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/draw.c 2007-02-21 13:11:57.000000000 +0300
+@@ -22,6 +22,14 @@
+ #include <X11/extensions/shape.h>
+
+
++#ifndef XFT
++#define PIXEL(x) x
++#else /* XFT */
++#define PIXEL(x) x.pixel
++#endif /* XFT */
++
++
++
+ /*{{{ Colour group lookup */
+
+
+@@ -86,8 +94,7 @@
+ w--;
+ h--;
+
+- XSetForeground(ioncore_g.dpy, gc, tlc);
+-
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(tlc));
+
+ a=(br!=0);
+ b=0;
+@@ -104,9 +111,8 @@
+
+ XDrawLines(ioncore_g.dpy, win, gc, points, 3, CoordModeOrigin);
+ }
+-
+
+- XSetForeground(ioncore_g.dpy, gc, brc);
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(brc));
+
+ a=(tl!=0);
+ b=0;
+@@ -143,23 +143,23 @@
+ GrBorderLine line)
+ {
+ if(line==GR_BORDERLINE_LEFT && geom->h>0 && tl>0){
+- XSetForeground(ioncore_g.dpy, gc, tlc);
+- XSetBackground(ioncore_g.dpy, gc, tlc);
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(tlc));
++ XSetBackground(ioncore_g.dpy, gc, PIXEL(tlc));
+ XFillRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y, tl, geom->h);
+ geom->x+=tl;
+ }else if(line==GR_BORDERLINE_TOP && geom->w>0 && tl>0){
+- XSetForeground(ioncore_g.dpy, gc, tlc);
+- XSetBackground(ioncore_g.dpy, gc, tlc);
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(tlc));
++ XSetBackground(ioncore_g.dpy, gc, PIXEL(tlc));
+ XFillRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y, geom->w, tl);
+ geom->y+=tl;
+ }else if(line==GR_BORDERLINE_RIGHT && geom->h>0 && br>0){
+- XSetForeground(ioncore_g.dpy, gc, brc);
+- XSetBackground(ioncore_g.dpy, gc, brc);
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(brc));
++ XSetBackground(ioncore_g.dpy, gc, PIXEL(brc));
+ XFillRectangle(ioncore_g.dpy, win, gc, geom->x+geom->w-br, geom->y, br, geom->h);
+ geom->w-=br;
+ }else if(line==GR_BORDERLINE_BOTTOM && geom->w>0 && br>0){
+- XSetForeground(ioncore_g.dpy, gc, brc);
+- XSetBackground(ioncore_g.dpy, gc, brc);
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(brc));
++ XSetBackground(ioncore_g.dpy, gc, PIXEL(brc));
+ XFillRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y+geom->h-br, geom->w, br);
+ geom->h-=br;
+ }
+@@ -293,7 +299,7 @@
+ }
+
+ if(MATCHES2(tagged_spec, a1, a2)){
+- XSetForeground(ioncore_g.dpy, d->copy_gc, cg->fg);
++ XSetForeground(ioncore_g.dpy, d->copy_gc, PIXEL(cg->fg));
+
+ copy_masked(brush, d->tag_pixmap, brush->win, 0, 0,
+ d->tag_pixmap_w, d->tag_pixmap_h,
+@@ -348,7 +354,7 @@
+ GC gc=brush->d->normal_gc;
+
+ if(TRUE/*needfill*/){
+- XSetForeground(ioncore_g.dpy, gc, cg->bg);
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(cg->bg));
+ XFillRectangle(ioncore_g.dpy, brush->win, gc, geom->x, geom->y,
+ geom->w, geom->h);
+ }
+@@ -513,7 +519,7 @@
+ attr.background_pixmap=ParentRelative;
+ }else{
+ attrflags=CWBackPixel;
+- attr.background_pixel=brush->d->cgrp.bg;
++ attr.background_pixel=brush->d->PIXEL(cgrp.bg);
+ }
+
+ XChangeWindowAttributes(ioncore_g.dpy, brush->win, attrflags, &attr);
+@@ -529,7 +535,7 @@
+ if(cg==NULL)
+ return;
+
+- XSetForeground(ioncore_g.dpy, gc, cg->bg);
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(cg->bg));
+ XFillRectangle(ioncore_g.dpy, brush->win, gc,
+ geom->x, geom->y, geom->w, geom->h);
+ }
+diff -Naur ../work/ion-3/de/font.c ion-3ds-20070203/de/font.c
+--- ../work/ion-3/de/font.c 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/font.c 2007-02-21 13:11:57.000000000 +0300
+@@ -14,7 +14,9 @@
+ #include <libtu/objp.h>
+ #include <ioncore/common.h>
+ #include "font.h"
++#ifndef XFT
+ #include "fontset.h"
++#endif /* ! XFT */
+ #include "brush.h"
+
+
+@@ -26,6 +28,9 @@
+
+ DEFont *de_load_font(const char *fontname)
+ {
++#ifdef XFT
++ XftFont *font;
++#endif
+ DEFont *fnt;
+ XFontSet fontset=NULL;
+ XFontStruct *fontstruct=NULL;
+@@ -40,6 +45,7 @@
+ }
+ }
+
++#ifndef XFT
+ if(ioncore_g.use_mb){
+ fontset=de_create_font_set(fontname);
+ if(fontset!=NULL){
+@@ -66,13 +72,34 @@
+ return NULL;
+ }
+
++#else /* XFT */
++ if(strncmp(fontname, "xft:", 4)==0){
++ font=XftFontOpenName(ioncore_g.dpy, DefaultScreen(ioncore_g.dpy),
++ fontname+4);
++ }else{
++ font=XftFontOpenXlfd(ioncore_g.dpy, DefaultScreen(ioncore_g.dpy), fontname);
++ }
++
++ if(font==NULL){
++ if(strcmp(fontname, CF_FALLBACK_FONT_NAME)!=0){
++ warn(TR("Could not load font \"%s\", trying \"%s\""),
++ fontname, CF_FALLBACK_FONT_NAME);
++ return de_load_font(CF_FALLBACK_FONT_NAME);
++ }
++ return NULL;
++ }
++#endif /* XFT */
+ fnt=ALLOC(DEFont);
+
+ if(fnt==NULL)
+ return NULL;
+
++#ifndef XFT
+ fnt->fontset=fontset;
+ fnt->fontstruct=fontstruct;
++#else
++ fnt->font=font;
++#endif
+ fnt->pattern=scopy(fontname);
+ fnt->next=NULL;
+ fnt->prev=NULL;
+@@ -92,11 +119,13 @@
+ style->font=font;
+ font->refcount++;
+
++#ifndef XFT
+ if(style->font->fontstruct!=NULL){
+ XSetFont(ioncore_g.dpy, style->normal_gc,
+ style->font->fontstruct->fid);
+ }
+
++#endif /* ! XFT */
+ return TRUE;
+ }
+
+@@ -111,11 +140,13 @@
+ if(style->font==NULL)
+ return FALSE;
+
++#ifndef XFT
+ if(style->font->fontstruct!=NULL){
+ XSetFont(ioncore_g.dpy, style->normal_gc,
+ style->font->fontstruct->fid);
+ }
+
++#endif /* ! XFT */
+ return TRUE;
+ }
+
+@@ -125,10 +156,15 @@
+ if(--font->refcount!=0)
+ return;
+
++#ifndef XFT
+ if(font->fontset!=NULL)
+ XFreeFontSet(ioncore_g.dpy, font->fontset);
+ if(font->fontstruct!=NULL)
+ XFreeFont(ioncore_g.dpy, font->fontstruct);
++#else /* XFT */
++ if(font->font!=NULL)
++ XftFontClose(ioncore_g.dpy, font->font);
++#endif /* XFT */
+ if(font->pattern!=NULL)
+ free(font->pattern);
+
+@@ -156,6 +192,7 @@
+
+ void defont_get_font_extents(DEFont *font, GrFontExtents *fnte)
+ {
++#ifndef XFT
+ if(font->fontset!=NULL){
+ XFontSetExtents *ext=XExtentsOfFontSet(font->fontset);
+ if(ext==NULL)
+@@ -171,7 +208,14 @@
+ fnte->baseline=fnt->ascent;
+ return;
+ }
+-
++#else /* XFT */
++ if(font->font!=NULL){
++ fnte->max_height=font->font->ascent+font->font->descent;
++ fnte->max_width=font->font->max_advance_width;
++ fnte->baseline=font->font->ascent;
++ return;
++ }
++#endif /* XFT */
+ fail:
+ DE_RESET_FONT_EXTENTS(fnte);
+ }
+@@ -188,20 +232,35 @@
+
+ uint defont_get_text_width(DEFont *font, const char *text, uint len)
+ {
++#ifndef XFT
+ if(font->fontset!=NULL){
+ XRectangle lext;
+ #ifdef CF_DE_USE_XUTF8
+- if(ioncore_g.enc_utf8)
+- Xutf8TextExtents(font->fontset, text, len, NULL, &lext);
+- else
++ if(ioncore_g.enc_utf8)
++ Xutf8TextExtents(font->fontset, text, len, NULL, &lext);
++ else
+ #endif
+- XmbTextExtents(font->fontset, text, len, NULL, &lext);
+- return lext.width;
++ XmbTextExtents(font->fontset, text, len, NULL, &lext);
++ return lext.width;
+ }else if(font->fontstruct!=NULL){
+ return XTextWidth(font->fontstruct, text, len);
+ }else{
+ return 0;
+ }
++#else /* XFT */
++ if(font->font!=NULL){
++ XGlyphInfo extents;
++ if(ioncore_g.enc_utf8)
++ XftTextExtentsUtf8(ioncore_g.dpy, font->font, (XftChar8 *)text, len,
++ &extents);
++ else
++ XftTextExtents8(ioncore_g.dpy, font->font, (XftChar8 *)text, len,
++ &extents);
++ return extents.xOff;
++ }else{
++ return 0;
++ }
++#endif /* XFT */
+ }
+
+
+@@ -211,6 +270,7 @@
+ /*{{{ String drawing */
+
+
++#ifndef XFT
+ void debrush_do_draw_string_default(DEBrush *brush, int x, int y,
+ const char *str, int len, bool needfill,
+ DEColourGroup *colours)
+@@ -256,6 +316,41 @@
+ }
+ }
+
++#else /* XFT */
++void debrush_do_draw_string_default(DEBrush *brush,
++ int x, int y, const char *str,
++ int len, bool needfill,
++ DEColourGroup *colours)
++{
++ Window win = brush->win;
++ GC gc=brush->d->normal_gc;
++ XftDraw *draw;
++ XftFont *font;
++
++ if(brush->d->font==NULL)
++ return;
++
++ font=brush->d->font->font;
++ draw=debrush_get_draw(brush, win);
++
++ if(needfill){
++ XGlyphInfo extents;
++ if(ioncore_g.enc_utf8)
++ XftTextExtentsUtf8(ioncore_g.dpy, font, (XftChar8 *)str, len,
++ &extents);
++ else
++ XftTextExtents8(ioncore_g.dpy, font, (XftChar8 *)str, len, &extents);
++ XftDrawRect(draw, &(colours->bg), x-extents.x, y-extents.y,
++ extents.width+10, extents.height);
++ }
++
++ if(ioncore_g.enc_utf8)
++ XftDrawStringUtf8(draw, &(colours->fg), font, x, y, (XftChar8 *)str,
++ len);
++ else
++ XftDrawString8(draw, &(colours->fg), font, x, y, (XftChar8 *)str, len);
++}
++#endif /* XFT */
+
+ void debrush_do_draw_string(DEBrush *brush, int x, int y,
+ const char *str, int len, bool needfill,
+diff -Naur ../work/ion-3/de/font.h ion-3ds-20070203/de/font.h
+--- ../work/ion-3/de/font.h 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/font.h 2007-02-21 13:11:57.000000000 +0300
+@@ -14,6 +14,9 @@
+
+ #include <ioncore/common.h>
+ #include <ioncore/gr.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+
+ INTRSTRUCT(DEFont);
+
+@@ -29,6 +32,9 @@
+ int refcount;
+ XFontSet fontset;
+ XFontStruct *fontstruct;
++#ifdef XFT /* XFT */
++ XftFont *font;
++#endif /* XFT */
+ DEFont *next, *prev;
+ };
+
+diff -Naur ../work/ion-3/de/init.c ion-3ds-20070203/de/init.c
+--- ../work/ion-3/de/init.c 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/init.c 2007-02-21 13:11:57.000000000 +0300
+@@ -138,16 +138,19 @@
+ void de_get_colour_group(WRootWin *rootwin, DEColourGroup *cg,
+ ExtlTab tab, DEStyle *based_on)
+ {
+- de_get_colour(rootwin, &(cg->hl), tab, based_on, "highlight_colour",
+- DE_WHITE(rootwin));
+- de_get_colour(rootwin, &(cg->sh), tab, based_on, "shadow_colour",
+- DE_WHITE(rootwin));
+- de_get_colour(rootwin, &(cg->bg), tab, based_on, "background_colour",
+- DE_BLACK(rootwin));
+- de_get_colour(rootwin, &(cg->fg), tab, based_on, "foreground_colour",
+- DE_WHITE(rootwin));
+- de_get_colour(rootwin, &(cg->pad), tab, based_on, "padding_colour",
+- cg->bg);
++ DEColour black, white;
++#ifdef XFT
++ de_alloc_colour(rootwin, &black, "black");
++ de_alloc_colour(rootwin, &white, "white");
++#else
++ black=DE_BLACK(rootwin);
++ white=DE_WHITE(rootwin);
++#endif
++ de_get_colour(rootwin, &(cg->hl), tab, based_on, "highlight_colour", white);
++ de_get_colour(rootwin, &(cg->sh), tab, based_on, "shadow_colour", white);
++ de_get_colour(rootwin, &(cg->bg), tab, based_on, "background_colour", black);
++ de_get_colour(rootwin, &(cg->fg), tab, based_on, "foreground_colour", white);
++ de_get_colour(rootwin, &(cg->pad), tab, based_on, "padding_colour", cg->bg);
+ }
+
+
+diff -Naur ../work/ion-3/de/style.c ion-3ds-20070203/de/style.c
+--- ../work/ion-3/de/style.c 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/style.c 2007-02-21 13:11:57.000000000 +0300
+@@ -74,10 +74,17 @@
+ /*gcv.function=GXclear;*/
+ gcv.stipple=stipple_pixmap;
+ gcvmask=GCFillStyle|GCStipple/*|GCFunction*/;
++#ifndef XFT
+ if(style->font!=NULL && style->font->fontstruct!=NULL){
+ gcv.font=style->font->fontstruct->fid;
+ gcvmask|=GCFont;
+ }
++#else /* XFT */
++// if(style->font!=NULL){
++// gcv.font=style->font;
++// gcvmask|=GCFont;
++// }
++#endif /* XFT */
+
+ style->stipple_gc=XCreateGC(dpy, root, gcvmask, &gcv);
+ XCopyGC(dpy, style->normal_gc,
+@@ -205,6 +212,14 @@
+
+ bool destyle_init(DEStyle *style, WRootWin *rootwin, const char *name)
+ {
++ DEColour black, white;
++#ifdef XFT
++ de_alloc_colour(rootwin, &black, "black");
++ de_alloc_colour(rootwin, &white, "white");
++#else
++ black=DE_BLACK(rootwin);
++ white=DE_WHITE(rootwin);
++#endif /* XFT */
+ if(!gr_stylespec_load(&style->spec, name))
+ return FALSE;
+
+@@ -226,11 +241,11 @@
+ style->textalign=DEALIGN_CENTER;
+
+ style->cgrp_alloced=FALSE;
+- style->cgrp.bg=DE_BLACK(rootwin);
+- style->cgrp.pad=DE_BLACK(rootwin);
+- style->cgrp.fg=DE_WHITE(rootwin);
+- style->cgrp.hl=DE_WHITE(rootwin);
+- style->cgrp.sh=DE_WHITE(rootwin);
++ style->cgrp.bg=black;
++ style->cgrp.pad=black;
++ style->cgrp.fg=white;
++ style->cgrp.hl=white;
++ style->cgrp.sh=white;
+ gr_stylespec_init(&style->cgrp.spec);
+
+ style->font=NULL;
+diff -Naur ../work/ion-3/de/style.h ion-3ds-20070203/de/style.h
+--- ../work/ion-3/de/style.h 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/style.h 2007-02-21 13:11:57.000000000 +0300
+@@ -76,6 +76,7 @@
+ Pixmap tag_pixmap;
+ int tag_pixmap_w;
+ int tag_pixmap_h;
++ int xft_style;
+
+ DEStyle *next, *prev;
+ };
diff --git a/ion3/files/xft-ion3-20070506.patch b/ion3/files/xft-ion3-20070506.patch
new file mode 100644
index 0000000..0cff558
--- /dev/null
+++ b/ion3/files/xft-ion3-20070506.patch
@@ -0,0 +1,669 @@
+diff -Naur ../work/ion-3/de/brush.c ion-3ds-20070203/de/brush.c
+--- ../work/ion-3/de/brush.c 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/brush.c 2007-02-21 13:11:57.000000000 +0300
+@@ -47,6 +47,9 @@
+
+ gr_stylespec_init(&brush->current_attr);
+
++#ifdef XFT
++ brush->draw=NULL;
++#endif /* XFT */
+ style->usecount++;
+
+ if(!grbrush_init(&(brush->grbrush))){
+@@ -127,6 +130,10 @@
+ {
+ destyle_unref(brush->d);
+ brush->d=NULL;
++#ifdef XFT
++ if(brush->draw!=NULL)
++ XftDrawDestroy(brush->draw);
++#endif /* XFT */
+ gr_stylespec_unalloc(&brush->current_attr);
+ grbrush_deinit(&(brush->grbrush));
+ }
+@@ -138,6 +145,21 @@
+ }
+
+
++#ifdef XFT
++XftDraw *debrush_get_draw(DEBrush *brush, Drawable d)
++{
++ if(brush->draw==NULL)
++ brush->draw=XftDrawCreate(ioncore_g.dpy, d,
++ XftDEDefaultVisual(),
++ DefaultColormap(ioncore_g.dpy,
++ 0));
++ else
++ XftDrawChange(brush->draw, d);
++
++ return brush->draw;
++}
++#endif
++
+ /*}}}*/
+
+
+diff -Naur ../work/ion-3/de/brush.h ion-3ds-20070203/de/brush.h
+--- ../work/ion-3/de/brush.h 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/brush.h 2007-02-21 13:11:57.000000000 +0300
+@@ -17,6 +17,9 @@
+ #include <ioncore/common.h>
+ #include <ioncore/gr.h>
+ #include <ioncore/rectangle.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+
+ INTRCLASS(DEBrush);
+
+@@ -36,6 +39,9 @@
+ DECLCLASS(DEBrush){
+ GrBrush grbrush;
+ DEStyle *d;
++#ifdef XFT
++ XftDraw *draw;
++#endif
+ DEBrushExtrasFn *extras_fn;
+ int indicator_w;
+ Window win;
+@@ -111,5 +117,8 @@
+ extern void debrush_fill_area(DEBrush *brush, const WRectangle *geom);
+ extern void debrush_clear_area(DEBrush *brush, const WRectangle *geom);
+
++#ifdef XFT
++XftDraw *debrush_get_draw(DEBrush *brush, Drawable d);
++#endif
+
+ #endif /* ION_DE_BRUSH_H */
+diff -Naur ../work/ion-3/de/colour.c ion-3ds-20070203/de/colour.c
+--- ../work/ion-3/de/colour.c 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/colour.c 2007-02-21 13:11:57.000000000 +0300
+@@ -15,9 +15,21 @@
+
+ bool de_alloc_colour(WRootWin *rootwin, DEColour *ret, const char *name)
+ {
++#ifndef XFT
+ XColor c;
+ bool ok=FALSE;
++#else /* XFT */
++ if(name==NULL)
++ return FALSE;
++ return XftColorAllocName(
++ ioncore_g.dpy,
++ XftDEDefaultVisual(),
++ rootwin->default_cmap,
++ name,
++ ret);
++#endif /* XFT */
+
++#ifndef XFT
+ if(name==NULL)
+ return FALSE;
+
+@@ -28,11 +40,13 @@
+ }
+
+ return ok;
++#endif /* ! XFT */
+ }
+
+
+ bool de_duplicate_colour(WRootWin *rootwin, DEColour in, DEColour *out)
+ {
++#ifndef XFT
+ XColor c;
+ c.pixel=in;
+ XQueryColor(ioncore_g.dpy, rootwin->default_cmap, &c);
+@@ -41,11 +55,20 @@
+ return TRUE;
+ }
+ return FALSE;
++#else /* XFT */
++ return XftColorAllocName(
++ ioncore_g.dpy,
++ XftDEDefaultVisual(),
++ rootwin->default_cmap,
++ &(in.color),
++ out);
++#endif /* XFT */
+ }
+
+
+ void de_free_colour_group(WRootWin *rootwin, DEColourGroup *cg)
+ {
++#ifndef XFT
+ DEColour pixels[5];
+
+ pixels[0]=cg->bg;
+@@ -57,15 +80,26 @@
+ XFreeColors(ioncore_g.dpy, rootwin->default_cmap, pixels, 5, 0);
+
+ gr_stylespec_unalloc(&cg->spec);
++#else /* XFT */
++ de_free_colour(rootwin, cg->bg);
++ de_free_colour(rootwin, cg->fg);
++ de_free_colour(rootwin, cg->hl);
++ de_free_colour(rootwin, cg->sh);
++ de_free_colour(rootwin, cg->pad);
++#endif /* XFT */
+ }
+
+
+ void de_free_colour(WRootWin *rootwin, DEColour col)
+ {
++#ifndef XFT
+ DEColour pixels[1];
+
+ pixels[0]=col;
+
+ XFreeColors(ioncore_g.dpy, rootwin->default_cmap, pixels, 1, 0);
++#else /* XFT */
++ XftColorFree(ioncore_g.dpy, XftDEDefaultVisual(), rootwin->default_cmap, &col);
++#endif /* XFT */
+ }
+
+diff -Naur ../work/ion-3/de/colour.h ion-3ds-20070203/de/colour.h
+--- ../work/ion-3/de/colour.h 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/colour.h 2007-02-21 13:11:57.000000000 +0300
+@@ -15,12 +15,19 @@
+ #include <ioncore/common.h>
+ #include <ioncore/global.h>
+ #include <ioncore/rootwin.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+
+
+ INTRSTRUCT(DEColourGroup);
+
+
++#ifndef XFT
+ typedef unsigned long DEColour;
++#else /* XFT */
++typedef XftColor DEColour;
++#endif /* XFT */
+
+
+ DECLSTRUCT(DEColourGroup){
+@@ -37,5 +44,6 @@
+ bool de_duplicate_colour(WRootWin *rootwin, DEColour in, DEColour *out);
+ void de_free_colour_group(WRootWin *rootwin, DEColourGroup *cg);
+ void de_free_colour(WRootWin *rootwin, DEColour col);
++#define XftDEDefaultVisual() DefaultVisual(ioncore_g.dpy, 0)
+
+ #endif /* ION_DE_COLOUR_H */
+diff -Naur ../work/ion-3/de/draw.c ion-3ds-20070203/de/draw.c
+--- ../work/ion-3/de/draw.c 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/draw.c 2007-02-21 13:11:57.000000000 +0300
+@@ -22,6 +22,14 @@
+ #include <X11/extensions/shape.h>
+
+
++#ifndef XFT
++#define PIXEL(x) x
++#else /* XFT */
++#define PIXEL(x) x.pixel
++#endif /* XFT */
++
++
++
+ /*{{{ Colour group lookup */
+
+
+@@ -86,8 +94,7 @@
+ w--;
+ h--;
+
+- XSetForeground(ioncore_g.dpy, gc, tlc);
+-
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(tlc));
+
+ a=(br!=0);
+ b=0;
+@@ -104,9 +111,8 @@
+
+ XDrawLines(ioncore_g.dpy, win, gc, points, 3, CoordModeOrigin);
+ }
+-
+
+- XSetForeground(ioncore_g.dpy, gc, brc);
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(brc));
+
+ a=(tl!=0);
+ b=0;
+@@ -143,23 +143,23 @@
+ GrBorderLine line)
+ {
+ if(line==GR_BORDERLINE_LEFT && geom->h>0 && tl>0){
+- XSetForeground(ioncore_g.dpy, gc, tlc);
+- XSetBackground(ioncore_g.dpy, gc, tlc);
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(tlc));
++ XSetBackground(ioncore_g.dpy, gc, PIXEL(tlc));
+ XFillRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y, tl, geom->h);
+ geom->x+=tl;
+ }else if(line==GR_BORDERLINE_TOP && geom->w>0 && tl>0){
+- XSetForeground(ioncore_g.dpy, gc, tlc);
+- XSetBackground(ioncore_g.dpy, gc, tlc);
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(tlc));
++ XSetBackground(ioncore_g.dpy, gc, PIXEL(tlc));
+ XFillRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y, geom->w, tl);
+ geom->y+=tl;
+ }else if(line==GR_BORDERLINE_RIGHT && geom->h>0 && br>0){
+- XSetForeground(ioncore_g.dpy, gc, brc);
+- XSetBackground(ioncore_g.dpy, gc, brc);
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(brc));
++ XSetBackground(ioncore_g.dpy, gc, PIXEL(brc));
+ XFillRectangle(ioncore_g.dpy, win, gc, geom->x+geom->w-br, geom->y, br, geom->h);
+ geom->w-=br;
+ }else if(line==GR_BORDERLINE_BOTTOM && geom->w>0 && br>0){
+- XSetForeground(ioncore_g.dpy, gc, brc);
+- XSetBackground(ioncore_g.dpy, gc, brc);
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(brc));
++ XSetBackground(ioncore_g.dpy, gc, PIXEL(brc));
+ XFillRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y+geom->h-br, geom->w, br);
+ geom->h-=br;
+ }
+@@ -293,7 +299,7 @@
+ }
+
+ if(ISSET(a2, GR_ATTR(tagged)) || ISSET(a1, GR_ATTR(tagged))){
+- XSetForeground(ioncore_g.dpy, d->copy_gc, cg->fg);
++ XSetForeground(ioncore_g.dpy, d->copy_gc, PIXEL(cg->fg));
+
+ copy_masked(brush, d->tag_pixmap, brush->win, 0, 0,
+ d->tag_pixmap_w, d->tag_pixmap_h,
+@@ -348,7 +354,7 @@
+ GC gc=brush->d->normal_gc;
+
+ if(TRUE/*needfill*/){
+- XSetForeground(ioncore_g.dpy, gc, cg->bg);
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(cg->bg));
+ XFillRectangle(ioncore_g.dpy, brush->win, gc, geom->x, geom->y,
+ geom->w, geom->h);
+ }
+@@ -513,7 +519,7 @@
+ attr.background_pixmap=ParentRelative;
+ }else{
+ attrflags=CWBackPixel;
+- attr.background_pixel=brush->d->cgrp.bg;
++ attr.background_pixel=brush->d->PIXEL(cgrp.bg);
+ }
+
+ XChangeWindowAttributes(ioncore_g.dpy, brush->win, attrflags, &attr);
+@@ -529,7 +535,7 @@
+ if(cg==NULL)
+ return;
+
+- XSetForeground(ioncore_g.dpy, gc, cg->bg);
++ XSetForeground(ioncore_g.dpy, gc, PIXEL(cg->bg));
+ XFillRectangle(ioncore_g.dpy, brush->win, gc,
+ geom->x, geom->y, geom->w, geom->h);
+ }
+diff -Naur ../work/ion-3/de/font.c ion-3ds-20070203/de/font.c
+--- ../work/ion-3/de/font.c 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/font.c 2007-02-21 13:11:57.000000000 +0300
+@@ -14,7 +14,9 @@
+ #include <libtu/objp.h>
+ #include <ioncore/common.h>
+ #include "font.h"
++#ifndef XFT
+ #include "fontset.h"
++#endif /* ! XFT */
+ #include "brush.h"
+
+
+@@ -26,6 +28,9 @@
+
+ DEFont *de_load_font(const char *fontname)
+ {
++#ifdef XFT
++ XftFont *font;
++#endif
+ DEFont *fnt;
+ XFontSet fontset=NULL;
+ XFontStruct *fontstruct=NULL;
+@@ -40,6 +45,7 @@
+ }
+ }
+
++#ifndef XFT
+ if(ioncore_g.use_mb){
+ fontset=de_create_font_set(fontname);
+ if(fontset!=NULL){
+@@ -66,13 +72,34 @@
+ return NULL;
+ }
+
++#else /* XFT */
++ if(strncmp(fontname, "xft:", 4)==0){
++ font=XftFontOpenName(ioncore_g.dpy, DefaultScreen(ioncore_g.dpy),
++ fontname+4);
++ }else{
++ font=XftFontOpenXlfd(ioncore_g.dpy, DefaultScreen(ioncore_g.dpy), fontname);
++ }
++
++ if(font==NULL){
++ if(strcmp(fontname, CF_FALLBACK_FONT_NAME)!=0){
++ warn(TR("Could not load font \"%s\", trying \"%s\""),
++ fontname, CF_FALLBACK_FONT_NAME);
++ return de_load_font(CF_FALLBACK_FONT_NAME);
++ }
++ return NULL;
++ }
++#endif /* XFT */
+ fnt=ALLOC(DEFont);
+
+ if(fnt==NULL)
+ return NULL;
+
++#ifndef XFT
+ fnt->fontset=fontset;
+ fnt->fontstruct=fontstruct;
++#else
++ fnt->font=font;
++#endif
+ fnt->pattern=scopy(fontname);
+ fnt->next=NULL;
+ fnt->prev=NULL;
+@@ -92,11 +119,13 @@
+ style->font=font;
+ font->refcount++;
+
++#ifndef XFT
+ if(style->font->fontstruct!=NULL){
+ XSetFont(ioncore_g.dpy, style->normal_gc,
+ style->font->fontstruct->fid);
+ }
+
++#endif /* ! XFT */
+ return TRUE;
+ }
+
+@@ -111,11 +140,13 @@
+ if(style->font==NULL)
+ return FALSE;
+
++#ifndef XFT
+ if(style->font->fontstruct!=NULL){
+ XSetFont(ioncore_g.dpy, style->normal_gc,
+ style->font->fontstruct->fid);
+ }
+
++#endif /* ! XFT */
+ return TRUE;
+ }
+
+@@ -125,10 +156,15 @@
+ if(--font->refcount!=0)
+ return;
+
++#ifndef XFT
+ if(font->fontset!=NULL)
+ XFreeFontSet(ioncore_g.dpy, font->fontset);
+ if(font->fontstruct!=NULL)
+ XFreeFont(ioncore_g.dpy, font->fontstruct);
++#else /* XFT */
++ if(font->font!=NULL)
++ XftFontClose(ioncore_g.dpy, font->font);
++#endif /* XFT */
+ if(font->pattern!=NULL)
+ free(font->pattern);
+
+@@ -156,6 +192,7 @@
+
+ void defont_get_font_extents(DEFont *font, GrFontExtents *fnte)
+ {
++#ifndef XFT
+ if(font->fontset!=NULL){
+ XFontSetExtents *ext=XExtentsOfFontSet(font->fontset);
+ if(ext==NULL)
+@@ -171,7 +208,14 @@
+ fnte->baseline=fnt->ascent;
+ return;
+ }
+-
++#else /* XFT */
++ if(font->font!=NULL){
++ fnte->max_height=font->font->ascent+font->font->descent;
++ fnte->max_width=font->font->max_advance_width;
++ fnte->baseline=font->font->ascent;
++ return;
++ }
++#endif /* XFT */
+ fail:
+ DE_RESET_FONT_EXTENTS(fnte);
+ }
+@@ -188,20 +232,35 @@
+
+ uint defont_get_text_width(DEFont *font, const char *text, uint len)
+ {
++#ifndef XFT
+ if(font->fontset!=NULL){
+ XRectangle lext;
+ #ifdef CF_DE_USE_XUTF8
+- if(ioncore_g.enc_utf8)
+- Xutf8TextExtents(font->fontset, text, len, NULL, &lext);
+- else
++ if(ioncore_g.enc_utf8)
++ Xutf8TextExtents(font->fontset, text, len, NULL, &lext);
++ else
+ #endif
+- XmbTextExtents(font->fontset, text, len, NULL, &lext);
+- return lext.width;
++ XmbTextExtents(font->fontset, text, len, NULL, &lext);
++ return lext.width;
+ }else if(font->fontstruct!=NULL){
+ return XTextWidth(font->fontstruct, text, len);
+ }else{
+ return 0;
+ }
++#else /* XFT */
++ if(font->font!=NULL){
++ XGlyphInfo extents;
++ if(ioncore_g.enc_utf8)
++ XftTextExtentsUtf8(ioncore_g.dpy, font->font, (XftChar8 *)text, len,
++ &extents);
++ else
++ XftTextExtents8(ioncore_g.dpy, font->font, (XftChar8 *)text, len,
++ &extents);
++ return extents.xOff;
++ }else{
++ return 0;
++ }
++#endif /* XFT */
+ }
+
+
+@@ -211,6 +270,7 @@
+ /*{{{ String drawing */
+
+
++#ifndef XFT
+ void debrush_do_draw_string_default(DEBrush *brush, int x, int y,
+ const char *str, int len, bool needfill,
+ DEColourGroup *colours)
+@@ -256,6 +316,41 @@
+ }
+ }
+
++#else /* XFT */
++void debrush_do_draw_string_default(DEBrush *brush,
++ int x, int y, const char *str,
++ int len, bool needfill,
++ DEColourGroup *colours)
++{
++ Window win = brush->win;
++ GC gc=brush->d->normal_gc;
++ XftDraw *draw;
++ XftFont *font;
++
++ if(brush->d->font==NULL)
++ return;
++
++ font=brush->d->font->font;
++ draw=debrush_get_draw(brush, win);
++
++ if(needfill){
++ XGlyphInfo extents;
++ if(ioncore_g.enc_utf8)
++ XftTextExtentsUtf8(ioncore_g.dpy, font, (XftChar8 *)str, len,
++ &extents);
++ else
++ XftTextExtents8(ioncore_g.dpy, font, (XftChar8 *)str, len, &extents);
++ XftDrawRect(draw, &(colours->bg), x-extents.x, y-extents.y,
++ extents.width+10, extents.height);
++ }
++
++ if(ioncore_g.enc_utf8)
++ XftDrawStringUtf8(draw, &(colours->fg), font, x, y, (XftChar8 *)str,
++ len);
++ else
++ XftDrawString8(draw, &(colours->fg), font, x, y, (XftChar8 *)str, len);
++}
++#endif /* XFT */
+
+ void debrush_do_draw_string(DEBrush *brush, int x, int y,
+ const char *str, int len, bool needfill,
+diff -Naur ../work/ion-3/de/font.h ion-3ds-20070203/de/font.h
+--- ../work/ion-3/de/font.h 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/font.h 2007-02-21 13:11:57.000000000 +0300
+@@ -14,6 +14,9 @@
+
+ #include <ioncore/common.h>
+ #include <ioncore/gr.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+
+ INTRSTRUCT(DEFont);
+
+@@ -29,6 +32,9 @@
+ int refcount;
+ XFontSet fontset;
+ XFontStruct *fontstruct;
++#ifdef XFT /* XFT */
++ XftFont *font;
++#endif /* XFT */
+ DEFont *next, *prev;
+ };
+
+diff -Naur ../work/ion-3/de/init.c ion-3ds-20070203/de/init.c
+--- ../work/ion-3/de/init.c 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/init.c 2007-02-21 13:11:57.000000000 +0300
+@@ -165,17 +165,26 @@
+ {
+ bool bgset;
+ DEColour padinh;
+-
++ DEColour black, white;
++
++#ifdef XFT
++ de_alloc_colour(rootwin, &black, "black");
++ de_alloc_colour(rootwin, &white, "white");
++#else
++ black=DE_BLACK(rootwin);
++ white=DE_WHITE(rootwin);
++#endif
++
+ de_get_colour(rootwin, &(cg->hl), tab, "highlight_colour",
+- (based_on ? based_on->cgrp.hl : DE_WHITE(rootwin)));
++ (based_on ? based_on->cgrp.hl : white));
+ de_get_colour(rootwin, &(cg->sh), tab, "shadow_colour",
+- (based_on ? based_on->cgrp.sh : DE_WHITE(rootwin)));
++ (based_on ? based_on->cgrp.sh : white));
+ de_get_colour(rootwin, &(cg->fg), tab, "foreground_colour",
+- (based_on ? based_on->cgrp.fg : DE_WHITE(rootwin)));
++ (based_on ? based_on->cgrp.fg : white));
+ bgset=de_get_colour(rootwin, &(cg->bg), tab, "background_colour",
+- (based_on ? based_on->cgrp.bg : DE_BLACK(rootwin)));
++ (based_on ? based_on->cgrp.bg : black));
+
+- padinh=(based_on ? based_on->cgrp.pad : DE_WHITE(rootwin));
++ padinh=(based_on ? based_on->cgrp.pad : white);
+
+ de_get_colour_(rootwin, &(cg->pad), tab, "padding_colour",
+ (bgset ? cg->bg : padinh), padinh);
+diff -Naur ../work/ion-3/de/style.c ion-3ds-20070203/de/style.c
+--- ../work/ion-3/de/style.c 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/style.c 2007-02-21 13:11:57.000000000 +0300
+@@ -74,10 +74,17 @@
+ /*gcv.function=GXclear;*/
+ gcv.stipple=stipple_pixmap;
+ gcvmask=GCFillStyle|GCStipple/*|GCFunction*/;
++#ifndef XFT
+ if(style->font!=NULL && style->font->fontstruct!=NULL){
+ gcv.font=style->font->fontstruct->fid;
+ gcvmask|=GCFont;
+ }
++#else /* XFT */
++// if(style->font!=NULL){
++// gcv.font=style->font;
++// gcvmask|=GCFont;
++// }
++#endif /* XFT */
+
+ style->stipple_gc=XCreateGC(dpy, root, gcvmask, &gcv);
+ XCopyGC(dpy, style->normal_gc,
+@@ -205,6 +212,14 @@
+
+ bool destyle_init(DEStyle *style, WRootWin *rootwin, const char *name)
+ {
++ DEColour black, white;
++#ifdef XFT
++ de_alloc_colour(rootwin, &black, "black");
++ de_alloc_colour(rootwin, &white, "white");
++#else
++ black=DE_BLACK(rootwin);
++ white=DE_WHITE(rootwin);
++#endif /* XFT */
+ if(!gr_stylespec_load(&style->spec, name))
+ return FALSE;
+
+@@ -226,11 +241,11 @@
+ style->textalign=DEALIGN_CENTER;
+
+ style->cgrp_alloced=FALSE;
+- style->cgrp.bg=DE_BLACK(rootwin);
+- style->cgrp.pad=DE_BLACK(rootwin);
+- style->cgrp.fg=DE_WHITE(rootwin);
+- style->cgrp.hl=DE_WHITE(rootwin);
+- style->cgrp.sh=DE_WHITE(rootwin);
++ style->cgrp.bg=black;
++ style->cgrp.pad=black;
++ style->cgrp.fg=white;
++ style->cgrp.hl=white;
++ style->cgrp.sh=white;
+ gr_stylespec_init(&style->cgrp.spec);
+
+ style->font=NULL;
+diff -Naur ../work/ion-3/de/style.h ion-3ds-20070203/de/style.h
+--- ../work/ion-3/de/style.h 2007-02-03 17:50:52.000000000 +0300
++++ ion-3ds-20070203/de/style.h 2007-02-21 13:11:57.000000000 +0300
+@@ -76,6 +76,7 @@
+ Pixmap tag_pixmap;
+ int tag_pixmap_w;
+ int tag_pixmap_h;
++ int xft_style;
+
+ DEStyle *next, *prev;
+ };
+--- ../work/ion-3/system.mk 2007-05-10 22:45:16.000000000 +0400
++++ ion-3ds-20070203/system.mk 2007-05-10 22:45:07.000000000 +0400
+@@ -115,6 +115,16 @@
+ #EXTRA_LIBS += -lintl
+ #EXTRA_INCLUDES +=
+
++##
++## Xft support
++##
++
++#USE_XFT=1
++
++ifeq ($(USE_XFT),1)
++EXTRA_INCLUDES += `xft-config --cflags` -DXFT
++EXTRA_LIBS += `xft-config --libs`
++endif
+
+ ##
+ ## C compiler
diff --git a/ion3/ion3-20060326.ebuild b/ion3/ion3-20060326.ebuild
new file mode 100644
index 0000000..2ee0294
--- /dev/null
+++ b/ion3/ion3-20060326.ebuild
@@ -0,0 +1,84 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/x11-wm/ion3/ion3-20060326.ebuild,v 1.4 2007/06/05 13:29:53 mabi Exp $
+
+inherit eutils
+
+MY_PV=${PV/_p/-}
+MY_PN=ion-3ds-${MY_PV}
+DESCRIPTION="A tiling tabbed window manager designed with keyboard users in mind"
+HOMEPAGE="http://www.iki.fi/tuomov/ion/"
+SRC_URI="http://modeemi.cs.tut.fi/~tuomov/ion/dl/${MY_PN}.tar.gz"
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+IUSE="ion3-voidupstreamsupport-truetype xinerama"
+DEPEND="
+ || (
+ (
+ x11-libs/libICE
+ x11-libs/libSM
+ x11-libs/libXext
+ ion3-voidupstreamsupport-truetype? ( x11-libs/libXft )
+ xinerama? ( x11-libs/libXinerama )
+ )
+ virtual/x11
+ )
+ app-misc/run-mailcap
+ =dev-lang/lua-5.0*"
+S=${WORKDIR}/${MY_PN}
+
+src_unpack() {
+ unpack ${A}
+ use ion3-voidupstreamsupport-truetype && epatch ${FILESDIR}/ion3-20060326-truetype.patch
+}
+
+src_compile() {
+
+ autoreconf -i
+
+ local myconf=""
+
+ if has_version '>=x11-base/xfree-4.3.0'; then
+ myconf="${myconf} --disable-xfree86-textprop-bug-workaround"
+ fi
+
+ use hppa && myconf="${myconf} --disable-shared"
+
+ econf \
+ --sysconfdir=/etc/X11 \
+ `use_enable ion3-voidupstreamsupport-truetype xft` \
+ `use_enable xinerama` \
+ ${myconf} || die
+
+ make \
+ DOCDIR=/usr/share/doc/${PF} || die
+
+}
+
+src_install() {
+
+ make \
+ prefix=${D}/usr \
+ ETCDIR=${D}/etc/X11/ion3 \
+ SHAREDIR=${D}/usr/share/ion3 \
+ MANDIR=${D}/usr/share/man \
+ DOCDIR=${D}/usr/share/doc/${PF} \
+ LOCALEDIR=${D}/usr/share/locale \
+ LIBDIR=${D}/usr/lib \
+ MODULEDIR=${D}/usr/lib/ion3/mod \
+ LCDIR=${D}/usr/lib/ion3/lc \
+ VARDIR=${D}/var/cache/ion3 \
+ install || die
+
+ prepalldocs
+
+ echo -e "#!/bin/sh\n/usr/bin/ion3" > ${T}/ion3
+ echo -e "#!/bin/sh\n/usr/bin/pwm3" > ${T}/pwm3
+ exeinto /etc/X11/Sessions
+ doexe ${T}/ion3 ${T}/pwm3
+
+ insinto /usr/share/xsessions
+ doins ${FILESDIR}/ion3.desktop ${FILESDIR}/pwm3.desktop
+
+}
diff --git a/ion3/ion3-20061223.ebuild b/ion3/ion3-20061223.ebuild
new file mode 100644
index 0000000..a261c83
--- /dev/null
+++ b/ion3/ion3-20061223.ebuild
@@ -0,0 +1,175 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/x11-wm/ion3/ion3-20061223.ebuild,v 1.6 2007/06/05 13:29:53 mabi Exp $
+
+inherit autotools eutils
+
+MY_PV=${PV/_p/-}
+MY_PN=ion-3ds-${MY_PV}
+
+SCRIPTS_PV=20061214
+SCRIPTS_PN=ion3-scripts
+
+IONFLUX_PV=20061022
+IONFLUX_PN=ion3-mod-ionflux
+
+IONXRANDR_PV=20061021
+IONXRANDR_PN=ion3-mod-xrandr
+
+
+DESCRIPTION="A tiling tabbed window manager designed with keyboard users in mind"
+HOMEPAGE="http://www.iki.fi/tuomov/ion/"
+SRC_URI="http://iki.fi/tuomov/dl/${MY_PN}.tar.gz
+ mirror://debian/pool/main/i/${SCRIPTS_PN}/${SCRIPTS_PN}_${SCRIPTS_PV}.orig.tar.gz
+ mirror://debian/pool/main/i/${IONFLUX_PN}/${IONFLUX_PN}_${IONFLUX_PV}.orig.tar.gz
+ mirror://gentoo/${IONXRANDR_PN}-${IONXRANDR_PV}.tar.bz2
+ ion3-voidupstreamsupport-truetype? (
+ http://clemens.endorphin.org/patches/xft-ion3-for-darcs-20061202.diff )"
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+IUSE="xinerama unicode ion3-voidupstreamsupport-truetype"
+DEPEND="
+ || (
+ (
+ x11-libs/libICE
+ x11-libs/libXext
+ x11-libs/libSM
+ ion3-voidupstreamsupport-truetype? ( x11-libs/libXft )
+ xinerama? ( x11-libs/libXinerama )
+ )
+ virtual/x11
+ )
+ app-misc/run-mailcap
+ >=dev-lang/lua-5.1.1"
+S=${WORKDIR}/${MY_PN}
+
+SCRIPTS_DIRS="keybindings scripts statusbar statusd styles"
+
+src_unpack() {
+ unpack ${A}
+ cd ${S}
+ EPATCH_SOURCE="${FILESDIR}/${PV}" EPATCH_SUFFIX="patch" epatch
+
+# use ion3-voidupstreamsupport-truetype && epatch ${DISTDIR}/xft-ion3-for-darcs-20061202.diff
+ use ion3-voidupstreamsupport-truetype && patch -p1 < ${DISTDIR}/xft-ion3-for-darcs-20061202.diff
+
+ # Rewrite install directories to be prefixed by DESTDIR for sake of portage's sandbox
+ sed -i Makefile */Makefile */*/Makefile build/rules.mk \
+ -e 's!\($(INSTALL\w*)\|rm -f\|ln -s\)\(.*\)\($(\w\+DIR)\)!\1\2$(DESTDIR)\3!g'
+
+ for i in "${IONFLUX_PN}-${IONFLUX_PV}" "${IONXRANDR_PN}-${IONXRANDR_PV}"
+ do
+ cd ${WORKDIR}/${i}
+ # Rewrite install directories to be prefixed by DESTDIR for sake of portage's sandbox
+ sed -i Makefile */Makefile \
+ -e 's!\($(INSTALL\w*)\|rm -f\|ln -s\)\(.*\)\($(\w\+DIR)\)!\1\2$(DESTDIR)\3!g'
+ done
+ cd ${S}
+
+ # Hey guys! Implicit rules apply to include statements also. Be more careful!
+ # Fix an implicit rule that will kill the installation by rewriting a .mk
+ # should configure be given just the right set of options.
+ sed -i 's!%: %.in!ion-completeman: %: %.in!g' utils/Makefile
+
+ cd ${S}/build/ac/
+ # for the first instance of DEFINES, add XINERAMA
+ use xinerama && \
+ (
+ sed -i 's!\(DEFINES *+=\)!\1 -DCF_XINERAMA !' system-ac.mk.in
+ sed -i 's!\(LIBS="$LIBS.*\)"!\1 $XINERAMA_LIBS"!' configure.ac
+ )
+
+ cd ${S}/build/ac/
+ eautoreconf
+
+ # FIX for modules
+ cd ${WORKDIR}
+ ln -s ${MY_PN} ion-3
+}
+
+src_compile() {
+ local myconf=""
+
+ myconf="${myconf} `use_enable ion3-voidupstreamsupport-truetype xft`"
+
+ # xfree
+ if has_version '>=x11-base/xfree-4.3.0'; then
+ myconf="${myconf} --disable-xfree86-textprop-bug-workaround"
+ fi
+
+ # help out this arch as it can't handle certain shared library linkage
+ use hppa && myconf="${myconf} --disable-shared"
+
+ # unicode support
+ use unicode && myconf="${myconf} --enable-Xutf8"
+
+ # configure bug, only specify xinerama to not have it
+ myconf="${myconf} `use_enable xinerama`"
+
+ cd build/ac/
+# ${S}/build/ac/configure \
+ econf \
+ ${myconf} \
+ --sysconfdir=/etc/X11 \
+ --with-lua-prefix=/usr
+
+ cd ${S}
+ make \
+ DOCDIR=/usr/share/doc/${PF} || die
+
+ for i in "${IONFLUX_PN}-${IONFLUX_PV}" "${IONXRANDR_PN}-${IONXRANDR_PV}" ; do
+ cd ${WORKDIR}/${i}
+
+ emake \
+ prefix=/usr \
+ ETCDIR=/etc/X11/ion3 \
+ SHAREDIR=/usr/share/ion3 \
+ MANDIR=/usr/share/man \
+ DOCDIR=/usr/share/doc/${PF} \
+ LOCALEDIR=/usr/share/locale \
+ LIBDIR=/usr/lib \
+ MODULEDIR=/usr/lib/ion3/mod \
+ LCDIR=/usr/lib/ion3/lc \
+ VARDIR=/var/cache/ion3
+ done
+}
+
+src_install() {
+
+ emake \
+ DESTDIR=${D} \
+ install || die
+
+ prepalldocs
+
+ echo -e "#!/bin/sh\n/usr/bin/ion3" > ${T}/ion3
+ echo -e "#!/bin/sh\n/usr/bin/pwm3" > ${T}/pwm3
+ exeinto /etc/X11/Sessions
+ doexe ${T}/ion3 ${T}/pwm3
+
+ insinto /usr/share/xsessions
+ doins ${FILESDIR}/ion3.desktop ${FILESDIR}/pwm3.desktop
+
+ cd ${WORKDIR}/${SCRIPTS_PN}-${SCRIPTS_PV}
+ insinto /usr/share/ion3
+ find $SCRIPTS_DIRS -type f |\
+ while read FILE ; do
+ doins $PWD/$FILE
+ done
+
+# dodir /usr/share/ion3
+# cp -R * ${D}/usr/share/ion3
+
+ for i in "${IONFLUX_PN}-${IONFLUX_PV}" "${IONXRANDR_PN}-${IONXRANDR_PV}" ; do
+ cd ${WORKDIR}/${i}
+
+ emake \
+ DESTDIR=${D} \
+ install || die
+
+ done
+
+ echo '--dopath("mod_ionflux")' >> ${D}/etc/X11/ion3/cfg_modules.lua
+ echo 'dopath("mod_xrandr")' >> ${D}/etc/X11/ion3/cfg_modules.lua
+}
diff --git a/ion3/ion3-20070318-r2.ebuild b/ion3/ion3-20070318-r2.ebuild
new file mode 100644
index 0000000..bda0a67
--- /dev/null
+++ b/ion3/ion3-20070318-r2.ebuild
@@ -0,0 +1,190 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/x11-wm/ion3/ion3-20070318-r2.ebuild,v 1.2 2007/06/05 13:29:53 mabi Exp $
+
+inherit eutils flag-o-matic
+
+MY_PV=${PV/_p/-}
+MY_PN=ion-3ds-${MY_PV}
+
+SCRIPTS_PV=20070322
+SCRIPTS_PN=ion3-scripts
+
+IONFLUX_PV=20061022
+IONFLUX_PN=ion3-mod-ionflux
+
+IONXRANDR_PV=20070220
+IONXRANDR_PN=ion3-mod-xrandr
+
+IONDOC_PV=20070318
+IONDOC_PN=ion3-doc
+
+
+DESCRIPTION="A tiling tabbed window manager designed with keyboard users in mind"
+HOMEPAGE="http://www.iki.fi/tuomov/ion/"
+SRC_URI="http://iki.fi/tuomov/dl/${MY_PN}.tar.gz
+ mirror://gentoo/${SCRIPTS_PN}-${SCRIPTS_PV}.tar.bz2
+ mirror://gentoo/${IONXRANDR_PN}-${IONXRANDR_PV}.tar.bz2
+ doc? ( mirror://gentoo/${IONDOC_PN}-${IONDOC_PV}.tar.bz2 )"
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+IUSE="unicode ion3-voidupstreamsupport-truetype doc"
+DEPEND="
+ || (
+ (
+ x11-libs/libICE
+ x11-libs/libXext
+ x11-libs/libSM
+ ion3-voidupstreamsupport-truetype? ( x11-libs/libXft )
+ )
+ virtual/x11
+ )
+ dev-util/pkgconfig
+ app-misc/run-mailcap
+ >=dev-lang/lua-5.1.1
+ doc? ( dev-tex/latex2html
+ virtual/tetex )"
+
+S=${WORKDIR}/${MY_PN}
+
+SCRIPTS_DIRS="keybindings scripts statusbar statusd styles"
+MODULES="${IONXRANDR_PN}-${IONXRANDR_PV}"
+
+src_unpack() {
+ unpack ${A}
+
+ cd ${S}
+ EPATCH_SOURCE="${FILESDIR}/${PV}" EPATCH_SUFFIX="patch" epatch
+ use ion3-voidupstreamsupport-truetype && epatch ${FILESDIR}/xft-ion3-${PV}.patch
+
+ # Rewrite install directories to be prefixed by DESTDIR for sake of portage's sandbox
+ sed -i 's!\($(INSTALL\w*)\|rm -f\|ln -s\)\(.*\)\($(\w\+DIR)\)!\1\2$(DESTDIR)\3!g' Makefile */Makefile */*/Makefile build/rules.mk
+
+ for i in ${MODULES}
+ do
+ cd ${WORKDIR}/${i}
+ # Rewrite install directories to be prefixed by DESTDIR for sake of portage's sandbox
+ sed -i Makefile */Makefile \
+ -e 's!\($(INSTALL\w*)\|rm -f\|ln -s\)\(.*\)\($(\w\+DIR)\)!\1\2$(DESTDIR)\3!g'
+
+ done
+ cd ${S}
+
+ # Hey guys! Implicit rules apply to include statements also. Be more careful!
+ # Fix an implicit rule that will kill the installation by rewriting a .mk
+ # should configure be given just the right set of options.
+ sed -i 's!%: %.in!ion-completeman: %: %.in!g' utils/Makefile
+
+ # Fix prestripping of files
+ sed -i mod_statusbar/ion-statusd/Makefile utils/ion-completefile/Makefile \
+ -e 's: -s::'
+
+ # Fix the docpath
+ #sed -i system.mk build/ac/system-ac.mk.in \
+ # -e "s:\(DOCDIR=@datadir@/doc/\)@PACKAGE_TARNAME@:\1${PF}:"
+
+ cd ${S}/build/ac/
+ autoreconf -i --force
+
+ # FIX for modules
+ cd ${WORKDIR}
+ ln -s ${MY_PN} ion-3
+}
+
+src_compile() {
+ local myconf=""
+
+ myconf="${myconf} `use_enable ion3-voidupstreamsupport-truetype xft`"
+
+ # xfree
+ if has_version '>=x11-base/xfree-4.3.0'; then
+ myconf="${myconf} --disable-xfree86-textprop-bug-workaround"
+ fi
+
+ # help out this arch as it can't handle certain shared library linkage
+ use hppa && myconf="${myconf} --disable-shared"
+
+ # unicode support
+ use unicode && myconf="${myconf} --enable-Xutf8"
+
+ cd build/ac/
+ econf \
+ ${myconf} \
+ --sysconfdir=/etc/X11 \
+
+ cd ${S}
+ make \
+ DOCDIR=/usr/share/doc/${PF} || die
+
+ for i in ${MODULES}
+ do
+ cd ${WORKDIR}/${i}
+
+ emake \
+ prefix=/usr \
+ ETCDIR=/etc/X11/ion3 \
+ SHAREDIR=/usr/share/ion3 \
+ MANDIR=/usr/share/man \
+ DOCDIR=/usr/share/doc/${PF} \
+ LOCALEDIR=/usr/share/locale \
+ LIBDIR=/usr/lib \
+ MODULEDIR=/usr/lib/ion3/mod \
+ LCDIR=/usr/lib/ion3/lc \
+ VARDIR=/var/cache/ion3
+ done
+
+ if ( use doc )
+ then
+ cd ${WORKDIR}/${IONDOC_PN}-${IONDOC_PV}
+ make all
+ make all-pdf
+ fi
+}
+
+src_install() {
+
+ emake \
+ DESTDIR=${D} \
+ DOCDIR=/usr/share/doc/${PF} \
+ install || die
+
+ echo -e "#!/bin/sh\n/usr/bin/ion3" > ${T}/ion3
+ echo -e "#!/bin/sh\n/usr/bin/pwm3" > ${T}/pwm3
+ exeinto /etc/X11/Sessions
+ doexe ${T}/ion3 ${T}/pwm3
+
+ insinto /usr/share/xsessions
+ doins ${FILESDIR}/ion3.desktop ${FILESDIR}/pwm3.desktop
+
+ cd ${WORKDIR}/${SCRIPTS_PN}-${SCRIPTS_PV}
+ insinto /usr/share/ion3
+ find $SCRIPTS_DIRS -type f |\
+ while read FILE
+ do
+ doins $PWD/$FILE
+ done
+
+ for i in ${MODULES}
+ do
+ cd ${WORKDIR}/${i}
+
+ emake \
+ DESTDIR=${D} \
+ install || die
+
+ done
+
+ if ( use doc )
+ then
+ cd ${WORKDIR}/${IONDOC_PN}-${IONDOC_PV}
+ dodoc *.pdf
+ fi
+
+ sed -i -e '/dopath("mod_sp")/a\dopath("mod_xrandr")' ${D}/etc/X11/ion3/cfg_defaults.lua
+}
+
+pkg_postinst() {
+ elog "This version of ion3 contains no xinerama support (removed upstream)."
+}
diff --git a/ion3/ion3-20070506-r1.ebuild b/ion3/ion3-20070506-r1.ebuild
new file mode 100644
index 0000000..aa230f3
--- /dev/null
+++ b/ion3/ion3-20070506-r1.ebuild
@@ -0,0 +1,195 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/x11-wm/ion3/ion3-20070506-r1.ebuild,v 1.3 2007/06/03 15:08:02 mabi Exp $
+
+inherit eutils flag-o-matic
+
+MY_PV=${PV/_p/-}
+MY_PN=ion-3rc-${MY_PV}
+
+SCRIPTS_PV=20070510
+SCRIPTS_PN=ion3-scripts
+
+IONFLUX_PV=20070512
+IONFLUX_PN=ion3-mod-ionflux
+
+IONXRANDR_PV=20070410
+IONXRANDR_PN=ion3-mod-xrandr
+
+IONDOC_PV=20070506
+IONDOC_PN=ion-doc-3rc
+
+DESCRIPTION="A tiling tabbed window manager designed with keyboard users in mind"
+HOMEPAGE="http://www.iki.fi/tuomov/ion/"
+SRC_URI="http://iki.fi/tuomov/dl/${MY_PN}.tar.gz
+ mirror://gentoo/${SCRIPTS_PN}-${SCRIPTS_PV}.tar.bz2
+ mirror://gentoo/${IONXRANDR_PN}-${IONXRANDR_PV}.tar.bz2
+ mirror://gentoo/${IONFLUX_PN}-${IONFLUX_PV}.tar.bz2
+ doc? ( http://iki.fi/tuomov/dl/${IONDOC_PN}-${IONDOC_PV}.tar.gz )"
+
+LICENSE="LGPL-2.1+tuomov"
+SLOT="0"
+KEYWORDS="~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+IUSE="unicode ion3-voidupstreamsupport-truetype doc"
+DEPEND="
+ || (
+ (
+ x11-libs/libICE
+ x11-libs/libXext
+ x11-libs/libSM
+ ion3-voidupstreamsupport-truetype? ( x11-libs/libXft )
+ )
+ virtual/x11
+ )
+ dev-util/pkgconfig
+ app-misc/run-mailcap
+ >=dev-lang/lua-5.1.1
+ doc? ( dev-tex/latex2html
+ virtual/tetex )"
+
+S=${WORKDIR}/${MY_PN}
+
+SCRIPTS_DIRS="keybindings scripts statusbar statusd styles"
+MODULES="${IONXRANDR_PN}-${IONXRANDR_PV} ${IONFLUX_PN}-${IONFLUX_PV}"
+
+src_unpack() {
+ unpack ${A}
+
+ cd ${S}
+ EPATCH_SOURCE="${FILESDIR}/${PV}" EPATCH_SUFFIX="patch" epatch
+ if (use ion3-voidupstreamsupport-truetype); then
+ epatch ${FILESDIR}/xft-ion3-${PV}.patch
+
+ sed -i -e "s:#USE_XFT=1:USE_XFT=1:" ${S}/system.mk
+ sed -i -e 's:\(#define ION_VERSION
+ "3rc-20070506\):\1-voidupstreamsupport-xft-enabled:' ${S}/version.h
+ fi;
+
+ # Allow user CFLAGS
+ sed -i "s:\(CFLAGS=\)-g -Os\(.*\):\1\2 ${CFLAGS}:" system.mk
+
+ # Allow user LDFLAGS
+ sed -i "s:\(LDFLAGS=\)-g -Os\(.*\):\1\2 ${LDFLAGS}:" system.mk
+
+ # Don't strip ionflux
+ sed -i "s:-s::" "../${IONFLUX_PN}-${IONFLUX_PV}/ionflux/Makefile"
+
+ # Make snprintf avaible to ion-completefile
+ sed -i 's:\(CFLAGS +=.*\):\1 $(C99_SOURCE):' utils/ion-completefile/Makefile
+
+ # Rewrite install directories to be prefixed by DESTDIR for sake of portage's sandbox
+ sed -i 's!\($(INSTALL\w*)\|rm -f\|ln -s\)\(.*\)\($(\w\+DIR)\)!\1\2$(DESTDIR)\3!g' Makefile */Makefile */*/Makefile build/rules.mk
+
+ for i in ${MODULES}
+ do
+ cd ${WORKDIR}/${i}
+ # Rewrite install directories to be prefixed by DESTDIR for sake of portage's sandbox
+ sed -i Makefile */Makefile \
+ -e 's!\($(INSTALL\w*)\|rm -f\|ln -s\)\(.*\)\($(\w\+DIR)\)!\1\2$(DESTDIR)\3!g'
+
+ done
+ cd ${S}
+
+ # Hey guys! Implicit rules apply to include statements also. Be more careful!
+ # Fix an implicit rule that will kill the installation by rewriting a .mk
+ # should configure be given just the right set of options.
+ sed -i 's!%: %.in!ion-completeman: %: %.in!g' utils/Makefile
+
+ # Fix prestripping of files
+ sed -i mod_statusbar/ion-statusd/Makefile utils/ion-completefile/Makefile \
+ -e 's: -s::'
+
+ # FIX for modules
+ cd ${WORKDIR}
+ ln -s ${MY_PN} ion-3
+}
+
+src_compile() {
+ local myconf=""
+
+ # xfree
+ if has_version '>=x11-base/xfree-4.3.0'; then
+ sed -i -e "s:DEFINES += -DCF_XFREE86_TEXTPROP_BUG_WORKAROUND:#DEFINES += -DCF_XFREE86_TEXTPROP_BUG_WORKAROUND:" ${S}/system.mk
+ fi
+
+ # help out this arch as it can't handle certain shared library linkage
+ use hppa && sed -i -e "s:#PRELOAD_MODULES=1:PRELOAD_MODULES=1:" ${S}/system.mk
+
+ # unicode support
+ use unicode && sed -i -e "s:#DEFINES += -DCF_DE_USE_XUTF8:DEFINES += -DCF_DE_USE_XUTF8:" ${S}/system.mk
+
+ cd ${S}
+ make \
+ LIBDIR=/usr/$(get_libdir) \
+ DOCDIR=/usr/share/doc/${PF} || die
+
+ for i in ${MODULES}
+ do
+ cd ${WORKDIR}/${i}
+
+ make \
+ LIBDIR=/usr/$(get_libdir)
+ done
+
+ if ( use doc )
+ then
+ export MT_FEATURES=varfonts
+ mkdir -p ${T}/var/cache/fonts
+ export VARTEXFONTS=${T}/var/cache/fonts
+
+ cd ${WORKDIR}/${IONDOC_PN}-${IONDOC_PV}
+ make all
+ make all-pdf
+ fi
+}
+
+src_install() {
+
+ emake \
+ DESTDIR=${D} \
+ DOCDIR=/usr/share/doc/${PF} \
+ install || die
+
+ echo -e "#!/bin/sh\n/usr/bin/ion3" > ${T}/ion3
+ echo -e "#!/bin/sh\n/usr/bin/pwm3" > ${T}/pwm3
+ exeinto /etc/X11/Sessions
+ doexe ${T}/ion3 ${T}/pwm3
+
+ insinto /usr/share/xsessions
+ doins ${FILESDIR}/ion3.desktop ${FILESDIR}/pwm3.desktop
+
+ cd ${WORKDIR}/${SCRIPTS_PN}-${SCRIPTS_PV}
+ insinto /usr/share/ion3
+ find $SCRIPTS_DIRS -type f |\
+ while read FILE
+ do
+ doins $PWD/$FILE
+ done
+
+ for i in ${MODULES}
+ do
+ cd ${WORKDIR}/${i}
+
+ emake \
+ DESTDIR=${D} \
+ install || die
+
+ done
+
+ if ( use doc )
+ then
+ cd ${WORKDIR}/${IONDOC_PN}-${IONDOC_PV}
+ dodoc *.pdf
+ fi
+
+ sed -i -e '/dopath("mod_sp")/a\dopath("mod_xrandr")' ${D}/etc/X11/ion3/cfg_defaults.lua
+}
+
+pkg_postinst() {
+ elog "This version of ion3 contains no xinerama support (removed upstream)."
+ elog "Remember that USE='ion3-voidupstreamsupport-truetype' will render"
+ elog "upstream support for your installation of ion3 void."
+ elog "Thus, if you encouter a bug in ion-3, be sure to to reproduce it with a"
+ elog "vanilla build before reporting it upstream. You are welcome to report"
+ elog "any problem as a bug on http://bugs.gentoo.org."
+}
diff --git a/ion3/metadata.xml b/ion3/metadata.xml
new file mode 100644
index 0000000..b35b976
--- /dev/null
+++ b/ion3/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<herd>no-herd</herd>
+<maintainer>
+ <email>mabi@gentoo.org</email>
+ <name>Matti Bickel</name>
+</maintainer>
+</pkgmetadata>