From 78f91a3eb6048f1c6a7afca240af58bb3f4936a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Schr=C3=B6ter?= Date: Wed, 18 Oct 2023 19:08:13 +0200 Subject: [PATCH] Sync from SUSE:ALP:Source:Standard:1.0 libXaw3d revision ef368cdffb4c21f6c6249af2c26dbdc2 --- .gitattributes | 23 + README.SuSE | 25 + baselibs.conf | 9 + libXaw3d-1.6.5.tar.xz | 3 + libXaw3d-1.6.5.tar.xz.sig | Bin 0 -> 215 bytes libXaw3d.changes | 400 ++++++++++++++++ libXaw3d.keyring | 343 ++++++++++++++ libXaw3d.spec | 189 ++++++++ xaw3d-3dlabel.patch | 164 +++++++ xaw3d-elf.patch | 63 +++ xaw3d-fontset.patch | 277 +++++++++++ xaw3d-hsbar.patch | 266 +++++++++++ xaw3d-secure.patch | 524 ++++++++++++++++++++ xaw3d-thumb.patch | 970 ++++++++++++++++++++++++++++++++++++++ xaw3d.patch | 70 +++ 15 files changed, 3326 insertions(+) create mode 100644 .gitattributes create mode 100644 README.SuSE create mode 100644 baselibs.conf create mode 100644 libXaw3d-1.6.5.tar.xz create mode 100644 libXaw3d-1.6.5.tar.xz.sig create mode 100644 libXaw3d.changes create mode 100644 libXaw3d.keyring create mode 100644 libXaw3d.spec create mode 100644 xaw3d-3dlabel.patch create mode 100644 xaw3d-elf.patch create mode 100644 xaw3d-fontset.patch create mode 100644 xaw3d-hsbar.patch create mode 100644 xaw3d-secure.patch create mode 100644 xaw3d-thumb.patch create mode 100644 xaw3d.patch diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..fecc750 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/README.SuSE b/README.SuSE new file mode 100644 index 0000000..d76bad1 --- /dev/null +++ b/README.SuSE @@ -0,0 +1,25 @@ +Note: + + This /usr/lib/Xaw3d/libXaw8.so.8.0 is a real + libXaw3d.so.8.0 linked with `-soname libXaw8.so.8'. + + Therfore do _NOT_ replace /usr/lib/libXaw8.so.8.0.0 + by /usr/lib/Xaw3d/libXaw.so.8.0 + + On any problem starting X11 programs please remove the + package xaw3dd. + +Achtung: + + Die Bibliothek /usr/lib/Xaw3d/libXaw8.so.8.0 ist + in Wirklichkeit eine libXaw3d.so.8.0, die mit der + Option `-soname libXaw8.so.8' gelinkt wurde. + + Darum ersetzten Sie auf KEINEN Fall /usr/lib/libXaw8.so.8.0.0 + durch /usr/lib/Xaw3d/libXaw8.so.8.0. + + Falls Sie irgendwelche Probleme mit X11-Programmen haben, + deinstallieren Sie das Paket xaw3dd. + + +Werner Fink diff --git a/baselibs.conf b/baselibs.conf new file mode 100644 index 0000000..7c9ae94 --- /dev/null +++ b/baselibs.conf @@ -0,0 +1,9 @@ +libXaw3d6 +libXaw3d7 +libXaw3d8 + obsoletes "xaw3d- < " +libXaw3d-devel + requires -libXaw3d- + requires "libXaw3d6- = " + requires "libXaw3d7- = " + requires "libXaw3d8- = " diff --git a/libXaw3d-1.6.5.tar.xz b/libXaw3d-1.6.5.tar.xz new file mode 100644 index 0000000..a1e481f --- /dev/null +++ b/libXaw3d-1.6.5.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3481ee4b6753b88e18856ea265cb84f2b0339ee8c3bbec966b156b38b5841833 +size 483496 diff --git a/libXaw3d-1.6.5.tar.xz.sig b/libXaw3d-1.6.5.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..af1c7cc7debcc3a10f7f80e17ebbbd48e2d3acec GIT binary patch literal 215 zcmeCU%EBPV#ZW7z$P%|+k!4ofj-@`QrGKq?ty#h|%Wpa>Q%c-b&3KUp1|ZO5(8w$< zE=?`cO)DsJ$jdKDEXmBzE7r>|NX;uqFVIWNOe@LA$S*2R%}vbH%S$aWb#-(zGBhx; zbhI#YvT!stadvhxbaHcabar(zvNSg_aJFTb_hP?KFsV3{V zbWM~z*e&A%3+s0^7zmF{8XJ7Yd8tGLY;E6vg LEPrj$#vTp;9ga@4 literal 0 HcmV?d00001 diff --git a/libXaw3d.changes b/libXaw3d.changes new file mode 100644 index 0000000..369cc3e --- /dev/null +++ b/libXaw3d.changes @@ -0,0 +1,400 @@ +------------------------------------------------------------------- +Wed Aug 16 12:33:24 UTC 2023 - Dr. Werner Fink + +- Update to libXaw3d 1.6.5: + * Set close-on-exec when opening files + * configure: pass noyywrap to AC_PROG_LEX if using autoconf 2.70 or later + * Raises minimum autoconf version from 2.60 to 2.64 for m4_version_prereq + * Clears autoconf warning: + configure.ac:29: warning: AC_PROG_LEX without either yywrap or noyywrap is obsolete + ./lib/autoconf/programs.m4:716: _AC_PROG_LEX is expanded from... + ./lib/autoconf/programs.m4:709: AC_PROG_LEX is expanded from... + configure.ac:29: the top level + * configure: Use LT_INIT from libtool 2 instead of deprecated AC_PROG_LIBTOOL + * AC_PROG_LIBTOOL was replaced by LT_INIT in libtool 2 in 2008, + so it's time to rely on it. + * Clears autoconf warnings: + configure.ac:13: warning: The macro `AC_PROG_LIBTOOL' is obsolete. + configure.ac:13: You should run autoupdate. + aclocal.m4:3465: AC_PROG_LIBTOOL is expanded from... + configure.ac:13: the top level + * libtoolize: Consider adding 'AC_CONFIG_MACRO_DIRS([m4])' to configure.ac, + libtoolize: and rerunning libtoolize and aclocal. + * Issue #5: incompatible function pointer passed in _XawImRealize() + * Import wrapper function with expected arguments from libXaw, + where it appears to have been originally fixed in XFree86 3.9Nb + by Paulo Cesar Pereira de Andrade. +- Port patch xaw3d-secure.patch + +------------------------------------------------------------------- +Tue Sep 13 12:21:28 UTC 2022 - Dr. Werner Fink + +- Move https to https even for URLs in comments +- Drop not existing URL + +------------------------------------------------------------------- +Mon Aug 29 09:46:41 UTC 2022 - Dirk Müller + +- update to 1.6.4: + * convert ISO8859-1 encoded source files to UTF-8 + * Fix spelling/wording issues + * Build xz tarballs instead of bzip2 + * fix configure doesn't fail if flex is not installed + * build-fixes when _CONST_X_STRING is defined + * Pass correct number of atoms from SelectSave to _XawTextSaltAwaySelection + * Fix fd leak when write() fails in WriteToFile() + * Bug 24635: File Descriptor leaks in libxaw-1.0.7 +- add keyring and signature validation + +------------------------------------------------------------------- +Fri Jun 18 14:29:43 UTC 2021 - Jan Engelhardt + +- Drop --with-pic (no effect with --disable-static) +- Trim old rpm macros/constructs + +------------------------------------------------------------------- +Tue Jun 19 10:32:17 UTC 2018 - werner@suse.de + +- Update to new upstream release 1.6.3 + * Avoid using dead pointer in _XawTextSetSelection + * Fix copied from 2D libXaw commit 11c3a104141e1a4946ad949dfb5514df0b66a031 + * autogen: add default patch prefix + * autogen.sh: use quoted string variables + * Place quotes around the $srcdir, $ORIGDIR and $0 variables to prevent + fall-outs, when they contain space. + * autogen.sh: use exec instead of waiting for configure to finish + * Syncs the invocation of configure with the one from the server. + * darwin: Remove incorrect export of vendorShellClassRec and vendorShellWidgetClass + * Get rid of some extraneous ; at the end of C source lines + * Use SEEK_* names instead of raw numbers for fseek whence argument + * Just use C89 size_t instead of rolling our own Size_t & Off_t + * Fix abs() usage. + * For long arguments, use labs(). + * autogen.sh: Honor NOCONFIGURE=1 + * configure: Drop AM_MAINTAINER_MODE + * Remove support for pre-C89 headers (unifdef -UX_NOT_STDC_ENV) + * Replace TXT16 with XChar2b inline + * No longer need #define to substitute it now that we no longer set + it to a different type on CRAY systems. + * Remove CRAY/WORD64 support (unifdef -UCRAY -UWORD64) + * Fix --disable-feature options in configure + * Make --disable-feature options passed to configure not enable + the feature but keep it disabled instead. +- Port our patches to new version + +------------------------------------------------------------------- +Wed Oct 1 21:16:33 UTC 2014 - crrodriguez@opensuse.org + +- Ensure all "la" files are deleted, not just those in libdir +- Enable verbose build +- Do not use xorg-x11-devel + +------------------------------------------------------------------- +Wed Aug 27 15:15:00 UTC 2014 - fcrozat@suse.com + +- Add baselibs.conf as source. + +------------------------------------------------------------------- +Mon Aug 18 13:29:15 UTC 2014 - fcrozat@suse.com + +- Add obsoletes to baselibs.conf. + +------------------------------------------------------------------- +Tue Nov 26 13:38:57 UTC 2013 - jengelh@inai.de + +- Add obsoletes/provides xaw3d-devel because we are now + libXaw3d-devel + +------------------------------------------------------------------- +Fri Nov 22 07:29:57 UTC 2013 - jengelh@inai.de + +- Redo xaw3d-elf.patch to modify Makefile.am instead and to also + include description +- Remove hackish Provides: from .spec file that were only + for use with symlinks + +------------------------------------------------------------------- +Wed Oct 30 09:31:49 UTC 2013 - werner@suse.de + +- Follow crackbrained policy and change SuSE into SUSE + +------------------------------------------------------------------- +Tue Oct 29 16:11:10 UTC 2013 - werner@suse.de + +- Make the libraries ELF compatible that is that each library has + its own soname as otherwise the runtime linker may show warnings +- Enable the configure options for internationalization, + multiplane-bitmaps, gray-stipples, and arrow-scrollbars + +------------------------------------------------------------------- +Fri Jun 14 23:31:46 UTC 2013 - jengelh@inai.de + +- Rename xaw3d to libXaw3d. Use libXaw.spec and xaw3d.changes as base. +- Kill unused Conflicts: axe +- Update to new upstream release 1.6.2 (update from prior 1.5E + released on 2003-04-17) +* Nuke unused source code, resolve many compile warnings, + switch to autotools +- Drop Xaw3d-1.5E-compat.patch, Xaw3d-1.5E-gvI18N.patch, + Xaw3d-1.5E-null.patch, Xaw3d-1.5E-close-destroy-crash.patch + (merged upstream). +- Drop Xaw3d-1.5E-cast.patch (resolved differently upstream). +- Rebased and renamed remaining patches from Xaw3d-1.5E-* to xaw3d-* + +------------------------------------------------------------------- +Tue Aug 9 14:42:06 UTC 2011 - werner@suse.de + +- Correct path of latest change as .conf is required + +------------------------------------------------------------------- +Mon Jul 4 09:51:40 UTC 2011 - aj@suse.de + +- Add /etc/ld.so.conf.d/xaw3dd for ldconfig (bnc#671725). + +------------------------------------------------------------------- +Tue Aug 10 17:10:18 CEST 2010 - werner@suse.de + +- Add missing Xaw.so.7 version of Xaw3d (bnc#627314) + +------------------------------------------------------------------- +Thu Dec 17 16:27:17 CET 2009 - jengelh@medozas.de + +- add baselbis.conf as a source +- enable parallel building + +------------------------------------------------------------------- +Wed Aug 26 12:53:54 CEST 2009 - mls@suse.de + +- make patch0 usage consistent + +------------------------------------------------------------------- +Fri Apr 17 20:18:00 CEST 2009 - crrodriguez@suse.de + +- remove static libraries + +------------------------------------------------------------------- +Wed Jan 7 12:34:56 CET 2009 - olh@suse.de + +- obsolete old -XXbit packages (bnc#437293) + +------------------------------------------------------------------- +Mon Nov 3 16:17:24 CET 2008 - schwab@suse.de + +- Fix broken cast. + +------------------------------------------------------------------- +Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de + +- added baselibs.conf file to build xxbit packages + for multilib support + +------------------------------------------------------------------- +Wed Jun 20 11:46:25 CEST 2007 - dmueller@suse.de + +- fix crash on exit due access to free'ed memory + +------------------------------------------------------------------- +Tue May 29 15:25:45 CEST 2007 - werner@suse.de + +- Branch off xaw3d-devel to make RPMlint happy + +------------------------------------------------------------------- +Thu Mar 29 15:37:23 CEST 2007 - coolo@suse.de + +- BuildRequire bison and flex + +------------------------------------------------------------------- +Wed Sep 13 13:42:13 CEST 2006 - werner@suse.de + +- Add compatibility libs for binary only programs (bug #205169) + +------------------------------------------------------------------- +Tue Sep 12 19:10:16 CEST 2006 - schwab@suse.de + +- Fix soname of overriding libraries [#205169]. + +------------------------------------------------------------------- +Wed Aug 16 18:05:20 CEST 2006 - aj@suse.de + +- Remove unneeded BuildRequires on xorg-x11. + +------------------------------------------------------------------- +Fri Jul 28 17:15:37 CEST 2006 - werner@suse.de + +- Make it build with X11R7 + +------------------------------------------------------------------- +Mon Feb 27 17:49:10 CET 2006 - schwab@suse.de + +- Run ldconfig also in xaw3dd package. + +------------------------------------------------------------------- +Wed Jan 25 21:31:06 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Tue Nov 29 16:08:29 CET 2005 - werner@suse.de + +- Avoid array overflow (bug #135587) +- Fix long standing bug: redraw shadows arounbd thumb if needed. + +------------------------------------------------------------------- +Fri Jun 10 11:43:37 CEST 2005 - meissner@suse.de + +- use RPM_OPT_FLAGS. + +------------------------------------------------------------------- +Wed Feb 2 12:42:14 CET 2005 - meissner@suse.de + +- use NULL at the end of XSetIC* XGetIC* calls to remove + warnings in gcc 4. (same way that Xaw in Xlib uses already). + +------------------------------------------------------------------- +Tue Sep 21 15:50:09 CEST 2004 - werner@suse.de + +- Abort on missing fontset during initialization (bug #44037) + +------------------------------------------------------------------- +Tue Sep 7 12:46:31 CEST 2004 - werner@suse.de + +- Add some check to abort if the Xt lib does not find fonts or + fontsets (bug #44037) + +------------------------------------------------------------------- +Sat Sep 4 23:39:22 CEST 2004 - ro@suse.de + +- official major version changed from 7 to 8 + +------------------------------------------------------------------- +Thu Aug 26 16:48:10 CEST 2004 - werner@suse.de + +- Be sure that scrollbars occurs and remain if needed +- More compatibility to Xaw +- Do not forget fontset check + +------------------------------------------------------------------- +Fri Apr 30 14:55:33 CEST 2004 - werner@suse.de + +- Add patch to avoid crash within resource handling (mainly for gv) + +------------------------------------------------------------------- +Mon Apr 26 15:24:21 CEST 2004 - werner@suse.de + +- Avoid compiler warnings. + +------------------------------------------------------------------- +Wed Feb 4 14:50:01 CET 2004 - werner@suse.de + +- I like labels with 3D shadow + +------------------------------------------------------------------- +Sat Jan 10 16:00:03 CET 2004 - adrian@suse.de + +- build as user + +------------------------------------------------------------------- +Tue Jul 1 11:53:25 CEST 2003 - werner@suse.de + +- Avaiod nasty `Actions not found: StartScroll' message + +------------------------------------------------------------------- +Wed May 28 15:41:39 CEST 2003 - coolo@suse.de + +- use BuildRoot + +------------------------------------------------------------------- +Mon May 19 18:34:16 CEST 2003 - werner@suse.de + +- Don't crash on wrong cast's: add compat patch + +------------------------------------------------------------------- +Mon May 5 15:30:11 CEST 2003 - werner@suse.de + +- Update to Xaw3d-1.5E + * Add our thumb patch + * Add our secure patch + * Add our hsbar patch + +------------------------------------------------------------------- +Fri Apr 5 18:31:02 CEST 2002 - pmladek@suse.cz + +- used macro %{_lib} to fix for lib64 + +------------------------------------------------------------------- +Thu Dec 14 17:25:19 CET 2000 - werner@suse.de + +- Group tag + +------------------------------------------------------------------- +Thu Jun 29 15:34:57 CEST 2000 - werner@suse.de + +- Add security fixes done for libXaw +- lib version 6.1 is required by older programs + +------------------------------------------------------------------- +Fri May 12 11:50:18 CEST 2000 - schwab@suse.de + +- Update library version number. +- Use %{_defaultdocdir}. +- Fix Scrollbar.c for all archs. + +------------------------------------------------------------------- +Fri Mar 31 12:51:12 CEST 2000 - nadvornik@suse.cz + +- removed /usr/X11R6/include/X11 from filelist + +------------------------------------------------------------------- +Fri Oct 29 12:18:30 MEST 1999 - kukuk@suse.de + +- fix Scrollbar.c for alpha + +------------------------------------------------------------------- +Mon Sep 27 16:31:01 CEST 1999 - bs@suse.de + +- fixed requirements for sub packages + +------------------------------------------------------------------- +Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de + +- ran old prepare_spec on spec file to switch to new prepare_spec. + +------------------------------------------------------------------- +Tue Apr 27 16:25:25 CEST 1999 - werner@suse.de + + - Fix some `inner else' + +------------------------------------------------------------------- +Tue Apr 27 14:45:25 MEST 1999 - ro@suse.de + +- update to 1.5 + +------------------------------------------------------------------- +Thu Nov 12 15:15:48 MET 1998 - bs@suse.de + +- fixed spec file for new rpm. + +---------------------------------------------------------------------- +Mon May 25 17:54:49 MET DST 1998 - werner@suse.de + - Add addable security fixes of XFree86[tm] patch 3.3.2-patch2 + - Second *unused* patch to be able to reverse the background + feature of scrollbars + +---------------------------------------------------------------------- +Tue May 5 23:29:54 MET DST 1998 - werner@suse.de + - Update to new release 1.4 + * add some small fixes + - Added some changes from Dimitrios P. Bouras + (background color for scrollbar, ...) + +---------------------------------------------------------------------- +Tue Oct 21 22:48:01 MET DST 1997 - werner@suse.de + - some changes for the new XFree86[tm] release + +---------------------------------------------------------------------- +23.08.96: (1.3) + - Update von 1.2a Original + 1.1 Patch für scrollbar + - 1.3 braucht kein scrollbar-3d patch mehr + allerdings können bei 1.3 die Pfeile nicht gedrückt + werden und die Resource scrollbarBackground arbeitet + nicht. diff --git a/libXaw3d.keyring b/libXaw3d.keyring new file mode 100644 index 0000000..ca2a8fc --- /dev/null +++ b/libXaw3d.keyring @@ -0,0 +1,343 @@ +pub 1024D/1F2D130E 2007-07-16 [expires: 2018-04-25] +uid [ unknown] Alan Coopersmith +uid [ unknown] Alan Coopersmith +uid [ unknown] Alan Coopersmith +sub 2048g/6E6132BD 2007-07-16 +sub 4096R/28C642A7 2013-04-26 [expires: 2018-04-25] + +pub 3072R/CAAA50B2 2017-10-04 +uid [ unknown] Adam Jackson +sub 3072R/AEF6BB88 2017-10-04 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v2 + +mQGiBEab+moRBACDH5yKqS3wcc5bdxY7PBNuwKvF5TKMfagmSvuRDtZjjIIWaA/n +Z1KboV9Gq5g7kP7+Kfu+Qgd8u65eVsWwmPW10fXvj3aCU53glx2EdGdrHcgiyH2g +EQfPiyBw+trIppWFRV0IDXSLMA1FNC92t2nSG/VFHaPTVwcgkIRSfcXDvwCglGdE +a6f4uLqoNHP+m4yYnzapFuMD/R4+2AJDAvEWKDdYCGZzlawjAmmWyXrmT7/C/mx9 +8qUR473l4buXjHgDkkXXlHqdzil1vK85PhrKzNJDCCmlHUJNz+QwiAMOLwpD+kwV +Pb57RG7y+a5JQ5+jtVw4RlUxZIk/wj2An9YBO3A5vR7PdjM32ZJCN2+aM4dYfNzQ +xQKTA/47icvBaBVTl9rztjg2pd2Aqpc1P/GsIYLGj7XjnnJvGAENBHSH1QjpZMJG +CTS9oJ+B0/wrIr+pA+MdFgYAb6ojMQJOO6UChjWWSGjMFcs/CeXhxlLBido3DtAE +TbNTwO6OEfAvdosvTdhJFnwvZlJ+zZGGy5CrF2Fd9PUe9tmASbQoQWxhbiBDb29w +ZXJzbWl0aCA8YWxhbmNAZnJlZWRlc2t0b3Aub3JnPohoBBMRAgAoAhsDBgsJCAcD +AgYVCAIJCgsEFgIDAQIeAQIXgAUCUXnRYgUJFEPYeAAKCRCi+54IHy0TDonxAKCP +cAgXNojuujUg5Wqi6v0RBFVSUgCggq1SsVEdq9NDWvXvkeGyNaBivSK0K0FsYW4g +Q29vcGVyc21pdGggPGFsYW4uY29vcGVyc21pdGhAc3VuLmNvbT6IZgQTEQIAJgIb +AwYLCQgHAwIEFQIIAwQWAgMBAh4BAheABQJRedFiBQkUQ9h4AAoJEKL7nggfLRMO +6sUAn0jl3h9rY4OJ13Lu7nsKclyhDpOqAKCFgTmaDGRuDRxloLg9jftrn7a7vrQu +QWxhbiBDb29wZXJzbWl0aCA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPohr +BBMRAgArAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAIZAQUCUXnRYgUJFEPY +eAAKCRCi+54IHy0TDtBZAJ9IgVVNoFIPRjTsNjcSFaLznuDRJgCcC/WgV312IrxS +Q8PRAyEgozSB9Ke5Ag0ERpv6bxAIAJp5aUlho5rUhpS6ik7spsAQFPRuycPKMNu0 +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 +=aTYk +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +LpW12CiCdY+Bg+y+MQTdDxSEI46tQ8Oluw== +=YfQM +-----END PGP PUBLIC KEY BLOCK----- diff --git a/libXaw3d.spec b/libXaw3d.spec new file mode 100644 index 0000000..aa9e51c --- /dev/null +++ b/libXaw3d.spec @@ -0,0 +1,189 @@ +# +# spec file for package libXaw3d +# +# Copyright (c) 2023 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +Name: libXaw3d +Version: 1.6.5 +Release: 0 +Summary: The 3D Athena Widget Set +License: MIT +Group: Development/Libraries/C and C++ +URL: https://xorg.freedesktop.org/ +#Git-Clone: git://anongit.freedesktop.org/xorg/lib/libXaw3d +#Git-Web: https://cgit.freedesktop.org/xorg/lib/libXaw3d/ +Source: https://xorg.freedesktop.org/releases/individual/lib/%name-%version.tar.xz +Source1: https://xorg.freedesktop.org/releases/individual/lib/%name-%version.tar.xz.sig +Source2: README.SuSE +Source3: baselibs.conf +Source9: libXaw3d.keyring +Patch1: xaw3d-secure.patch +Patch2: xaw3d-thumb.patch +Patch3: xaw3d-hsbar.patch +Patch4: xaw3d-3dlabel.patch +Patch5: xaw3d-fontset.patch +Patch6: xaw3d-elf.patch +Patch7: xaw3d.patch +BuildRequires: autoconf >= 2.60 +BuildRequires: automake +BuildRequires: bison +BuildRequires: flex +BuildRequires: libtool +BuildRequires: pkgconfig +BuildRequires: pkgconfig(x11) +BuildRequires: pkgconfig(xext) +BuildRequires: pkgconfig(xmu) +BuildRequires: pkgconfig(xorg-macros) >= 1.8 +BuildRequires: pkgconfig(xpm) +BuildRequires: pkgconfig(xt) + +%description +Xaw3d is a general-purpose replacement for the Athena toolkit which +adds a 3D appearance and support for XPM images. + +This is a library that can be used instead of the standard +Athena Widget Library. It has tried to keep the standard of the +libXaw library. There are also programs which explicitly use this +library (this is the reason why the library was included). + +NOTE: Do NOT replace /usr/lib/libXaw.so.6.1! + +%package -n libXaw3d6 +Summary: The 3D Athena Widget Set +Group: System/Libraries + +%description -n libXaw3d6 +Xaw3d is a general-purpose replacement for the Athena toolkit which +adds a 3D appearance and support for XPM images. + +%package -n libXaw3d7 +Summary: The 3D Athena Widget Set +Group: System/Libraries + +%description -n libXaw3d7 +Xaw3d is a general-purpose replacement for the Athena toolkit which +adds a 3D appearance and support for XPM images. + +%package -n libXaw3d8 +Summary: The 3D Athena Widget Set +Group: System/Libraries +Provides: Xaw3d = %version-%release +# bug437293 +%ifarch ppc64 +Obsoletes: xaw3d-64bit +%endif +# Added for 13.1 +Obsoletes: xaw3d < %version-%release +Provides: xaw3d = %version-%release + +%description -n libXaw3d8 +Xaw3d is a general-purpose replacement for the Athena toolkit which +adds a 3D appearance and support for XPM images. + +%package devel +Summary: Development files for the X Athena Widget Set +Group: Development/Libraries/C and C++ +Requires: libXaw3d6 = %version +Requires: libXaw3d7 = %version +Requires: libXaw3d8 = %version +Provides: xaw3d:/usr/include/X11/Xaw3d/Xaw3dP.h +# bug437293 +%ifarch ppc64 +Obsoletes: xaw3d-devel-64bit +%endif +# O/P added for 13.2 +Provides: xaw3d-devel = %version-%release +Obsoletes: xaw3d-devel < %version-%release + +%description devel +Xaw3d is a general-purpose replacement for the Athena toolkit which +adds a 3D appearance and support for XPM images. + +This package contains the development headers for the library found +in libXaw3d6/libXaw3d7/libXaw3d8. + +%package -n xaw3dd +Summary: Select 3D Athena Widgets as a replacement for Athena Widgets +Group: System/Libraries +Requires: libXaw3d6 = %version +Requires: libXaw3d7 = %version +Requires: libXaw3d8 = %version + +%description -n xaw3dd +Installation of this package will cause programs utilizing the Athena +Widget Toolkit to instead use the 3D Athena Widget set. + +If any problems arise using or starting X Window System programs, +remove this package. + +%prep +%autosetup -p1 + +%build +autoreconf -fi +%configure --docdir=%_docdir/%name --disable-static \ + --enable-internationalization \ + --enable-multiplane-bitmaps \ + --enable-gray-stipples \ + --enable-arrow-scrollbars \ + --with-gnu-ld \ + +%make_build + +%install +%make_install +find %{buildroot} -type f -name "*.la" -print -delete + +# Copy README here and then gobble it up via %%doc +mkdir -p %{buildroot}%_docdir/xaw3dd +cp %_sourcedir/README.SuSE %{buildroot}/%_docdir/xaw3dd/README.SUSE +ln -s %_docdir/xaw3dd/README.SUSE %{buildroot}%_libdir/Xaw3d/NOTE + +# Create /etc/ld.so.conf.d/xaw3dd.conf +mkdir -p %{buildroot}%_sysconfdir/ld.so.conf.d +echo %_libdir/Xaw3d > %{buildroot}%_sysconfdir/ld.so.conf.d/xaw3dd.conf + +%post -n libXaw3d6 -p /sbin/ldconfig +%postun -n libXaw3d6 -p /sbin/ldconfig +%post -n libXaw3d7 -p /sbin/ldconfig +%postun -n libXaw3d7 -p /sbin/ldconfig +%post -n libXaw3d8 -p /sbin/ldconfig +%postun -n libXaw3d8 -p /sbin/ldconfig +%post -n xaw3dd -p /sbin/ldconfig +%postun -n xaw3dd -p /sbin/ldconfig + +%files -n libXaw3d6 +%_libdir/libXaw3d.so.6* + +%files -n libXaw3d7 +%_libdir/libXaw3d.so.7* + +%files -n libXaw3d8 +%_libdir/libXaw3d.so.8* + +%files devel +%_includedir/X11/Xaw3d/ +%_libdir/libXaw3d.so +%_libdir/pkgconfig/xaw3d.pc +%_docdir/%name/ + +%files -n xaw3dd +%config %_sysconfdir/ld.so.conf.d/xaw3dd.conf +%_libdir/Xaw3d/ +%doc %_libdir/Xaw3d/NOTE +%_docdir/xaw3dd/ + +%changelog diff --git a/xaw3d-3dlabel.patch b/xaw3d-3dlabel.patch new file mode 100644 index 0000000..e52f5f3 --- /dev/null +++ b/xaw3d-3dlabel.patch @@ -0,0 +1,164 @@ +--- + libXaw3d-1.6.3/src/Label.c | 65 +++++++++++++++++++++++++++++++-------------- + 1 file changed, 45 insertions(+), 20 deletions(-) + +--- libXaw3d-1.6.3/src/Label.c ++++ libXaw3d-1.6.3/src/Label.c 2018-06-19 10:22:20.542598480 +0000 +@@ -361,9 +361,16 @@ GetgrayGC(LabelWidget lw) + static void + compute_bitmap_offsets (LabelWidget lw) + { +- if (lw->label.lbm_height != 0) +- lw->label.lbm_y = (lw->core.height - lw->label.lbm_height) / 2; +- else ++ /* ++ * bitmap will be eventually be displayed at ++ * (internal_width, internal_height + lbm_y) ++ */ ++ if (lw->label.lbm_height != 0) { ++ lw->label.lbm_y = (lw->core.height - ++ (lw->threeD.shadow_width * 2 + ++ lw->label.internal_height * 2 + ++ lw->label.lbm_height)) / 2; ++ } else + lw->label.lbm_y = 0; + } + +@@ -389,9 +396,11 @@ Initialize(Widget request, Widget new, A + { + LabelWidget lw = (LabelWidget) new; + ++#if 0 + /* disable shadows if we're not a subclass of Command */ + if (!XtIsSubclass(new, commandWidgetClass)) + lw->threeD.shadow_width = 0; ++#endif + + if (lw->label.label == NULL) + lw->label.label = XtNewString(lw->core.name); +@@ -405,18 +414,20 @@ Initialize(Widget request, Widget new, A + + if (lw->core.height == 0) + lw->core.height = lw->label.label_height + +- 2 * lw->label.internal_height; ++ 2 * lw->label.internal_height + ++ 2 * lw->threeD.shadow_width; + + set_bitmap_info(lw); /* req's core.height, sets label.lbm_* */ + + if (lw->label.lbm_height > lw->label.label_height) + lw->core.height = lw->label.lbm_height + +- 2 * lw->label.internal_height; ++ 2 * lw->label.internal_height; + + if (lw->core.width == 0) + lw->core.width = lw->label.label_width + +- 2 * lw->label.internal_width + +- LEFT_OFFSET(lw); /* req's label.lbm_width */ ++ 2 * lw->label.internal_width + ++ 2 * lw->threeD.shadow_width + ++ LEFT_OFFSET(lw); /* req's label.lbm_width */ + + lw->label.label_x = lw->label.label_y = 0; + (*XtClass(new)->core_class.resize) ((Widget)lw); +@@ -494,14 +505,16 @@ Redisplay(Widget gw, XEvent *event, Regi + if (w->label.depth == 1) + XCopyPlane(XtDisplay(gw), pm, XtWindow(gw), gc, 0, 0, + w->label.lbm_width, w->label.lbm_height, +- (int) w->label.internal_width, +- (int) w->label.lbm_y, ++ (int) w->label.internal_width + w->threeD.shadow_width, ++ (int) w->label.internal_height + w->threeD.shadow_width ++ + w->label.lbm_y, + (unsigned long) 1L); + else + XCopyArea(XtDisplay(gw), pm, XtWindow(gw), gc, 0, 0, + w->label.lbm_width, w->label.lbm_height, +- (int) w->label.internal_width, +- (int) w->label.lbm_y); ++ (int) w->label.internal_width + w->threeD.shadow_width, ++ (int) w->label.internal_height + w->threeD.shadow_width ++ + w->label.lbm_y); + } + + #ifdef XAW_INTERNATIONALIZATION +@@ -591,14 +604,16 @@ _Reposition(LabelWidget lw, Dimension wi + Position *dx, Position *dy) + { + Position newPos; +- Position leftedge = lw->label.internal_width + LEFT_OFFSET(lw); ++ Position leftedge = lw->label.internal_width + LEFT_OFFSET(lw) + ++ lw->threeD.shadow_width; + + switch (lw->label.justify) { + case XtJustifyLeft: + newPos = leftedge; + break; + case XtJustifyRight: +- newPos = width - lw->label.label_width - lw->label.internal_width; ++ newPos = width - (lw->label.label_width + lw->label.internal_width + ++ lw->threeD.shadow_width); + break; + case XtJustifyCenter: + default: +@@ -690,17 +705,20 @@ SetValues(Widget current, Widget request + if (newlw->label.resize && was_resized) { + if (curlw->core.height == reqlw->core.height && !checks[HEIGHT]) + newlw->core.height = newlw->label.label_height + +- 2 * newlw->label.internal_height; ++ 2 * newlw->label.internal_height + ++ 2 * newlw->threeD.shadow_width; + + set_bitmap_info (newlw); /* req's core.height, sets label.lbm_* */ + + if (newlw->label.lbm_height > newlw->label.label_height) + newlw->core.height = newlw->label.lbm_height + +- 2 * newlw->label.internal_height; ++ 2 * newlw->label.internal_height + ++ 2 * newlw->threeD.shadow_width; + + if (curlw->core.width == reqlw->core.width && !checks[WIDTH]) + newlw->core.width = newlw->label.label_width + + 2 * newlw->label.internal_width + ++ 2 * newlw->threeD.shadow_width + + LEFT_OFFSET(newlw); /* req's label.lbm_width */ + } + +@@ -709,15 +727,20 @@ SetValues(Widget current, Widget request + if (checks[HEIGHT]) { + if (newlw->label.label_height > newlw->label.lbm_height) + i = newlw->label.label_height + +- 2 * newlw->label.internal_height; ++ 2 * newlw->label.internal_height + ++ 2 * newlw->threeD.shadow_width; + else +- i = newlw->label.lbm_height + 2 * newlw->label.internal_height; ++ i = newlw->label.lbm_height + ++ 2 * newlw->label.internal_height + ++ 2 * newlw->threeD.shadow_width; + if (i > newlw->core.height) + newlw->core.height = i; + } + if (checks[WIDTH]) { +- i = newlw->label.label_width + 2 * newlw->label.internal_width + +- LEFT_OFFSET(newlw); /* req's label.lbm_width */ ++ i = newlw->label.label_width + ++ 2 * newlw->label.internal_width + ++ 2 * newlw->threeD.shadow_width + ++ LEFT_OFFSET(newlw); /* req's label.lbm_width */ + if (i > newlw->core.width) + newlw->core.width = i; + } +@@ -788,9 +811,11 @@ QueryGeometry(Widget w, XtWidgetGeometry + preferred->request_mode = CWWidth | CWHeight; + preferred->width = (lw->label.label_width + + 2 * lw->label.internal_width + ++ 2 * lw->threeD.shadow_width + + LEFT_OFFSET(lw)); + preferred->height = lw->label.label_height + +- 2 * lw->label.internal_height; ++ 2 * lw->label.internal_height + ++ 2 * lw->threeD.shadow_width; + if ( ((intended->request_mode & (CWWidth | CWHeight)) + == (CWWidth | CWHeight)) && + intended->width == preferred->width && diff --git a/xaw3d-elf.patch b/xaw3d-elf.patch new file mode 100644 index 0000000..6a2c158 --- /dev/null +++ b/xaw3d-elf.patch @@ -0,0 +1,63 @@ +From: Jan Engelhardt +Date: 2013-11-22 08:20:11.934094533 +0100 + +According to Werner Fink, the libraries' DT_SONAME must be +libXaw{,3d}.so.{6,7,8} and that we cannot cheat our way with symlinks +or otherwise the runtime linker would complain, though this has never +been corroborated by some program output. (If you have it, paste it +here in the description.) + +On the other hand, the absence (so far) of a runtime linker +complaint is observable on openSUSE 12.3's "xaw3dd" package +where we did in fact use symlinks. + + ares07:~> ldd /usr/bin/xterm | grep Xaw + libXaw.so.7 => /usr/lib64/Xaw3d/libXaw.so.7 + (0x00007fe219b67000) + ares07:~> readelf -a /usr/lib64/Xaw3d/libXaw.so.7 | grep SONAME + 0x000000000000000e (SONAME) Library soname: [libXaw.so.7] + ares07:~> xterm + xterm: Xt error: Can't open display: + xterm: DISPLAY is not set + +--- + src/Makefile.am | 22 +++++++++++++++++++++- + 1 file changed, 21 insertions(+), 1 deletion(-) + +Index: libXaw3d-1.6.2/src/Makefile.am +=================================================================== +--- libXaw3d-1.6.2.orig/src/Makefile.am ++++ libXaw3d-1.6.2/src/Makefile.am +@@ -1,4 +1,8 @@ +-lib_LTLIBRARIES = libXaw3d.la ++# The .la file with newest SOVERSION should come last, ++# so that it "wins" during `make install`. ++lib_LTLIBRARIES = xaw6/libXaw3d.la xaw7/libXaw3d.la libXaw3d.la ++xawdir = ${libdir}/Xaw3d ++xaw_LTLIBRARIES = xaw6/libXaw.la xaw7/libXaw.la libXaw.la + + AM_YFLAGS = -d -p LayYY + +@@ -73,6 +77,22 @@ libXaw3d_la_LIBADD = \ + + libXaw3d_la_LDFLAGS = -version-info 8:0:0 -no-undefined + ++libXaw_la_SOURCES = ${libXaw3d_la_SOURCES} ++libXaw_la_LIBADD = ${libXaw3d_la_LIBADD} ++libXaw_la_LDFLAGS = ${libXaw3d_la_LDFLAGS} ++xaw6_libXaw3d_la_SOURCES = ${libXaw3d_la_SOURCES} ++xaw6_libXaw3d_la_LIBADD = ${libXaw3d_la_LIBADD} ++xaw6_libXaw3d_la_LDFLAGS = ${libXaw3d_la_LDFLAGS} -version-info 6:0:0 ++xaw6_libXaw_la_SOURCES = ${libXaw3d_la_SOURCES} ++xaw6_libXaw_la_LIBADD = ${libXaw3d_la_LIBADD} ++xaw6_libXaw_la_LDFLAGS = ${libXaw3d_la_LDFLAGS} -version-info 6:0:0 ++xaw7_libXaw3d_la_SOURCES = ${libXaw3d_la_SOURCES} ++xaw7_libXaw3d_la_LIBADD = ${libXaw3d_la_LIBADD} ++xaw7_libXaw3d_la_LDFLAGS = ${libXaw3d_la_LDFLAGS} -version-info 7:0:0 ++xaw7_libXaw_la_SOURCES = ${libXaw3d_la_SOURCES} ++xaw7_libXaw_la_LIBADD = ${libXaw3d_la_LIBADD} ++xaw7_libXaw_la_LDFLAGS = ${libXaw3d_la_LDFLAGS} -version-info 7:0:0 ++ + BUILT_SOURCES = laygram.h + + dist_doc_DATA = README.XAW3D diff --git a/xaw3d-fontset.patch b/xaw3d-fontset.patch new file mode 100644 index 0000000..944eb03 --- /dev/null +++ b/xaw3d-fontset.patch @@ -0,0 +1,277 @@ +--- + libXaw3d-1.6.3/src/AsciiSink.c | 2 ++ + libXaw3d-1.6.3/src/Command.c | 2 ++ + libXaw3d-1.6.3/src/Label.c | 11 ++++++++++- + libXaw3d-1.6.3/src/List.c | 14 ++++++++++++-- + libXaw3d-1.6.3/src/MultiSink.c | 33 ++++++++++++++++++++++++++------- + libXaw3d-1.6.3/src/SmeBSB.c | 2 ++ + libXaw3d-1.6.3/src/Tip.c | 16 ++++++++++++++-- + libXaw3d-1.6.3/src/XawIm.c | 14 +++++++++----- + 8 files changed, 77 insertions(+), 17 deletions(-) + +--- libXaw3d-1.6.3/src/AsciiSink.c ++++ libXaw3d-1.6.3/src/AsciiSink.c 2018-06-19 10:22:54.985964432 +0000 +@@ -513,6 +513,8 @@ Initialize(Widget request, Widget new, A + { + AsciiSinkObject sink = (AsciiSinkObject) new; + ++ if (!sink->ascii_sink.font) XtError("Aborting: no font found\n"); ++ + GetGC(sink); + + sink->ascii_sink.insertCursorOn= CreateInsertCursor(XtScreenOfObject(new)); +--- libXaw3d-1.6.3/src/Command.c ++++ libXaw3d-1.6.3/src/Command.c 2018-06-19 10:22:54.985964432 +0000 +@@ -220,6 +220,8 @@ Initialize(Widget request, Widget new, A + CommandWidget cbw = (CommandWidget) new; + int shape_event_base, shape_error_base; + ++ if (!cbw->label.font) XtError("Aborting: no font found\n"); ++ + if (cbw->command.shape_style != XawShapeRectangle + && !XShapeQueryExtension(XtDisplay(new), &shape_event_base, + &shape_error_base)) +--- libXaw3d-1.6.3/src/Label.c ++++ libXaw3d-1.6.3/src/Label.c 2018-06-19 10:22:54.985964432 +0000 +@@ -217,7 +217,10 @@ SetTextWidthAndHeight(LabelWidget lw) + #ifdef XAW_INTERNATIONALIZATION + if ( lw->simple.international == True ) { + XFontSet fset = lw->label.fontset; +- XFontSetExtents *ext = XExtentsOfFontSet(fset); ++ XFontSetExtents *ext; ++ ++ if (!lw->label.fontset || !(ext = XExtentsOfFontSet(fset))) ++ XtError("Aborting: no fontset found\n"); + + lw->label.label_height = ext->max_ink_extent.height; + if (lw->label.label == NULL) { +@@ -402,6 +405,12 @@ Initialize(Widget request, Widget new, A + lw->threeD.shadow_width = 0; + #endif + ++ if (!lw->label.font) XtError("Aborting: no font found\n"); ++#ifdef XAW_INTERNATIONALIZATION ++ if (lw->simple.international && !lw->label.fontset) ++ XtError("Aborting: no fontset found\n"); ++#endif ++ + if (lw->label.label == NULL) + lw->label.label = XtNewString(lw->core.name); + else +--- libXaw3d-1.6.3/src/List.c ++++ libXaw3d-1.6.3/src/List.c 2018-06-19 10:22:54.985964432 +0000 +@@ -362,6 +362,12 @@ Initialize(Widget junk, Widget new, ArgL + { + ListWidget lw = (ListWidget) new; + ++ if (!lw->list.font) XtError("Aborting: no font found\n"); ++#ifdef XAW_INTERNATIONALIZATION ++ if (lw->simple.international && !lw->list.fontset) ++ XtError("Aborting: no fontset found\n"); ++#endif ++ + /* + * Initialize all private resources. + */ +@@ -571,7 +577,9 @@ PaintItemName(Widget w, int item) + int x, y, str_y; + ListWidget lw = (ListWidget) w; + #ifdef XAW_INTERNATIONALIZATION +- XFontSetExtents *ext = XExtentsOfFontSet(lw->list.fontset); ++ XFontSetExtents *ext; ++ if (!lw->list.fontset || !(ext = XExtentsOfFontSet(lw->list.fontset))) ++ XtError("Aborting: no fontset found\n"); + #endif + + if (!XtIsRealized(w)) return; /* Just in case... */ +@@ -926,7 +934,9 @@ SetValues(Widget current, Widget request + ListWidget nl = (ListWidget) new; + Boolean redraw = FALSE; + #ifdef XAW_INTERNATIONALIZATION +- XFontSetExtents *ext = XExtentsOfFontSet(nl->list.fontset); ++ XFontSetExtents *ext; ++ if (!nl->list.fontset || !(ext = XExtentsOfFontSet(nl->list.fontset))) ++ XtError("Aborting: no fontset found\n"); + #endif + + /* If the request height/width is different, lock it. Unless its 0. If */ +--- libXaw3d-1.6.3/src/MultiSink.c ++++ libXaw3d-1.6.3/src/MultiSink.c 2018-06-19 10:22:54.985964432 +0000 +@@ -252,7 +252,9 @@ PaintText(Widget w, GC gc, Position x, P + XFontSet fontset = sink->multi_sink.fontset; + Position max_x; + Dimension width = XwcTextEscapement(fontset, buf, len); +- XFontSetExtents *ext = XExtentsOfFontSet(fontset); ++ XFontSetExtents *ext; ++ if (!fontset || !(ext = XExtentsOfFontSet(fontset))) ++ XtError("Aborting: no fontset found\n"); + max_x = (Position) ctx->core.width; + + if ( ((int) width) <= -x) /* Don't draw if we can't see it. */ +@@ -286,7 +288,9 @@ DisplayText(Widget w, Position x, Positi + MultiSinkObject sink = (MultiSinkObject) w; + Widget source = XawTextGetSource(XtParent(w)); + wchar_t buf[BUFSIZ]; +- XFontSetExtents *ext = XExtentsOfFontSet(sink->multi_sink.fontset); ++ XFontSetExtents *ext; ++ if (!sink->multi_sink.fontset || !(ext = XExtentsOfFontSet(sink->multi_sink.fontset))) ++ XtError("Aborting: no fontset found\n"); + + int j, k; + XawTextBlock blk; +@@ -403,8 +407,10 @@ FindDistance (Widget w, XawTextPosition + + XawTextPosition index, lastPos; + wchar_t c; +- XFontSetExtents *ext = XExtentsOfFontSet(sink->multi_sink.fontset); + XawTextBlock blk; ++ XFontSetExtents *ext; ++ if (!sink->multi_sink.fontset || !(ext = XExtentsOfFontSet(sink->multi_sink.fontset))) ++ XtError("Aborting: no fontset found\n"); + + /* we may not need this */ + lastPos = GETLASTPOS; +@@ -437,8 +443,10 @@ FindPosition(Widget w, XawTextPosition f + int lastWidth = 0, whiteSpaceWidth = 0; + Boolean whiteSpaceSeen; + wchar_t c; +- XFontSetExtents *ext = XExtentsOfFontSet(sink->multi_sink.fontset); + XawTextBlock blk; ++ XFontSetExtents *ext; ++ if (!sink->multi_sink.fontset || !(ext = XExtentsOfFontSet(sink->multi_sink.fontset))) ++ XtError("Aborting: no fontset found\n"); + + lastPos = GETLASTPOS; + +@@ -535,6 +543,11 @@ Initialize(Widget request, Widget new, A + + GetGC(sink); + ++#ifdef XAW_INTERNATIONALIZATION ++ if (!sink->multi_sink.fontset) XtError("Aborting: no fontset found\n"); ++#endif ++ ++ + sink->multi_sink.insertCursorOn= CreateInsertCursor(XtScreenOfObject(new)); + sink->multi_sink.laststate = XawisOff; + sink->multi_sink.cursor_x = sink->multi_sink.cursor_y = 0; +@@ -615,7 +628,9 @@ MaxLines(Widget w, Dimension height) + { + MultiSinkObject sink = (MultiSinkObject) w; + int font_height; +- XFontSetExtents *ext = XExtentsOfFontSet(sink->multi_sink.fontset); ++ XFontSetExtents *ext; ++ if (!sink->multi_sink.fontset || !(ext = XExtentsOfFontSet(sink->multi_sink.fontset))) ++ XtError("Aborting: no fontset found\n"); + + font_height = ext->max_logical_extent.height; + return( ((int) height) / font_height ); +@@ -636,7 +651,9 @@ MaxHeight( + int lines ) + { + MultiSinkObject sink = (MultiSinkObject) w; +- XFontSetExtents *ext = XExtentsOfFontSet(sink->multi_sink.fontset); ++ XFontSetExtents *ext; ++ if (!sink->multi_sink.fontset || !(ext = XExtentsOfFontSet(sink->multi_sink.fontset))) ++ XtError("Aborting: no fontset found\n"); + + return(lines * ext->max_logical_extent.height); + } +@@ -718,7 +735,9 @@ _XawMultiSinkPosToXY( + Position *y ) + { + MultiSinkObject sink = (MultiSinkObject) ((TextWidget)w)->text.sink; +- XFontSetExtents *ext = XExtentsOfFontSet( sink->multi_sink.fontset ); ++ XFontSetExtents *ext; ++ if (!sink->multi_sink.fontset || !(ext = XExtentsOfFontSet( sink->multi_sink.fontset ))) ++ XtError("Aborting: no fontset found\n"); + + _XawTextPosToXY( w, pos, x, y ); + *y += abs( ext->max_logical_extent.y ); +--- libXaw3d-1.6.3/src/SmeBSB.c ++++ libXaw3d-1.6.3/src/SmeBSB.c 2018-06-19 10:22:54.985964432 +0000 +@@ -204,6 +204,8 @@ Initialize(Widget request, Widget new, A + else + entry->sme_bsb.label = XtNewString( entry->sme_bsb.label ); + ++ if (!entry->sme_bsb.font) XtError("Aborting: no font found\n"); ++ + CreateGCs(new); + + GetBitmapInfo(new, TRUE); /* Left Bitmap Info */ +--- libXaw3d-1.6.3/src/Tip.c ++++ libXaw3d-1.6.3/src/Tip.c 2018-06-19 10:22:54.985964432 +0000 +@@ -248,6 +248,12 @@ XawTipInitialize(Widget req, Widget w, A + TipWidget tip = (TipWidget)w; + XGCValues values; + ++ if (!tip->tip.font) XtError("Aborting: no font found\n"); ++#ifdef XAW_INTERNATIONALIZATION ++ if (tip->tip.international && !tip->tip.fontset) ++ XtError("Aborting: no fontset found\n"); ++#endif ++ + tip->tip.timer = 0; + + values.foreground = tip->tip.foreground; +@@ -333,7 +339,10 @@ XawTipExpose(Widget w, XEvent *event, Re + #ifdef XAW_INTERNATIONALIZATION + if (tip->tip.international == True) { + Position ksy = tip->tip.internal_height; +- XFontSetExtents *ext = XExtentsOfFontSet(tip->tip.fontset); ++ XFontSetExtents *ext; ++ ++ if (!tip->tip.fontset || !(ext = XExtentsOfFontSet(tip->tip.fontset))) ++ XtError("Aborting: no fontset found\n"); + + ksy += abs(ext->max_ink_extent.y); + +@@ -414,7 +423,10 @@ TipLayout(XawTipInfo *info) + #ifdef XAW_INTERNATIONALIZATION + if (info->tip->tip.international == True) { + XFontSet fset = info->tip->tip.fontset; +- XFontSetExtents *ext = XExtentsOfFontSet(fset); ++ XFontSetExtents *ext; ++ ++ if (!fset || !(ext = XExtentsOfFontSet(fset))) ++ XtError("Aborting: no fontset found\n"); + + height = ext->max_ink_extent.height; + if ((nl = index(label, '\n')) != NULL) { +--- libXaw3d-1.6.3/src/XawIm.c ++++ libXaw3d-1.6.3/src/XawIm.c 2018-06-19 10:22:54.985964432 +0000 +@@ -727,8 +727,10 @@ CreateIC(Widget w, XawVendorShellExtPart + SetVaArg( &pe_a[pe_cnt], (XPointer) p->font_set); pe_cnt++; + SetVaArg( &st_a[st_cnt], (XPointer) XNFontSet); st_cnt++; + SetVaArg( &st_a[st_cnt], (XPointer) p->font_set); st_cnt++; +- height = maxAscentOfFontSet(p->font_set) +- + maxDescentOfFontSet(p->font_set); ++ if (p->font_set) { ++ height = maxAscentOfFontSet(p->font_set) ++ + maxDescentOfFontSet(p->font_set); ++ } + height = SetVendorShellHeight(ve, height); + } + if (p->flg & CIFg) { +@@ -857,7 +859,7 @@ SetICValues(Widget w, XawVendorShellExtP + XPointer ic_a[20], pe_a[20], st_a[20]; + int ic_cnt = 0, pe_cnt = 0, st_cnt = 0; + XawTextMargin *margin; +- int height; ++ int height = 0; + + if ((ve->im.xim == NULL) || ((p = GetIcTableShared(w, ve)) == NULL) || + (p->xic == NULL)) return; +@@ -884,8 +886,10 @@ SetICValues(Widget w, XawVendorShellExtP + SetVaArg( &pe_a[pe_cnt], (XPointer) p->font_set); pe_cnt++; + SetVaArg( &st_a[st_cnt], (XPointer) XNFontSet); st_cnt++; + SetVaArg( &st_a[st_cnt], (XPointer) p->font_set); st_cnt++; +- height = maxAscentOfFontSet(p->font_set) +- + maxDescentOfFontSet(p->font_set); ++ if (p->font_set) { ++ height = maxAscentOfFontSet(p->font_set) ++ + maxDescentOfFontSet(p->font_set); ++ } + height = SetVendorShellHeight(ve, height); + } + if (p->flg & CIFg) { diff --git a/xaw3d-hsbar.patch b/xaw3d-hsbar.patch new file mode 100644 index 0000000..6ff8763 --- /dev/null +++ b/xaw3d-hsbar.patch @@ -0,0 +1,266 @@ +--- + src/Text.c | 12 +++++-- + src/Viewport.c | 86 +++++++++++++++++---------------------------------------- + 2 files changed, 35 insertions(+), 63 deletions(-) + +Index: libXaw3d-1.6.2/src/Text.c +=================================================================== +--- libXaw3d-1.6.2.orig/src/Text.c ++++ libXaw3d-1.6.2/src/Text.c +@@ -497,8 +497,10 @@ CreateHScrollBar(TextWidget ctx) + (XtPointer) NULL); + + /**/ +- ctx->text.r_margin.bottom += hbar->core.height + hbar->core.border_width; +- ctx->text.margin.bottom = ctx->text.r_margin.bottom; ++ if (ctx->text.scroll_vert == XawtextScrollAlways) { ++ ctx->text.r_margin.bottom += hbar->core.height + hbar->core.border_width; ++ ctx->text.margin.bottom = ctx->text.r_margin.bottom; ++ } + /**/ + PositionHScrollBar(ctx); + if (XtIsRealized((Widget)ctx)) { +@@ -521,8 +523,10 @@ DestroyHScrollBar(TextWidget ctx) + if (hbar == NULL) return; + + /**/ +- ctx->text.r_margin.bottom -= hbar->core.height + hbar->core.border_width; +- ctx->text.margin.bottom = ctx->text.r_margin.bottom; ++ if (ctx->text.scroll_vert == XawtextScrollAlways) { ++ ctx->text.r_margin.bottom -= hbar->core.height + hbar->core.border_width; ++ ctx->text.margin.bottom = ctx->text.r_margin.bottom; ++ } + /**/ + if (ctx->text.vbar == NULL) + XtRemoveCallback((Widget) ctx, XtNunrealizeCallback, UnrealizeScrollbars, +Index: libXaw3d-1.6.2/src/Viewport.c +=================================================================== +--- libXaw3d-1.6.2.orig/src/Viewport.c ++++ libXaw3d-1.6.2/src/Viewport.c +@@ -244,7 +244,7 @@ Initialize(Widget request, Widget new, A + XtVaGetValues((Widget)(w->viewport.threeD), XtNshadowWidth, &sw, NULL); + if (sw) + { +- pad = 2; ++ pad = 2 * sw; + + arg_cnt = 0; + XtSetArg(threeD_args[arg_cnt], XtNborderWidth, 0); arg_cnt++; +@@ -262,8 +262,8 @@ Initialize(Widget request, Widget new, A + XtSetArg(clip_args[arg_cnt], XtNright, XtChainRight); arg_cnt++; + XtSetArg(clip_args[arg_cnt], XtNtop, XtChainTop); arg_cnt++; + XtSetArg(clip_args[arg_cnt], XtNbottom, XtChainBottom); arg_cnt++; +- XtSetArg(clip_args[arg_cnt], XtNwidth, w->core.width - 2 * sw); arg_cnt++; +- XtSetArg(clip_args[arg_cnt], XtNheight, w->core.height - 2 * sw); arg_cnt++; ++ XtSetArg(clip_args[arg_cnt], XtNwidth, w->core.width - pad); arg_cnt++; ++ XtSetArg(clip_args[arg_cnt], XtNheight, w->core.height - pad); arg_cnt++; + + w->viewport.clip = XtCreateManagedWidget("clip", widgetClass, new, + clip_args, arg_cnt); +@@ -283,8 +283,8 @@ Initialize(Widget request, Widget new, A + * Set the clip widget to the correct height. + */ + +- clip_width = w->core.width - 2 * sw; +- clip_height = w->core.height - 2 * sw; ++ clip_width = w->core.width - pad; ++ clip_height = w->core.height - pad; + + if ( (h_bar != NULL) && + ((int)w->core.width > +@@ -509,23 +509,13 @@ ComputeLayout(Widget widget, Boolean que + XtWidgetGeometry intended; + Dimension pad = 0, sw = 0; + +- /* +- * I've made two optimizations here. The first does away with the +- * loop, and the second defers setting the child dimensions to the +- * clip if smaller until after adjusting for possible scrollbars. +- * If you find that these go too far, define the identifiers here +- * as required. -- djhjr +- */ +-#define NEED_LAYOUT_LOOP +-#undef PREP_CHILD_TO_CLIP +- + if (child == (Widget) NULL) return; + + XtVaGetValues(threeD, XtNshadowWidth, &sw, NULL); +- if (sw) pad = 2; ++ if (sw) pad = 2 * sw; + +- clip_width = w->core.width - 2 * sw; +- clip_height = w->core.height - 2 * sw; ++ clip_width = w->core.width - pad; ++ clip_height = w->core.height - pad; + intended.request_mode = CWBorderWidth; + intended.border_width = 0; + +@@ -536,10 +526,8 @@ ComputeLayout(Widget widget, Boolean que + &clip_width, &clip_height); + } + else { +-#ifdef NEED_LAYOUT_LOOP + Dimension prev_width, prev_height; + XtGeometryMask prev_mode; +-#endif + XtWidgetGeometry preferred; + + needshoriz = needsvert = False; +@@ -554,30 +542,29 @@ ComputeLayout(Widget widget, Boolean que + intended.request_mode |= CWWidth; + + #ifdef PREP_CHILD_TO_CLIP +- if ((int)child->core.width < clip_width) +- intended.width = clip_width; ++ if ((int)child->core.width < clip_width + pad) ++ intended.width = clip_width + pad; + else + #endif + intended.width = child->core.width; + +- if (!w->viewport.allowvert) +- intended.request_mode |= CWHeight; + + #ifdef PREP_CHILD_TO_CLIP +- if ((int)child->core.height < clip_height) +- intended.height = clip_height; ++ if ((int)child->core.height < clip_height + pad) ++ intended.height = clip_height + pad; + else + #endif + intended.height = child->core.height; + ++ if (!w->viewport.allowvert) ++ intended.request_mode |= CWHeight; ++ + if (!query) { + preferred.width = child->core.width; + preferred.height = child->core.height; + } + +-#ifdef NEED_LAYOUT_LOOP + do { /* while intended != prev */ +-#endif + if (query) { + (void) XtQueryGeometry( child, &intended, &preferred ); + if ( !(preferred.request_mode & CWWidth) ) +@@ -585,12 +572,9 @@ ComputeLayout(Widget widget, Boolean que + if ( !(preferred.request_mode & CWHeight) ) + preferred.height = intended.height; + } +- +-#ifdef NEED_LAYOUT_LOOP + prev_width = intended.width; + prev_height = intended.height; + prev_mode = intended.request_mode; +-#endif + + /* + * Note that having once decided to turn on either bar +@@ -600,7 +584,7 @@ ComputeLayout(Widget widget, Boolean que + + #define CheckHoriz() \ + if (w->viewport.allowhoriz && \ +- (int)preferred.width > clip_width + 2 * sw) { \ ++ (int)preferred.width > clip_width + pad) { \ + if (!needshoriz) { \ + Widget horiz_bar = w->viewport.horiz_bar; \ + needshoriz = True; \ +@@ -615,7 +599,7 @@ ComputeLayout(Widget widget, Boolean que + /* enddef */ + CheckHoriz(); + if (w->viewport.allowvert && +- (int)preferred.height > clip_height + 2 * sw) { ++ (int)preferred.height > clip_height + pad) { + if (!needsvert) { + Widget vert_bar = w->viewport.vert_bar; + needsvert = True; +@@ -629,38 +613,22 @@ ComputeLayout(Widget widget, Boolean que + intended.height = preferred.height; + } + +-#ifdef PREP_CHILD_TO_CLIP + if (!w->viewport.allowhoriz || +- (int)preferred.width < clip_width) { +- intended.width = clip_width; ++ (int)preferred.width < clip_width + pad) { ++ intended.width = clip_width + pad; + intended.request_mode |= CWWidth; + } + if (!w->viewport.allowvert || +- (int)preferred.height < clip_height) { +- intended.height = clip_height; ++ (int)preferred.height < clip_height + pad) { ++ intended.height = clip_height + pad; + intended.request_mode |= CWHeight; + } +-#endif +-#ifdef NEED_LAYOUT_LOOP ++ + } while ( intended.request_mode != prev_mode || + (intended.request_mode & CWWidth && + intended.width != prev_width) || + (intended.request_mode & CWHeight && + intended.height != prev_height) ); +-#endif +- +-#ifndef PREP_CHILD_TO_CLIP +- if (!w->viewport.allowhoriz || +- (int)preferred.width < clip_width) { +- intended.width = clip_width; +- intended.request_mode |= CWWidth; +- } +- if (!w->viewport.allowvert || +- (int)preferred.height < clip_height) { +- intended.height = clip_height; +- intended.request_mode |= CWHeight; +- } +-#endif + } + + bar_width = bar_height = 0; +@@ -705,7 +673,7 @@ ComputeLayout(Widget widget, Boolean que + else { + int bw = bar->core.border_width; + XtResizeWidget( bar, +- (Dimension)(clip_width + 2 * sw), bar->core.height, ++ (Dimension)(clip_width + pad), bar->core.height, + (Dimension)bw ); + XtMoveWidget( bar, + (Position)((needsvert && !w->viewport.useright) +@@ -730,7 +698,7 @@ ComputeLayout(Widget widget, Boolean que + else { + int bw = bar->core.border_width; + XtResizeWidget( bar, +- bar->core.width, (Dimension)(clip_height + 2 * sw), ++ bar->core.width, (Dimension)(clip_height + pad), + (Dimension)bw ); + XtMoveWidget( bar, + (Position)(w->viewport.useright +@@ -780,7 +748,7 @@ ComputeWithForceBars(Widget widget, Bool + */ + + XtVaGetValues((Widget)(w->viewport.threeD), XtNshadowWidth, &sw, NULL); +- if (sw) pad = 2; ++ if (sw) pad = 2 * sw; + + if (w->viewport.allowvert) { + if (w->viewport.vert_bar == NULL) +@@ -926,7 +894,7 @@ GeometryRequestPlusScrollbar(ViewportWid + Dimension pad = 0, sw = 0; + + XtVaGetValues((Widget)(w->viewport.threeD), XtNshadowWidth, &sw, NULL); +- if (sw) pad = 2; ++ if (sw) pad = 2 * sw; + + plusScrollbars = *request; + if ((bar = w->viewport.horiz_bar) == (Widget)NULL) +@@ -997,7 +965,7 @@ GeometryManager(Widget child, XtWidgetGe + return XtGeometryNo; + + XtVaGetValues((Widget)(w->viewport.threeD), XtNshadowWidth, &sw, NULL); +- if (sw) pad = 2; ++ if (sw) pad = 2 * sw; + + allowed = *request; + diff --git a/xaw3d-secure.patch b/xaw3d-secure.patch new file mode 100644 index 0000000..0f87661 --- /dev/null +++ b/xaw3d-secure.patch @@ -0,0 +1,524 @@ +--- + libXaw3d-1.6.5/include/X11/Xaw3d/AsciiSrcP.h | 6 +- + libXaw3d-1.6.5/include/X11/Xaw3d/MultiSrcP.h | 6 +- + libXaw3d-1.6.5/src/Layout.c | 18 +++++- + libXaw3d-1.6.5/src/MenuButton.c | 15 ++++- + libXaw3d-1.6.5/src/Simple.c | 18 ++++-- + libXaw3d-1.6.5/src/SimpleMenu.c | 16 ++++-- + libXaw3d-1.6.5/src/SmeBSB.c | 51 ++++++++++++------- + libXaw3d-1.6.5/src/Text.c | 50 ++++++++++++++----- + libXaw3d-1.6.5/src/TextPop.c | 71 ++++++++++++++++++++++----- + libXaw3d-1.6.5/src/XawAlloc.h | 10 +++ + libXaw3d-1.6.5/src/XawI18n.h | 2 + libXaw3d-1.6.5/src/XawIm.c | 4 - + 12 files changed, 206 insertions(+), 61 deletions(-) + +--- libXaw3d-1.6.5/include/X11/Xaw3d/AsciiSrcP.h ++++ libXaw3d-1.6.5/include/X11/Xaw3d/AsciiSrcP.h 2023-08-16 12:29:23.549080277 +0000 +@@ -80,7 +80,11 @@ SOFTWARE. + #ifdef L_tmpnam + #define TMPSIZ L_tmpnam + #else +-#define TMPSIZ 32 /* bytes to allocate for tmpnam */ ++#ifdef PATH_MAX ++#define TMPSIZ PATH_MAX ++#else ++#define TMPSIZ 1024 /* bytes to allocate for tmpnam */ ++#endif + #endif + + #define MAGIC_VALUE ((XawTextPosition) -1) /* Magic value. */ +--- libXaw3d-1.6.5/include/X11/Xaw3d/MultiSrcP.h ++++ libXaw3d-1.6.5/include/X11/Xaw3d/MultiSrcP.h 2023-08-16 12:29:23.549080277 +0000 +@@ -111,7 +111,11 @@ SOFTWARE. + #ifdef L_tmpnam + #define TMPSIZ L_tmpnam + #else +-#define TMPSIZ 32 /* bytes to allocate for tmpnam */ ++#ifdef PATH_MAX ++#define TMPSIZ PATH_MAX ++#else ++#define TMPSIZ 1024 /* bytes to allocate for tmpnam */ ++#endif + #endif + + #define MAGIC_VALUE ((XawTextPosition) -1) /* Magic value. */ +--- libXaw3d-1.6.5/src/Layout.c ++++ libXaw3d-1.6.5/src/Layout.c 2023-08-16 12:29:23.549080277 +0000 +@@ -40,6 +40,8 @@ + # include + #endif + ++#include "XawAlloc.h" ++ + #include + #include + +@@ -565,10 +567,18 @@ Evaluate (LayoutWidget l, BoxPtr box, Ex + nexpr = LookupVariable (box, expr->u.variable); + if (!nexpr) + { +- char buf[256]; +- (void) sprintf (buf, "Layout: undefined variable %s\n", +- XrmQuarkToString (expr->u.variable)); +- XtError (buf); ++ char *pvar = XrmQuarkToString (expr->u.variable); ++ char *msg = "Layout: undefined variable "; ++ int len = strlen(msg) + strlen(pvar) + 2; ++ char *pbuf, buf[256]; ++ ++ pbuf = XtStackAlloc(len, buf); ++ if (pbuf != NULL) ++ { ++ sprintf(pbuf, "%s%s\n", msg, pvar); ++ XtError (buf); ++ XtStackFree(pbuf, buf); ++ } + return 0.0; + } + return Evaluate (l, box, nexpr, natural); +--- libXaw3d-1.6.5/src/MenuButton.c ++++ libXaw3d-1.6.5/src/MenuButton.c 2023-08-16 12:29:23.549080277 +0000 +@@ -54,6 +54,8 @@ in this Software without prior written a + #include + #include + ++#include "XawAlloc.h" ++ + static void ClassInitialize(void); + static void PopupMenu(Widget, XEvent *, String *, Cardinal *); + +@@ -177,9 +179,16 @@ PopupMenu(Widget w, XEvent *event, Strin + + if (menu == NULL) { + char error_buf[BUFSIZ]; +- (void) sprintf(error_buf, "MenuButton: %s %s.", +- "Could not find menu widget named", mbw->menu_button.menu_name); +- XtAppWarning(XtWidgetToApplicationContext(w), error_buf); ++ char *err1 = "MenuButton: Could not find menu widget named "; ++ char *perr; ++ int len; ++ ++ len = strlen(err1) + strlen(mbw->menu_button.menu_name) + 1 + 1; ++ perr = XtStackAlloc(len, error_buf); ++ if (perr == NULL) return; ++ sprintf(perr, "%s%s.", err1, mbw->menu_button.menu_name); ++ XtAppWarning(XtWidgetToApplicationContext(w), perr); ++ XtStackFree(perr, error_buf); + return; + } + if (!XtIsRealized(menu)) +--- libXaw3d-1.6.5/src/Simple.c ++++ libXaw3d-1.6.5/src/Simple.c 2023-08-16 12:29:23.553080205 +0000 +@@ -57,6 +57,8 @@ SOFTWARE. + #include + #include + ++#include "XawAlloc.h" ++ + #define offset(field) XtOffsetOf(SimpleRec, simple.field) + + static XtResource resources[] = { +@@ -154,11 +156,17 @@ ClassPartInitialize(WidgetClass class) + + if (c->simple_class.change_sensitive == NULL) { + char buf[BUFSIZ]; +- +- (void) sprintf(buf, +- "%s Widget: The Simple Widget class method 'change_sensitive' is undefined.\nA function must be defined or inherited.", +- c->core_class.class_name); +- XtWarning(buf); ++ char *pbuf; ++ char *msg1 = " Widget: The Simple Widget class method 'change_sensitive' is undefined.\nA function must be defined or inherited."; ++ int len; ++ ++ len = strlen(msg1) + strlen(c->core_class.class_name) + 1; ++ pbuf = XtStackAlloc(len, buf); ++ if (pbuf != NULL) { ++ sprintf(pbuf, "%s%s", c->core_class.class_name, msg1); ++ XtWarning(pbuf); ++ XtStackFree(pbuf, buf); ++ } + c->simple_class.change_sensitive = ChangeSensitive; + } + +--- libXaw3d-1.6.5/src/SimpleMenu.c ++++ libXaw3d-1.6.5/src/SimpleMenu.c 2023-08-16 12:29:23.553080205 +0000 +@@ -52,6 +52,8 @@ in this Software without prior written a + #include + #include + ++#include "XawAlloc.h" ++ + #define streq(a, b) ( strcmp((a), (b)) == 0 ) + + #define offset(field) XtOffsetOf(SimpleMenuRec, simple_menu.field) +@@ -749,9 +751,17 @@ PositionMenuAction(Widget w, XEvent * ev + + if ( (menu = FindMenu(w, params[0])) == NULL) { + char error_buf[BUFSIZ]; +- (void) sprintf(error_buf, "%s '%s'", +- "Xaw - SimpleMenuWidget: could not find menu named: ", params[0]); +- XtAppWarning(XtWidgetToApplicationContext(w), error_buf); ++ char *err1 = "Xaw - SimpleMenuWidget: could not find menu named: "; ++ char *perr; ++ int len; ++ ++ len = strlen(err1) + strlen(params[0]) + 2 + 1; ++ perr = XtStackAlloc(len, error_buf); ++ if (perr == NULL) ++ return; ++ sprintf(perr, "%s'%s'", err1, params[0]); ++ XtAppWarning(XtWidgetToApplicationContext(w), perr); ++ XtStackFree(perr, error_buf); + return; + } + +--- libXaw3d-1.6.5/src/SmeBSB.c ++++ libXaw3d-1.6.5/src/SmeBSB.c 2023-08-16 12:29:23.553080205 +0000 +@@ -52,6 +52,7 @@ in this Software without prior written a + #include + #include + #include ++#include "XawAlloc.h" + + /* needed for abs() */ + #include +@@ -696,6 +697,8 @@ GetBitmapInfo(Widget w, Boolean is_left) + int x, y; + unsigned int width, height, bw; + char buf[BUFSIZ]; ++ char *pbuf; ++ int len; + + if (is_left) { + width = height = 0; +@@ -704,18 +707,24 @@ GetBitmapInfo(Widget w, Boolean is_left) + if (!XGetGeometry(XtDisplayOfObject(w), + entry->sme_bsb.left_bitmap, &root, &x, &y, + &width, &height, &bw, &entry->sme_bsb.left_depth)) { +- (void) sprintf(buf, "Xaw SmeBSB Object: %s %s \"%s\".", +- "Could not get Left Bitmap", +- "geometry information for menu entry", +- XtName(w)); +- XtAppError(XtWidgetToApplicationContext(w), buf); ++ char *err1 = "Xaw SmeBSB Object: Could not get Left Bitmap geometry information for menu entry "; ++ len = strlen(err1) + strlen(XtName(w)) + 3 + 1; ++ pbuf = XtStackAlloc(len, buf); ++ if (pbuf == NULL) return; ++ sprintf(pbuf, "%s\"%s\".", err1, XtName(w)); ++ XtAppError(XtWidgetToApplicationContext(w), pbuf); ++ XtStackFree(pbuf, buf); + } + #ifdef NEVER + if (entry->sme_bsb.left_depth != 1) { +- (void) sprintf(buf, "Xaw SmeBSB Object: %s \"%s\" %s.", +- "Left Bitmap of entry", XtName(w), +- "is not one bit deep"); +- XtAppError(XtWidgetToApplicationContext(w), buf); ++ char *err1 = "Xaw SmeBSB Object: Left Bitmap of entry "; ++ char *err2 = " is not one bit deep."; ++ len = strlen(err1) + strlen(err2) + strlen(XtName(w)) + 2 + 1; ++ pbuf = XtStackAlloc(len, buf); ++ if (pbuf == NULL) return; ++ sprintf(pbuf, "%s\"%s\"%s", err1, XtName(w), err2); ++ XtAppError(XtWidgetToApplicationContext(w), pbuf); ++ XtStackFree(pbuf, buf); + } + #endif + } +@@ -729,18 +738,24 @@ GetBitmapInfo(Widget w, Boolean is_left) + if (!XGetGeometry(XtDisplayOfObject(w), + entry->sme_bsb.right_bitmap, &root, &x, &y, + &width, &height, &bw, &entry->sme_bsb.right_depth)) { +- (void) sprintf(buf, "Xaw SmeBSB Object: %s %s \"%s\".", +- "Could not get Right Bitmap", +- "geometry information for menu entry", +- XtName(w)); +- XtAppError(XtWidgetToApplicationContext(w), buf); ++ char *err1 = "Xaw SmeBSB Object: Could not get Right Bitmap geometry information for menu entry "; ++ len = strlen(err1) + strlen(XtName(w)) + 3 + 1; ++ pbuf = XtStackAlloc(len, buf); ++ if (pbuf == NULL) return; ++ sprintf(pbuf, "%s\"%s\".", err1, XtName(w)); ++ XtAppError(XtWidgetToApplicationContext(w), pbuf); ++ XtStackFree(pbuf, buf); + } + #ifdef NEVER + if (entry->sme_bsb.right_depth != 1) { +- (void) sprintf(buf, "Xaw SmeBSB Object: %s \"%s\" %s.", +- "Right Bitmap of entry", XtName(w), +- "is not one bit deep"); +- XtAppError(XtWidgetToApplicationContext(w), buf); ++ char *err1 = "Xaw SmeBSB Object: Right Bitmap of entry "; ++ char *err2 = " is not one bit deep."; ++ len = strlen(err1) + strlen(err2) + strlen(XtName(w)) + 2 + 1; ++ pbuf = XtStackAlloc(len, buf); ++ if (pbuf == NULL) return; ++ sprintf(pbuf, "%s\"%s\"%s", err1, XtName(w), err2); ++ XtAppError(XtWidgetToApplicationContext(w), pbuf); ++ XtStackFree(pbuf, buf); + } + #endif + } +--- libXaw3d-1.6.5/src/Text.c ++++ libXaw3d-1.6.5/src/Text.c 2023-08-16 12:29:23.553080205 +0000 +@@ -78,6 +78,8 @@ SOFTWARE. + #include + #include /* for isprint() */ + ++#include "XawAlloc.h" ++ + #ifndef MAX_LEN_CT + #define MAX_LEN_CT 6 /* for sequence: ESC $ ( A \xx \xx */ + #endif +@@ -535,7 +537,8 @@ Initialize(Widget request, Widget new, A + { + TextWidget ctx = (TextWidget) new; + char error_buf[BUFSIZ]; +- int s; ++ char *perr; ++ int s, len; + + ctx->text.threeD = XtVaCreateWidget("threeD", threeDWidgetClass, new, + XtNx, 0, XtNy, 0, +@@ -584,10 +587,17 @@ Initialize(Widget request, Widget new, A + if (ctx->text.scroll_vert != XawtextScrollNever) { + if ( (ctx->text.resize == XawtextResizeHeight) || + (ctx->text.resize == XawtextResizeBoth) ) { +- (void) sprintf(error_buf, "Xaw Text Widget %s:\n %s %s.", ctx->core.name, +- "Vertical scrolling not allowed with height resize.\n", +- "Vertical scrolling has been DEACTIVATED."); +- XtAppWarning(XtWidgetToApplicationContext(new), error_buf); ++ char *err1 = "Xaw Text Widget "; ++ char *err2 = ":\nVertical scrolling not allowed with height resize.\n"; ++ char *err3 = "Vertical scrolling has been DEACTIVATED."; ++ len = strlen(err1) + strlen(err2) + strlen(err3) + ++ strlen(ctx->core.name) + 1; ++ perr = XtStackAlloc(len, error_buf); ++ if (perr != NULL) { ++ (void) sprintf(perr, "%s%s%s%s", err1, ctx->core.name, err2, err3); ++ XtAppWarning(XtWidgetToApplicationContext(new), perr); ++ XtStackFree(perr, error_buf); ++ } + ctx->text.scroll_vert = XawtextScrollNever; + } + else if (ctx->text.scroll_vert == XawtextScrollAlways) +@@ -596,18 +606,32 @@ Initialize(Widget request, Widget new, A + + if (ctx->text.scroll_horiz != XawtextScrollNever) { + if (ctx->text.wrap != XawtextWrapNever) { +- (void) sprintf(error_buf, "Xaw Text Widget %s:\n %s %s.", ctx->core.name, +- "Horizontal scrolling not allowed with wrapping active.\n", +- "Horizontal scrolling has been DEACTIVATED."); +- XtAppWarning(XtWidgetToApplicationContext(new), error_buf); ++ char *err1 = "Xaw Text Widget "; ++ char *err2 = ":\nHorizontal scrolling not allowed with wrapping active."; ++ char *err3 = "\nHorizontal scrolling has been DEACTIVATED."; ++ len = strlen(err1) + strlen(err2) + strlen(err3) + ++ strlen(ctx->core.name) + 1; ++ perr = XtStackAlloc(len, error_buf); ++ if (perr != NULL) { ++ (void) sprintf(perr, "%s%s%s%s", err1, ctx->core.name, err2, err3); ++ XtAppWarning(XtWidgetToApplicationContext(new), perr); ++ XtStackFree(perr, error_buf); ++ } + ctx->text.scroll_horiz = XawtextScrollNever; + } + else if ( (ctx->text.resize == XawtextResizeWidth) || + (ctx->text.resize == XawtextResizeBoth) ) { +- (void) sprintf(error_buf, "Xaw Text Widget %s:\n %s %s.", ctx->core.name, +- "Horizontal scrolling not allowed with width resize.\n", +- "Horizontal scrolling has been DEACTIVATED."); +- XtAppWarning(XtWidgetToApplicationContext(new), error_buf); ++ char *err1 = "Xaw Text Widget "; ++ char *err2 = ":\nHorizontal scrolling not allowed with width resize.\n"; ++ char *err3 = "Horizontal scrolling has been DEACTIVATED."; ++ len = strlen(err1) + strlen(err2) + strlen(err3) + ++ strlen(ctx->core.name) + 1; ++ perr = XtStackAlloc(len, error_buf); ++ if (perr != NULL) { ++ (void) sprintf(perr, "%s%s%s%s", err1, ctx->core.name, err2, err3); ++ XtAppWarning(XtWidgetToApplicationContext(new), perr); ++ XtStackFree(perr, error_buf); ++ } + ctx->text.scroll_horiz = XawtextScrollNever; + } + else if (ctx->text.scroll_horiz == XawtextScrollAlways) +--- libXaw3d-1.6.5/src/TextPop.c ++++ libXaw3d-1.6.5/src/TextPop.c 2023-08-16 12:30:21.840038444 +0000 +@@ -68,6 +68,8 @@ in this Software without prior written a + #include /* for O_RDONLY */ + #include + ++#include "XawAlloc.h" ++ + #ifdef O_CLOEXEC + #define FOPEN_CLOEXEC "e" + #else +@@ -791,6 +793,8 @@ static Boolean + DoSearch(struct SearchAndReplace * search) + { + char msg[BUFSIZ]; ++ char *pmsg; ++ int len; + Widget tw = XtParent(search->search_popup); + XawTextPosition pos; + XawTextScanDirection dir; +@@ -817,9 +821,20 @@ DoSearch(struct SearchAndReplace * searc + /* The Raw string in find.ptr may be WC I can't use here, so I re - call + GetString to get a tame version. */ + +- if (pos == XawTextSearchError) +- (void) sprintf( msg, "Could not find string ``%s''.", GetString( search->search_text ) ); +- else { ++ if (pos == XawTextSearchError) { ++ char *msg1 = "Could not find string ``"; ++ char *msg2 = "''."; ++ len = strlen(msg1) + strlen(msg2) + ++ strlen(GetString( search->search_text )) + 1; ++ pmsg = XtStackAlloc(len, msg); ++ if (pmsg != NULL) { ++ (void) sprintf( pmsg, "%s%s%s", msg1, GetString( search->search_text ), ++ msg2); ++ } else { ++ pmsg = msg; ++ (void) sprintf( pmsg, "Could not find string"); ++ } ++ } else { + if (dir == XawsdRight) + XawTextSetInsertionPoint( tw, pos + text.length); + else +@@ -831,7 +846,8 @@ DoSearch(struct SearchAndReplace * searc + } + + XawTextUnsetSelection(tw); +- SetSearchLabels(search, msg, "", TRUE); ++ SetSearchLabels(search, pmsg, "", TRUE); ++ XtStackFree(pmsg, msg); + return(FALSE); + } + +@@ -952,13 +968,26 @@ Replace(struct SearchAndReplace *search, + if (new_pos == XawTextSearchError) { + if (count == 0) { + char msg[BUFSIZ]; ++ char *pmsg; ++ int len; ++ char *msg1 = "*** Error: Could not find string ``"; ++ char *msg2 = "''. ***"; + + /* The Raw string in find.ptr may be WC I can't use here, + so I call GetString to get a tame version.*/ + +- (void) sprintf( msg, "%s %s %s", "*** Error: Could not find string ``", +- GetString( search->search_text ), "''. ***"); +- SetSearchLabels(search, msg, "", TRUE); ++ len = strlen(msg1) + strlen(msg2) + ++ strlen(GetString( search->search_text )) + 1; ++ pmsg = XtStackAlloc(len, msg); ++ if (pmsg != NULL) { ++ (void) sprintf( pmsg, "%s%s%s", msg1, ++ GetString( search->search_text ), msg2); ++ } else { ++ pmsg = msg; ++ (void) sprintf(pmsg, "*** Error: Could not find string ***"); ++ } ++ SetSearchLabels(search, pmsg, "", TRUE); ++ XtStackFree(pmsg, msg); + return(FALSE); + } + else +@@ -981,9 +1010,22 @@ Replace(struct SearchAndReplace *search, + + if (XawTextReplace(tw, pos, end_pos, &replace) != XawEditDone) { + char msg[BUFSIZ]; +- +- (void) sprintf( msg, "'%s' with '%s'. ***", find.ptr, replace.ptr); ++ char *pmsg; ++ int len; ++ char *msg1 = "' with '"; ++ char *msg2 = "'. ***"; ++ ++ len = 1 + strlen(msg1) + strlen(msg2) + strlen(find.ptr) + ++ strlen(replace.ptr) + 1; ++ pmsg = XtStackAlloc(len, msg); ++ if (pmsg != NULL) { ++ (void) sprintf( pmsg, "`%s%s%s%s", find.ptr, msg1, replace.ptr, msg2); ++ } else { ++ pmsg = msg; ++ (void) sprintf(pmsg, "string ***"); ++ } + SetSearchLabels(search, "*** Error while replacing", msg, TRUE); ++ XtStackFree(pmsg, msg); + return(FALSE); + } + +@@ -1124,13 +1166,20 @@ SetResourceByName(Widget shell, char *na + { + Widget temp_widget; + char buf[BUFSIZ]; ++ char *pbuf; ++ int len; + +- (void) sprintf(buf, "%s.%s", FORM_NAME, name); ++ len = strlen(FORM_NAME) + strlen(name) + 2; ++ pbuf = XtStackAlloc(len, buf); ++ if (pbuf == NULL) return FALSE; ++ (void) sprintf(pbuf, "%s.%s", FORM_NAME, name); + +- if ( (temp_widget = XtNameToWidget(shell, buf)) != NULL) { ++ if ( (temp_widget = XtNameToWidget(shell, pbuf)) != NULL) { + SetResource(temp_widget, res_name, value); ++ XtStackFree(pbuf, buf); + return(TRUE); + } ++ XtStackFree(pbuf, buf); + return(FALSE); + } + +--- libXaw3d-1.6.5/src/XawAlloc.h ++++ libXaw3d-1.6.5/src/XawAlloc.h 2023-08-16 12:29:23.553080205 +0000 +@@ -0,0 +1,10 @@ ++/* $XFree86: xc/lib/Xaw/XawAlloc.h,v 1.1.2.1 1998/05/16 09:05:23 dawes Exp $ */ ++ ++#define XtStackAlloc(size, stack_cache_array) \ ++ ((size) <= sizeof(stack_cache_array) \ ++ ? (XtPointer)(stack_cache_array) \ ++ : XtMalloc((unsigned)(size))) ++ ++#define XtStackFree(pointer, stack_cache_array) \ ++ if ((pointer) != ((XtPointer)(stack_cache_array))) XtFree(pointer); else ++ +--- libXaw3d-1.6.5/src/XawI18n.h ++++ libXaw3d-1.6.5/src/XawI18n.h 2023-08-16 12:29:23.553080205 +0000 +@@ -28,12 +28,14 @@ in this Software without prior written a + #ifdef HAVE_WCTYPE_H + #include + #ifdef HAVE_WIDEC_H ++#ifndef NO_WIDEC_H + #include + #define wcslen(c) wslen(c) + #define wcscpy(d,s) wscpy(d,s) + #define wcsncpy(d,s,l) wsncpy(d,s,l) + #endif + #endif ++#endif + + #ifdef HAVE_WCHAR_H + #include +--- libXaw3d-1.6.5/src/XawIm.c ++++ libXaw3d-1.6.5/src/XawIm.c 2023-08-16 12:29:23.553080205 +0000 +@@ -1524,10 +1524,10 @@ _XawImWcLookupString( + + if ((vw = SearchVendorShell(inwidg)) && (ve = GetExtPart(vw)) && + ve->im.xim && (p = GetIcTableShared(inwidg, ve)) && p->xic) { +- return(XwcLookupString(p->xic, event, buffer_return, bytes_buffer, ++ return(XwcLookupString(p->xic, event, buffer_return, bytes_buffer/sizeof(wchar_t), + keysym_return, status_return)); + } +- ret = XLookupString( event, tmp_buf, 64, keysym_return, ++ ret = XLookupString( event, tmp_buf, sizeof(tmp_buf), keysym_return, + (XComposeStatus*) status_return ); + for ( i = 0, tmp_p = tmp_buf, buf_p = buffer_return; i < ret; i++ ) { + *buf_p++ = _Xaw_atowc(*tmp_p++); diff --git a/xaw3d-thumb.patch b/xaw3d-thumb.patch new file mode 100644 index 0000000..c201a44 --- /dev/null +++ b/xaw3d-thumb.patch @@ -0,0 +1,970 @@ +--- + include/X11/Xaw3d/Scrollbar.h | 6 + include/X11/Xaw3d/ScrollbarP.h | 3 + include/X11/Xaw3d/SmeThreeD.h | 3 + include/X11/Xaw3d/SmeThreeDP.h | 1 + include/X11/Xaw3d/ThreeD.h | 3 + include/X11/Xaw3d/ThreeDP.h | 1 + src/Layout.c | 2 + src/Paned.c | 6 + src/Scrollbar.c | 533 ++++++++++++++++++++++++++++++----------- + src/SmeThreeD.c | 19 + + src/ThreeD.c | 6 + 11 files changed, 436 insertions(+), 147 deletions(-) + +Index: libXaw3d-1.6.2/include/X11/Xaw3d/Scrollbar.h +=================================================================== +--- libXaw3d-1.6.2.orig/include/X11/Xaw3d/Scrollbar.h ++++ libXaw3d-1.6.2/include/X11/Xaw3d/Scrollbar.h +@@ -92,6 +92,7 @@ SOFTWARE. + scrollRCursor Cursor Cursor XC_sb_right_arrow + scrollUCursor Cursor Cursor XC_sb_up_arrow + scrollVCursor Cursor Cursor XC_sb_v_double_arrow ++ scrollbarBackground ScrollbarBackground Pixel XtDefaultForeground + sensitive Sensitive Boolean True + shown Shown Float 0.0 + thickness Thickness Dimension 14 +@@ -99,6 +100,7 @@ SOFTWARE. + thumbProc Callback XtCallbackList NULL + topOfThumb TopOfThumb Float 0.0 + pickTop PickTop Boolean False ++ pushThumb PushThumb Boolean True + translations Translations TranslationTable see source or doc + width Width Dimension thickness or length + x Position Position 0 +@@ -113,11 +115,15 @@ SOFTWARE. + #define XtCMinimumThumb "MinimumThumb" + #define XtCShown "Shown" + #define XtCTopOfThumb "TopOfThumb" ++#define XtCScrollbarBackground "ScrollbarBackground" + #define XtCPickTop "PickTop" ++#define XtCPushThumb "PushThumb" + + #define XtNminimumThumb "minimumThumb" + #define XtNtopOfThumb "topOfThumb" ++#define XtNscrollbarBackground "scrollbarBackground" + #define XtNpickTop "pickTop" ++#define XtNpushThumb "pushThumb" + + typedef struct _ScrollbarRec *ScrollbarWidget; + typedef struct _ScrollbarClassRec *ScrollbarWidgetClass; +Index: libXaw3d-1.6.2/include/X11/Xaw3d/ScrollbarP.h +=================================================================== +--- libXaw3d-1.6.2.orig/include/X11/Xaw3d/ScrollbarP.h ++++ libXaw3d-1.6.2/include/X11/Xaw3d/ScrollbarP.h +@@ -66,6 +66,7 @@ typedef struct { + XtCallbackList thumbProc; /* jump (to position) scroll */ + XtCallbackList jumpProc; /* same as thumbProc but pass data by ref */ + Pixmap thumb; /* thumb color */ ++ Pixel background; /* background color */ + #ifndef XAW_ARROW_SCROLLBARS + Cursor upCursor; /* scroll up cursor */ + Cursor downCursor; /* scroll down cursor */ +@@ -91,9 +92,11 @@ typedef struct { + char direction; /* a scroll has started; which direction */ + #endif + GC gc; /* a (shared) gc */ ++ GC bgc; /* a (shared) gc for background */ + Position topLoc; /* Pixel that corresponds to top */ + Dimension shownLength; /* Num pixels corresponding to shown */ + Boolean pick_top; /* pick thumb at top or anywhere*/ ++ Boolean push_thumb; /* push thumb in or not */ + + } ScrollbarPart; + +Index: libXaw3d-1.6.2/include/X11/Xaw3d/SmeThreeD.h +=================================================================== +--- libXaw3d-1.6.2.orig/include/X11/Xaw3d/SmeThreeD.h ++++ libXaw3d-1.6.2/include/X11/Xaw3d/SmeThreeD.h +@@ -46,6 +46,7 @@ SOFTWARE. + bottomShadowContrast BottomShadowContrast Int 40 + userData UserData XtPointer NULL + beNiceToColormap BeNiceToColormap Boolean False ++ invertBorder InvertBorder Boolean False + + */ + +@@ -63,6 +64,8 @@ SOFTWARE. + #define XtCBeNiceToColormap "BeNiceToColormap" + #define XtNbeNiceToColourmap "beNiceToColormap" + #define XtCBeNiceToColourmap "BeNiceToColormap" ++#define XtNinvertBorder "invertBorder" ++#define XtCInvertBorder "InvertBorder" + #define XtNuserData "userData" + #define XtCUserData "UserData" + +Index: libXaw3d-1.6.2/include/X11/Xaw3d/SmeThreeDP.h +=================================================================== +--- libXaw3d-1.6.2.orig/include/X11/Xaw3d/SmeThreeDP.h ++++ libXaw3d-1.6.2/include/X11/Xaw3d/SmeThreeDP.h +@@ -43,6 +43,7 @@ typedef struct { + XtPointer user_data; + Boolean be_nice_to_cmap; + Boolean shadowed; ++ Boolean invert_border; + } SmeThreeDPart; + + /* Full instance record declaration */ +Index: libXaw3d-1.6.2/include/X11/Xaw3d/ThreeD.h +=================================================================== +--- libXaw3d-1.6.2.orig/include/X11/Xaw3d/ThreeD.h ++++ libXaw3d-1.6.2/include/X11/Xaw3d/ThreeD.h +@@ -45,6 +45,7 @@ SOFTWARE. + bottomShadowContrast BottomShadowContrast Int 40 + userData UserData XtPointer NULL + beNiceToColormap BeNiceToColormap Boolean False ++ invertBorder InvertBorder Boolean False + relief Relief XtRelief XtReliefRaised + + */ +@@ -63,6 +64,8 @@ SOFTWARE. + #define XtCBeNiceToColormap "BeNiceToColormap" + #define XtNbeNiceToColourmap "beNiceToColormap" + #define XtCBeNiceToColourmap "BeNiceToColormap" ++#define XtNinvertBorder "invertBorder" ++#define XtCInvertBorder "InvertBorder" + #define XtNuserData "userData" + #define XtCUserData "UserData" + #define XtNrelief "relief" +Index: libXaw3d-1.6.2/include/X11/Xaw3d/ThreeDP.h +=================================================================== +--- libXaw3d-1.6.2.orig/include/X11/Xaw3d/ThreeDP.h ++++ libXaw3d-1.6.2/include/X11/Xaw3d/ThreeDP.h +@@ -43,6 +43,7 @@ typedef struct { + GC bot_shadow_GC; + XtPointer user_data; + Boolean be_nice_to_cmap; ++ Boolean invert_border; + XtRelief relief; + } ThreeDPart; + +Index: libXaw3d-1.6.2/src/Layout.c +=================================================================== +--- libXaw3d-1.6.2.orig/src/Layout.c ++++ libXaw3d-1.6.2/src/Layout.c +@@ -509,7 +509,7 @@ LookupVariable (BoxPtr child, XrmQuark q + static double + Evaluate (LayoutWidget l, BoxPtr box, ExprPtr expr, double natural) + { +- double left, right, down; ++ double left = 0.0, right = 0.0, down = 0.0; + Widget widget; + SubInfoPtr info; + +Index: libXaw3d-1.6.2/src/Paned.c +=================================================================== +--- libXaw3d-1.6.2.orig/src/Paned.c ++++ libXaw3d-1.6.2/src/Paned.c +@@ -1114,13 +1114,14 @@ ManageAndUnmanageGrips(PanedWidget pw) + managedP = managed_grips = (WidgetList) XtMalloc(alloc_size); + unmanagedP = unmanaged_grips = (WidgetList) XtMalloc(alloc_size); + +- ForAllChildren(pw, childP) ++ ForAllChildren(pw, childP) { + if (IsPane(*childP) && HasGrip(*childP)) { + if ( XtIsManaged(*childP) ) + *managedP++ = PaneInfo(*childP)->grip; + else + *unmanagedP++ = PaneInfo(*childP)->grip; + } ++ } + + if (managedP != managed_grips) { + *unmanagedP++ = *--managedP; /* Last grip is never managed */ +@@ -1615,7 +1616,7 @@ ChangeManaged(Widget w) + ResortChildren(pw); + + pw->paned.num_panes = 0; +- ForAllChildren(pw, childP) ++ ForAllChildren(pw, childP) { + if ( IsPane(*childP) ) { + if ( XtIsManaged(*childP) ) { + Pane pane = PaneInfo(*childP); +@@ -1627,6 +1628,7 @@ ChangeManaged(Widget w) + else + break; /* This list is already sorted. */ + } ++ } + + SetChildrenPrefSizes( (PanedWidget) w, size); + +Index: libXaw3d-1.6.2/src/Scrollbar.c +=================================================================== +--- libXaw3d-1.6.2.orig/src/Scrollbar.c ++++ libXaw3d-1.6.2/src/Scrollbar.c +@@ -134,14 +134,18 @@ static XtResource resources[] = { + Offset(scrollbar.thumb), XtRImmediate, (XtPointer) XtUnspecifiedPixmap}, + {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), + Offset(scrollbar.foreground), XtRString, XtDefaultForeground}, ++ {XtNscrollbarBackground, XtCScrollbarBackground, XtRPixel, sizeof(Pixel), ++ Offset(scrollbar.background), XtRString, XtDefaultForeground}, + {XtNshown, XtCShown, XtRFloat, sizeof(float), + Offset(scrollbar.shown), XtRFloat, (XtPointer)&floatZero}, + {XtNtopOfThumb, XtCTopOfThumb, XtRFloat, sizeof(float), + Offset(scrollbar.top), XtRFloat, (XtPointer)&floatZero}, + {XtNpickTop, XtCPickTop, XtRBoolean, sizeof(Boolean), +- Offset(scrollbar.pick_top), XtRBoolean, (XtPointer) False}, ++ Offset(scrollbar.pick_top), XtRImmediate, (XtPointer) False}, + {XtNminimumThumb, XtCMinimumThumb, XtRDimension, sizeof(Dimension), +- Offset(scrollbar.min_thumb), XtRImmediate, (XtPointer) 7} ++ Offset(scrollbar.min_thumb), XtRImmediate, (XtPointer) 7}, ++ {XtNpushThumb, XtCPushThumb, XtRBoolean, sizeof(Boolean), ++ Offset(scrollbar.push_thumb), XtRImmediate, (XtPointer) True} + }; + #undef Offset + +@@ -215,8 +219,7 @@ ScrollbarClassRec scrollbarClassRec = { + /* change_sensitive */ XtInheritChangeSensitive + }, + { /* threeD fields */ +- /* shadowdraw */ XtInheritXaw3dShadowDraw /*,*/ +- /* shadowboxdraw */ /*XtInheritXaw3dShadowBoxDraw*/ ++ /* shadowdraw */ XtInheritXaw3dShadowDraw + }, + { /* scrollbar fields */ + /* ignore */ 0 +@@ -228,7 +231,7 @@ WidgetClass scrollbarWidgetClass = (Widg + + #define NoButton -1 + #define PICKLENGTH(widget, x, y) \ +- ((widget->scrollbar.orientation == XtorientHorizontal) ? x : y) ++ ((widget->scrollbar.orientation == XtorientHorizontal) ? (x) : (y)) + #define MIN(x,y) ((x) < (y) ? (x) : (y)) + #define MAX(x,y) ((x) > (y) ? (x) : (y)) + +@@ -248,6 +251,23 @@ ClassInitialize(void) + #endif + + /* ++ Used to swap X and Y coordinates when the scrollbar is horizontal. ++ */ ++static void swap_short(short *a, short *b) ++{ ++ short tmp = *a; ++ *a = *b; ++ *b = tmp; ++} ++static void swap(Dimension *a, Dimension *b) ++{ ++ Dimension tmp = *a; ++ *a = *b; ++ *b = tmp; ++} ++ ++ ++/* + The original Xaw Scrollbar's FillArea *really* relied on the fact that the + server was going to clip at the window boundaries; so the logic was really + rather sloppy. To avoid drawing over the shadows and the arrows requires +@@ -297,161 +317,371 @@ FillArea (ScrollbarWidget sbw, Position + erasing is done cleverly so that no flickering will occur. */ + + static void +-PaintThumb (ScrollbarWidget sbw, XEvent *event) ++PaintThumb (ScrollbarWidget sbw, int pressed, int shadow) + { +- Dimension s = sbw->threeD.shadow_width; +- Position oldtop = sbw->scrollbar.topLoc; +- Position oldbot = oldtop + sbw->scrollbar.shownLength; +- Dimension margin = MARGIN (sbw); +- Dimension tzl = sbw->scrollbar.length - margin - margin; +- Position newtop, newbot; +- Position floor = sbw->scrollbar.length - margin; ++ Dimension margin, tzl; ++ Position floor; ++ Position oldtop = sbw->scrollbar.topLoc; ++ Position oldbot = oldtop + sbw->scrollbar.shownLength; ++ Position newtop, newbot; ++ Dimension x, y; /* upper-left corner of rectangle */ ++ Dimension w, h; /* size of rectangle */ ++ Dimension sw = sbw->threeD.shadow_width; ++ Dimension th = sbw->scrollbar.thickness; ++ XPoint ipt[4],opt[4]; /* inner and outer points of thumb */ ++ XPoint pt[4]; /* points used for drawing */ ++ Display *dpy = XtDisplay (sbw); ++ Window win = XtWindow (sbw); ++ double thumb_len; ++ ++ margin = MARGIN (sbw); ++ tzl = sbw->scrollbar.length - 2*margin; ++ floor = sbw->scrollbar.length - margin; + + newtop = margin + (int)(tzl * sbw->scrollbar.top); +- newbot = newtop + (int)(tzl * sbw->scrollbar.shown); +- if (sbw->scrollbar.shown < 1.) newbot++; +- if (newbot < newtop + (int)sbw->scrollbar.min_thumb + +- 2 * (int)sbw->threeD.shadow_width) +- newbot = newtop + sbw->scrollbar.min_thumb + +- 2 * sbw->threeD.shadow_width; +- if ( newbot >= floor ) { +- newtop = floor-(newbot-newtop)+1; ++ thumb_len = tzl * sbw->scrollbar.shown; ++ newbot = newtop + (int)thumb_len; ++ if ((thumb_len - (int)thumb_len) > 0.5) ++newbot; ++ ++ if (newbot < newtop + (int)sbw->scrollbar.min_thumb + 2 * (int)sw) ++ newbot = newtop + sbw->scrollbar.min_thumb + 2 * sw; ++ ++ if (newbot >= floor) { ++ newtop = floor - (newbot-newtop) + 1; + newbot = floor; + } + + sbw->scrollbar.topLoc = newtop; + sbw->scrollbar.shownLength = newbot - newtop; ++ + if (XtIsRealized ((Widget) sbw)) { +- /* 3D thumb wanted ? +- */ +- if (s) +- { +- if (newtop < oldtop) FillArea(sbw, oldtop, oldtop + s, 0); +- if (newtop > oldtop) FillArea(sbw, oldtop, MIN(newtop, oldbot), 0); +- if (newbot < oldbot) FillArea(sbw, MAX(newbot, oldtop), oldbot, 0); +- if (newbot > oldbot) FillArea(sbw, oldbot - s, oldbot, 0); +- +- if (sbw->scrollbar.orientation == XtorientHorizontal) +- { +- _ShadowSurroundedBox((Widget)sbw, (ThreeDWidget)sbw, +- newtop, s, newbot, sbw->core.height - s, +- sbw->threeD.relief, TRUE); +- } +- else +- { +- _ShadowSurroundedBox((Widget)sbw, (ThreeDWidget)sbw, +- s, newtop, sbw->core.width - s, newbot, +- sbw->threeD.relief, TRUE); +- } +- } +- else +- { +- /* +- Note to Mitch: FillArea is (now) correctly implemented to +- not draw over shadows or the arrows. Therefore setting clipmasks +- doesn't seem to be necessary. Correct me if I'm wrong! +- */ +- if (newtop < oldtop) FillArea(sbw, newtop, MIN(newbot, oldtop), 1); +- if (newtop > oldtop) FillArea(sbw, oldtop, MIN(newtop, oldbot), 0); +- if (newbot < oldbot) FillArea(sbw, MAX(newbot, oldtop), oldbot, 0); +- if (newbot > oldbot) FillArea(sbw, MAX(newtop, oldbot), newbot, 1); +- } ++ /* 3D? */ ++ if (sw) { ++ GC top, bot; ++ GC back = sbw->scrollbar.bgc; ++ GC fore = sbw->scrollbar.gc; ++ ++ if ((pressed && sbw->scrollbar.push_thumb) ^ sbw->threeD.invert_border) { ++ top = sbw->threeD.bot_shadow_GC; ++ bot = sbw->threeD.top_shadow_GC; ++ } else { ++ top = sbw->threeD.top_shadow_GC; ++ bot = sbw->threeD.bot_shadow_GC; ++ } ++ ++ /* the space above the thumb */ ++ x = sw; ++ y = margin; ++ w = th - sw * 2; ++ h = newtop - y; ++ if (sbw->scrollbar.orientation == XtorientHorizontal) { ++ swap(&x, &y); ++ swap(&w, &h); ++ } ++ XFillRectangle(dpy, win, back, x, y, (unsigned int)w, (unsigned int)h); ++ ++ /* the space below the thumb */ ++ x = sw; ++ y = newbot; ++ w = th - sw * 2; ++ h = tzl + margin - newbot; ++ if (sbw->scrollbar.orientation == XtorientHorizontal) { ++ swap(&x, &y); ++ swap(&w, &h); ++ } ++ XFillRectangle(dpy, win, back, x, y, (unsigned int)w, (unsigned int)h); ++ ++ /* Return here if only the shadows should be repainted */ ++ if (shadow) return; ++ ++ /* the thumb itself */ ++ x = sw * 2; ++ y = newtop + sw; ++ w = th - sw * 4; ++ h = newbot - newtop - 2 * sw; ++ if (sbw->scrollbar.orientation == XtorientHorizontal) { ++ swap(&x, &y); ++ swap(&w, &h); ++ } ++ /* we can't use "w > 0" and "h > 0" because they are ++ usually unsigned quantities */ ++ if (th - sw * 4 > 0 && newbot - newtop - 2 * sw > 0) ++ XFillRectangle(dpy, win, fore, x, y, (unsigned int)w, (unsigned int)h); ++ ++ /* the shades around the thumb ++ ++ o0 +--------------+ o3 ++ |\ i0 i3 /| ++ | +----------+ | ++ | | | | ++ | | | | ++ | | | | ++ | +----------+ | ++ |/ i1 i2 \| ++ o1 +--------------+ o2 ++ ++ */ ++ opt[0].x = opt[1].x = sw; ++ opt[0].y = opt[3].y = newtop; ++ opt[2].x = opt[3].x = th - sw; ++ opt[2].y = opt[1].y = newbot; ++ ++ ipt[0].x = ipt[1].x = opt[0].x + sw; ++ ipt[0].y = ipt[3].y = opt[0].y + sw; ++ ipt[2].x = ipt[3].x = opt[2].x - sw; ++ ipt[2].y = ipt[1].y = opt[2].y - sw; ++ ++ /* make sure shades don't overlap */ ++ if (ipt[0].x > ipt[3].x) ++ ipt[3].x = ipt[2].x = ipt[1].x = ipt[0].x = (ipt[0].x + ipt[3].x) / 2; ++ if (ipt[0].y > ipt[1].y) ++ ipt[3].y = ipt[2].y = ipt[1].y = ipt[0].y = (ipt[0].y + ipt[1].y) / 2; ++ if (sbw->scrollbar.orientation == XtorientHorizontal) { ++ int n; ++ for (n = 0; n < 4; n++) { ++ swap_short(&ipt[n].x, &ipt[n].y); ++ swap_short(&opt[n].x, &opt[n].y); ++ } ++ } ++ ++ /* left */ ++ pt[0] = opt[0]; ++ pt[1] = opt[1]; ++ pt[2] = ipt[1]; ++ pt[3] = ipt[0]; ++ XFillPolygon (dpy, win, top, pt, 4, Convex, CoordModeOrigin); ++ ++ /* top */ ++ pt[0] = opt[0]; ++ pt[1] = opt[3]; ++ pt[2] = ipt[3]; ++ pt[3] = ipt[0]; ++ XFillPolygon (dpy, win, top, pt, 4, Convex, CoordModeOrigin); ++ ++ /* bottom */ ++ pt[0] = opt[1]; ++ pt[1] = opt[2]; ++ pt[2] = ipt[2]; ++ pt[3] = ipt[1]; ++ XFillPolygon (dpy, win, bot, pt, 4, Convex, CoordModeOrigin); ++ ++ /* right */ ++ pt[0] = opt[3]; ++ pt[1] = opt[2]; ++ pt[2] = ipt[2]; ++ pt[3] = ipt[3]; ++ XFillPolygon (dpy, win, bot, pt, 4, Convex, CoordModeOrigin); ++ ++ ++ } else { ++ /* Return here if only the shadows should be repainted */ ++ if (shadow) return; ++ ++ /* ++ * Note to Mitch: FillArea is (now) correctly implemented to ++ * not draw over shadows or the arrows. Therefore setting clipmasks ++ * doesn't seem to be necessary. Correct me if I'm wrong! ++ */ ++ if (newtop < oldtop) FillArea(sbw, newtop, MIN(newbot, oldtop), 1); ++ if (newtop > oldtop) FillArea(sbw, oldtop, MIN(newtop, oldbot), 0); ++ if (newbot < oldbot) FillArea(sbw, MAX(newbot, oldtop), oldbot, 0); ++ if (newbot > oldbot) FillArea(sbw, MAX(newtop, oldbot), newbot, 1); ++ } + } + } + + #ifdef XAW_ARROW_SCROLLBARS + static void +-PaintArrows (ScrollbarWidget sbw) +-{ +- XPoint pt[20]; +- Dimension s = sbw->threeD.shadow_width; +- Dimension t = sbw->scrollbar.thickness; +- Dimension l = sbw->scrollbar.length; +- Dimension tms = t - s, lms = l - s; +- Dimension tm1 = t - 1; +- Dimension lmt = l - t; +- Dimension lp1 = lmt + 1; +- Dimension sm1 = s - 1; +- Dimension t2 = t / 2; +- Dimension sa30 = (Dimension)(1.732 * s ); /* cotangent of 30 deg */ +- Display *dpy = XtDisplay (sbw); +- Window win = XtWindow (sbw); +- GC top = sbw->threeD.top_shadow_GC; +- GC bot = sbw->threeD.bot_shadow_GC; +- ++PaintArrows (ScrollbarWidget sbw, int toppressed, int botpressed) ++{ ++ XPoint ipt[6], opt[6]; /* inner and outer points */ ++ XPoint rpt[4]; /* the rectangle around arrows */ ++ XPoint tpt[6]; /* temporary for args to XFillPolygon */ ++ Dimension sw = sbw->threeD.shadow_width; ++ Dimension th = sbw->scrollbar.thickness; ++ Dimension len = sbw->scrollbar.length; ++ Display *dpy = XtDisplay (sbw); ++ Window win = XtWindow (sbw); ++ GC top, bot; ++ GC back = sbw->scrollbar.bgc; ++ GC fore = sbw->scrollbar.gc; + + if (XtIsRealized ((Widget) sbw)) { + /* 3D arrows? + */ +- if (s) { +- /* upper/right arrow */ +- pt[0].x = sm1; pt[0].y = tm1; +- pt[1].x = t2; pt[1].y = sm1; +- pt[2].x = t2; pt[2].y = s + sa30; +- pt[3].x = sm1 + sa30; pt[3].y = tms - 1; +- +- pt[4].x = sm1; pt[4].y = tm1; +- pt[5].x = tms; pt[5].y = tm1; +- pt[6].x = t2; pt[6].y = sm1; +- pt[7].x = t2; pt[7].y = s + sa30; +- pt[8].x = tms - sa30; pt[8].y = tms - 1; +- pt[9].x = sm1 + sa30; pt[9].y = tms - 1; +- +- /* lower/left arrow */ +- pt[10].x = tms; pt[10].y = lp1; +- pt[11].x = s; pt[11].y = lp1; +- pt[12].x = t2; pt[12].y = lms; +- pt[13].x = t2; pt[13].y = lms - sa30; +- pt[14].x = s + sa30; pt[14].y = lmt + s + 1; +- pt[15].x = tms - sa30; pt[15].y = lmt + s + 1; +- +- pt[16].x = tms; pt[16].y = lp1; +- pt[17].x = t2; pt[17].y = lms; +- pt[18].x = t2; pt[18].y = lms - sa30; +- pt[19].x = tms - sa30; pt[19].y = lmt + s + 1; ++ if (sw) { ++ /* ++ The points are numbered like this: ++ ++ r0 +---------+ r3 ++ | ^ o2 | ++ | /|\ | a = i0 ++ | /c^ \ | b = i1 ++ | / / \ \ | c = i2 ++ |/a<--->b\| ++ o0 +---------+ o1 ++ | | ++ | | ++ o3 +---------+ o4 ++ |\d<--->e/| ++ | \ \ / / | d = i3 ++ | \fv / | e = i4 ++ | \|/ | f = i5 ++ | v o5 | ++ r1 +---------+ r2 ++ */ ++ ++ rpt[0].x = rpt[1].x = opt[0].x = opt[3].x = sw; ++ ipt[0].x = ipt[3].x = sw * 2.5; ++ opt[2].x = opt[5].x = ipt[2].x = ipt[5].x = th / 2; ++ ipt[1].x = ipt[4].x = th - (int)(sw * 2.5); ++ rpt[2].x = rpt[3].x = opt[1].x = opt[4].x = th - sw; ++ ++ rpt[0].y = rpt[3].y = opt[2].y = sw; ++ ipt[2].y = sw * 3.2; ++ ipt[0].y = ipt[1].y = th - sw; ++ opt[0].y = opt[1].y = th; ++ opt[3].y = opt[4].y = len - th; ++ ipt[3].y = ipt[4].y = len - th + sw; ++ ipt[5].y = len - (int)(sw * 3.2); ++ rpt[1].y = rpt[2].y = opt[5].y = len - sw; ++ ++ /* some ugly kludges to make them look right */ ++ opt[2].y--; ++ opt[0].x--; ++ ipt[2].y--; ++ ipt[0].x--; ++ ++ /* make sure shades don't overlap */ ++ if (ipt[0].x > ipt[1].x) { ++ Dimension tmp = (ipt[0].x + ipt[1].x) / 2; ++ ipt[4].x = ipt[3].x = ipt[1].x = ipt[0].x = tmp; ++ } ++ if (ipt[0].y < ipt[2].y) { ++ ipt[2].y = ipt[1].y = ipt[0].y = (ipt[0].y + ipt[2].y) / 2; ++ ipt[5].y = ipt[4].y = ipt[3].y = (ipt[3].y + ipt[5].y) / 2; ++ } + + /* horizontal arrows require that x and y coordinates be swapped */ + if (sbw->scrollbar.orientation == XtorientHorizontal) { + int n; +- int swap; +- for (n = 0; n < 20; n++) { +- swap = pt[n].x; +- pt[n].x = pt[n].y; +- pt[n].y = swap; ++ for (n = 0; n < 6; n++) { ++ swap(&ipt[n].x, &ipt[n].y); ++ swap(&opt[n].x, &opt[n].y); + } ++ for (n = 0; n < 4; n++) ++ swap(&rpt[n].x, &rpt[n].y); ++ } ++ ++ if (toppressed ^ sbw->threeD.invert_border) { ++ top = sbw->threeD.bot_shadow_GC; ++ bot = sbw->threeD.top_shadow_GC; ++ } else { ++ top = sbw->threeD.top_shadow_GC; ++ bot = sbw->threeD.bot_shadow_GC; ++ } ++ ++ /* top-left background */ ++ tpt[0] = rpt[0]; ++ tpt[1] = opt[0]; ++ tpt[2] = opt[2]; ++ XFillPolygon (dpy, win, back, tpt, 3, Convex, CoordModeOrigin); ++ ++ /* top-right background */ ++ tpt[0] = rpt[3]; ++ tpt[1] = opt[2]; ++ tpt[2] = opt[1]; ++ XFillPolygon (dpy, win, back, tpt, 3, Convex, CoordModeOrigin); ++ ++ /* the right shade */ ++ tpt[0] = opt[1]; ++ tpt[1] = opt[2]; ++ tpt[2] = ipt[2]; ++ tpt[3] = ipt[1]; ++ XFillPolygon (dpy, win, bot, tpt, 4, Convex, CoordModeOrigin); ++ ++ /* the left shade */ ++ tpt[0] = opt[2]; ++ tpt[1] = opt[0]; ++ tpt[2] = ipt[0]; ++ tpt[3] = ipt[2]; ++ XFillPolygon (dpy, win, top, tpt, 4, Convex, CoordModeOrigin); ++ ++ /* the bottom shade */ ++ tpt[0] = opt[0]; ++ tpt[1] = opt[1]; ++ tpt[2] = ipt[1]; ++ tpt[3] = ipt[0]; ++ XFillPolygon (dpy, win, bot, tpt, 4, Convex, CoordModeOrigin); ++ ++ /* the arrow itself */ ++ XFillPolygon (dpy, win, fore, ipt, 3, Convex, CoordModeOrigin); ++ ++ if (botpressed ^ sbw->threeD.invert_border) { ++ top = sbw->threeD.bot_shadow_GC; ++ bot = sbw->threeD.top_shadow_GC; ++ } else { ++ top = sbw->threeD.top_shadow_GC; ++ bot = sbw->threeD.bot_shadow_GC; + } +- XFillPolygon (dpy, win, top, pt, 4, Complex, CoordModeOrigin); +- XFillPolygon (dpy, win, bot, pt + 4, 6, Complex, CoordModeOrigin); +- XFillPolygon (dpy, win, top, pt + 10, 6, Complex, CoordModeOrigin); +- XFillPolygon (dpy, win, bot, pt + 16, 4, Complex, CoordModeOrigin); ++ ++ /* bottom-left background */ ++ tpt[0] = rpt[1]; ++ tpt[1] = opt[5]; ++ tpt[2] = opt[3]; ++ XFillPolygon (dpy, win, back, tpt, 3, Convex, CoordModeOrigin); ++ ++ /* bottom-right background */ ++ tpt[0] = rpt[2]; ++ tpt[1] = opt[4]; ++ tpt[2] = opt[5]; ++ XFillPolygon (dpy, win, back, tpt, 3, Convex, CoordModeOrigin); ++ ++ /* the left shade */ ++ tpt[0] = opt[3]; ++ tpt[1] = opt[5]; ++ tpt[2] = ipt[5]; ++ tpt[3] = ipt[3]; ++ XFillPolygon (dpy, win, top, tpt, 4, Convex, CoordModeOrigin); ++ ++ /* the right shade */ ++ tpt[0] = opt[5]; ++ tpt[1] = opt[4]; ++ tpt[2] = ipt[4]; ++ tpt[3] = ipt[5]; ++ XFillPolygon (dpy, win, bot, tpt, 4, Convex, CoordModeOrigin); ++ ++ /* the top shade */ ++ tpt[0] = opt[4]; ++ tpt[1] = opt[3]; ++ tpt[2] = ipt[3]; ++ tpt[3] = ipt[4]; ++ XFillPolygon (dpy, win, top, tpt, 4, Convex, CoordModeOrigin); ++ ++ /* the arrow itself */ ++ XFillPolygon (dpy, win, fore, ipt+3, 3, Convex, CoordModeOrigin); + + } else { +- pt[0].x = 0; pt[0].y = tm1; +- pt[1].x = t; pt[1].y = tm1; +- pt[2].x = t2; pt[2].y = 0; +- +- pt[3].x = 0; pt[3].y = lp1; +- pt[4].x = t; pt[4].y = lp1; +- pt[5].x = t2; pt[5].y = l; ++ ++ tpt[0] = opt[0]; ++ tpt[1] = opt[1]; ++ tpt[2] = opt[2]; ++ tpt[3] = opt[3]; ++ tpt[4] = opt[4]; ++ tpt[5] = opt[5]; + + /* horizontal arrows require that x and y coordinates be swapped */ + if (sbw->scrollbar.orientation == XtorientHorizontal) { + int n; +- int swap; +- for (n = 0; n < 6; n++) { +- swap = pt[n].x; +- pt[n].x = pt[n].y; +- pt[n].y = swap; +- } ++ for (n = 0; n < 6; n++) ++ swap(&tpt[n].x, &tpt[n].y); + } + /* draw the up/left arrow */ +- XFillPolygon (dpy, win, sbw->scrollbar.gc, +- pt, 3, +- Convex, CoordModeOrigin); ++ XFillPolygon (dpy, win, fore, tpt, 3, Convex, CoordModeOrigin); ++ + /* draw the down/right arrow */ +- XFillPolygon (dpy, win, sbw->scrollbar.gc, +- pt+3, 3, +- Convex, CoordModeOrigin); ++ XFillPolygon (dpy, win, fore, tpt+3, 3, Convex, CoordModeOrigin); ++ + } + } + } +@@ -471,6 +701,7 @@ Destroy (Widget w) + XtRemoveTimeOut (sbw->scrollbar.timer_id); + #endif + XtReleaseGC (w, sbw->scrollbar.gc); ++ XtReleaseGC (w, sbw->scrollbar.bgc); + } + + /* Function Name: CreateGC +@@ -487,9 +718,22 @@ CreateGC (Widget w) + XtGCMask mask; + unsigned int depth = 1; + ++ /* make GC for scrollbar background */ ++ if (sbw->threeD.be_nice_to_cmap || ++ DefaultDepthOfScreen (XtScreen(w)) == 1) { ++ mask = GCTile | GCFillStyle; ++ gcValues.tile = sbw->threeD.bot_shadow_pxmap; ++ gcValues.fill_style = FillTiled; ++ } else { ++ mask = GCForeground; ++ gcValues.foreground = sbw->scrollbar.background; ++ } ++ sbw->scrollbar.bgc = XtGetGC(w, mask, &gcValues); ++ ++ /* make GC for scrollbar foreground */ + if (sbw->scrollbar.thumb == XtUnspecifiedPixmap) { + sbw->scrollbar.thumb = XmuCreateStippledPixmap (XtScreen(w), +- (Pixel) 1, (Pixel) 0, depth); ++ (Pixel) 0, (Pixel) 0, depth); + } else if (sbw->scrollbar.thumb != None) { + Window root; + int x, y; +@@ -520,6 +764,9 @@ CreateGC (Widget w) + /* the creation should be non-caching, because */ + /* we now set and clear clip masks on the gc returned */ + sbw->scrollbar.gc = XtGetGC (w, mask, &gcValues); ++ gcValues.foreground = sbw->scrollbar.foreground; ++ gcValues.background = sbw->core.background_pixel; ++ mask = GCForeground | GCBackground; + } + + static void +@@ -610,8 +857,10 @@ SetValues(Widget current, Widget request + if (XtIsRealized (desired)) { + if (sbw->scrollbar.foreground != dsbw->scrollbar.foreground || + sbw->core.background_pixel != dsbw->core.background_pixel || +- sbw->scrollbar.thumb != dsbw->scrollbar.thumb) { ++ sbw->scrollbar.thumb != dsbw->scrollbar.thumb || ++ sbw->scrollbar.background != dsbw->scrollbar.background) { + XtReleaseGC (desired, sbw->scrollbar.gc); ++ XtReleaseGC (desired, sbw->scrollbar.bgc); + CreateGC (desired); + redraw = TRUE; + } +@@ -658,11 +907,14 @@ Redisplay(Widget w, XEvent *event, Regio + XRectInRegion (region, x, y, width, height) != RectangleOut) { + /* Forces entire thumb to be painted. */ + sbw->scrollbar.topLoc = -(sbw->scrollbar.length + 1); +- PaintThumb (sbw, event); ++ PaintThumb (sbw, 0, 0); ++ } else { ++ /* Redraw the surounding shadows of the thumb */ ++ PaintThumb (sbw, 0, 1); + } + #ifdef XAW_ARROW_SCROLLBARS + /* we'd like to be region aware here!!!! */ +- PaintArrows (sbw); ++ PaintArrows (sbw, 0, 0); + #endif + + } +@@ -888,12 +1140,13 @@ NotifyScroll (Widget w, XEvent *event, S + if (PICKLENGTH (sbw,x,y) < sbw->scrollbar.thickness) { + /* handle first arrow zone */ + call_data = -MAX (A_FEW_PIXELS, sbw->scrollbar.length / 20); +- XtCallCallbacks (w, XtNscrollProc, (XtPointer)(call_data)); ++ XtCallCallbacks (w, XtNscrollProc, (XtPointer) call_data); + /* establish autoscroll */ + sbw->scrollbar.timer_id = + XtAppAddTimeOut (XtWidgetToApplicationContext (w), + (unsigned long) 300, RepeatNotify, (XtPointer)w); + sbw->scrollbar.scroll_mode = 1; ++ PaintArrows (sbw, 1, 0); + } else if (PICKLENGTH (sbw,x,y) > sbw->scrollbar.length - sbw->scrollbar.thickness) { + /* handle last arrow zone */ + call_data = MAX (A_FEW_PIXELS, sbw->scrollbar.length / 20); +@@ -903,6 +1156,7 @@ NotifyScroll (Widget w, XEvent *event, S + XtAppAddTimeOut (XtWidgetToApplicationContext (w), + (unsigned long) 300, RepeatNotify, (XtPointer)w); + sbw->scrollbar.scroll_mode = 3; ++ PaintArrows (sbw, 0, 1); + } else if (PICKLENGTH (sbw, x, y) < sbw->scrollbar.topLoc) { + /* handle zone "above" the thumb */ + call_data = - sbw->scrollbar.length; +@@ -911,10 +1165,10 @@ NotifyScroll (Widget w, XEvent *event, S + /* handle zone "below" the thumb */ + call_data = sbw->scrollbar.length; + XtCallCallbacks (w, XtNscrollProc, (XtPointer)(call_data)); +- } else +- { +- /* handle the thumb in the motion notify action */ +- } ++ } else { ++ /* but we need to re-paint it "pressed in" here */ ++ PaintThumb (sbw, 1, 0); ++ } + return; + } + #else /* XAW_ARROW_SCROLLBARS */ +@@ -976,6 +1230,9 @@ EndScroll(Widget w, XEvent *event, Strin + /* no need to remove any autoscroll timeout; it will no-op */ + /* because the scroll_mode is 0 */ + /* but be sure to remove timeout in destroy proc */ ++ /* release all buttons */ ++ PaintArrows (sbw, 0, 0); ++ PaintThumb (sbw, 0, 0); + #else + XtVaSetValues (w, XtNcursor, sbw->scrollbar.inactiveCursor, NULL); + XFlush (XtDisplay (w)); +@@ -1044,7 +1301,7 @@ MoveThumb (Widget w, XEvent *event, Stri + #ifdef XAW_ARROW_SCROLLBARS + sbw->scrollbar.scroll_mode = 2; /* indicate continuous scroll */ + #endif +- PaintThumb (sbw, event); ++ PaintThumb (sbw, 1, 0); + XFlush (XtDisplay (w)); /* re-draw it before Notifying */ + } + +@@ -1131,6 +1388,6 @@ void XawScrollbarSetThumb (Widget w, + sbw->scrollbar.shown = (shown > 1.0) ? 1.0 : + (shown >= 0.0) ? shown : sbw->scrollbar.shown; + +- PaintThumb (sbw, NULL); ++ PaintThumb (sbw, 0, 0); + } + +Index: libXaw3d-1.6.2/src/SmeThreeD.c +=================================================================== +--- libXaw3d-1.6.2.orig/src/SmeThreeD.c ++++ libXaw3d-1.6.2/src/SmeThreeD.c +@@ -71,6 +71,9 @@ static XtResource resources[] = { + {XtNborderWidth, XtCBorderWidth, XtRDimension, sizeof(Dimension), + XtOffsetOf(RectObjRec,rectangle.border_width), XtRImmediate, + (XtPointer)0} ++ , ++ {XtNinvertBorder, XtCInvertBorder, XtRBoolean, sizeof(Boolean), ++ offset(sme_threeD.invert_border), XtRImmediate, (XtPointer) False}, + }; + + #undef offset +@@ -210,7 +213,7 @@ AllocTopShadowPixmap (Widget new) + Display *dpy = XtDisplayOfObject (new); + Screen *scn = XtScreenOfObject (new); + unsigned long top_fg_pixel = 0, top_bg_pixel = 0; +- char *pm_data; ++ char *pm_data = NULL; + Boolean create_pixmap = FALSE; + + /* +@@ -266,7 +269,7 @@ AllocBotShadowPixmap (Widget new) + Display *dpy = XtDisplayOfObject (new); + Screen *scn = XtScreenOfObject (new); + unsigned long bot_fg_pixel = 0, bot_bg_pixel = 0; +- char *pm_data; ++ char *pm_data = NULL; + Boolean create_pixmap = FALSE; + + if (DefaultDepthOfScreen (scn) == 1) { +@@ -562,8 +565,16 @@ _XawSme3dDrawShadows(Widget gw) + + if (tdo->sme_threeD.shadowed) + { +- top = tdo->sme_threeD.top_shadow_GC; +- bot = tdo->sme_threeD.bot_shadow_GC; ++ if (tdo->sme_threeD.invert_border) ++ { ++ bot = tdo->sme_threeD.top_shadow_GC; ++ top = tdo->sme_threeD.bot_shadow_GC; ++ } ++ else ++ { ++ top = tdo->sme_threeD.top_shadow_GC; ++ bot = tdo->sme_threeD.bot_shadow_GC; ++ } + } + else + top = bot = tdo->sme_threeD.erase_GC; +Index: libXaw3d-1.6.2/src/ThreeD.c +=================================================================== +--- libXaw3d-1.6.2.orig/src/ThreeD.c ++++ libXaw3d-1.6.2/src/ThreeD.c +@@ -73,6 +73,8 @@ static XtResource resources[] = { + {XtNborderWidth, XtCBorderWidth, XtRDimension, sizeof(Dimension), + XtOffsetOf(RectObjRec,rectangle.border_width), XtRImmediate, + (XtPointer)0}, ++ {XtNinvertBorder, XtCInvertBorder, XtRBoolean, sizeof(Boolean), ++ offset(threeD.invert_border), XtRImmediate, (XtPointer) False}, + {XtNrelief, XtCRelief, XtRRelief, sizeof(XtRelief), + offset(threeD.relief), XtRString, (XtPointer) defRelief} + }; +@@ -637,7 +639,7 @@ _Xaw3dDrawShadows (Widget gw, XEvent *ev + GC realbot = tdw->threeD.bot_shadow_GC; + GC top, bot; + +- if (out) { ++ if ((out ^ tdw->threeD.invert_border)) { + top = tdw->threeD.top_shadow_GC; + bot = tdw->threeD.bot_shadow_GC; + } else { +@@ -774,7 +776,7 @@ _ShadowSurroundedBox(Widget gw, ThreeDWi + Window win = XtWindow(gw); + GC top, bot; + +- if (out) ++ if ((out ^ tdw->threeD.invert_border)) + { + top = tdw->threeD.top_shadow_GC; + bot = tdw->threeD.bot_shadow_GC; diff --git a/xaw3d.patch b/xaw3d.patch new file mode 100644 index 0000000..87a2252 --- /dev/null +++ b/xaw3d.patch @@ -0,0 +1,70 @@ +--- + src/Scrollbar.c | 11 +++++++---- + src/SimpleMenu.c | 2 +- + src/Xaw3dP.c | 2 +- + 3 files changed, 9 insertions(+), 6 deletions(-) + +Index: libXaw3d-1.6.2/src/Scrollbar.c +=================================================================== +--- libXaw3d-1.6.2.orig/src/Scrollbar.c ++++ libXaw3d-1.6.2/src/Scrollbar.c +@@ -159,9 +159,8 @@ static Boolean SetValues(Widget, Widget, + + #ifdef XAW_ARROW_SCROLLBARS + static void HandleThumb(Widget, XEvent *, String *, Cardinal *); +-#else +-static void StartScroll(Widget, XEvent *, String *, Cardinal *); + #endif ++static void StartScroll(Widget, XEvent *, String *, Cardinal *); + static void MoveThumb(Widget, XEvent *, String *, Cardinal *); + static void NotifyThumb(Widget, XEvent *, String *, Cardinal *); + static void NotifyScroll(Widget, XEvent *, String *, Cardinal *); +@@ -170,9 +169,8 @@ static void EndScroll(Widget, XEvent *, + static XtActionsRec actions[] = { + #ifdef XAW_ARROW_SCROLLBARS + {"HandleThumb", HandleThumb}, +-#else +- {"StartScroll", StartScroll}, + #endif ++ {"StartScroll", StartScroll}, + {"MoveThumb", MoveThumb}, + {"NotifyThumb", NotifyThumb}, + {"NotifyScroll", NotifyScroll}, +@@ -1055,6 +1053,11 @@ RepeatNotify(XtPointer client_data, XtIn + client_data); + } + ++static void StartScroll (Widget w, XEvent *event, String *params, Cardinal *num_params ) ++// String *params; /* direction: Back|Forward|Smooth */ ++// Cardinal *num_params; /* we only support 1 */ ++{ ++} + #else /* XAW_ARROW_SCROLLBARS */ + /* ARGSUSED */ + static void +Index: libXaw3d-1.6.2/src/SimpleMenu.c +=================================================================== +--- libXaw3d-1.6.2.orig/src/SimpleMenu.c ++++ libXaw3d-1.6.2/src/SimpleMenu.c +@@ -1302,7 +1302,7 @@ SetMarginWidths(Widget w) + SimpleMenuWidget smw = (SimpleMenuWidget)w; + SmeObject *entry; + SmeBSBObject bsb_entry; +- Dimension l_mrgn, l_bmw, r_mrgn, r_bmw; ++ Dimension l_mrgn = 0, l_bmw, r_mrgn = 0, r_bmw; + + if (smw->simple_menu.left_whitespace || smw->simple_menu.right_whitespace) + { +Index: libXaw3d-1.6.2/src/Xaw3dP.c +=================================================================== +--- libXaw3d-1.6.2.orig/src/Xaw3dP.c ++++ libXaw3d-1.6.2/src/Xaw3dP.c +@@ -73,7 +73,7 @@ stipplePixmap(Widget w, Pixmap pm, Color + Display *dpy; + XpmImage image; + XpmAttributes attr; +- XpmColor *src_table, *dst_table; ++ XpmColor *src_table = NULL, *dst_table; + int i, j, index = -1; + + if (pm == None)