Sync from SUSE:ALP:Source:Standard:1.0 libXaw3d revision ef368cdffb4c21f6c6249af2c26dbdc2

This commit is contained in:
Adrian Schröter 2023-10-18 19:08:13 +02:00
commit 78f91a3eb6
15 changed files with 3326 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -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

25
README.SuSE Normal file
View File

@ -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 <feedback@suse.de>

9
baselibs.conf Normal file
View File

@ -0,0 +1,9 @@
libXaw3d6
libXaw3d7
libXaw3d8
obsoletes "xaw3d-<targettype> < <version>"
libXaw3d-devel
requires -libXaw3d-<targettype>
requires "libXaw3d6-<targettype> = <version>"
requires "libXaw3d7-<targettype> = <version>"
requires "libXaw3d8-<targettype> = <version>"

BIN
libXaw3d-1.6.5.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

BIN
libXaw3d-1.6.5.tar.xz.sig Normal file

Binary file not shown.

400
libXaw3d.changes Normal file
View File

@ -0,0 +1,400 @@
-------------------------------------------------------------------
Wed Aug 16 12:33:24 UTC 2023 - Dr. Werner Fink <werner@suse.de>
- 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 <werner@suse.de>
- Move https to https even for URLs in comments
- Drop not existing URL
-------------------------------------------------------------------
Mon Aug 29 09:46:41 UTC 2022 - Dirk Müller <dmueller@suse.com>
- 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 <jengelh@inai.de>
- 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.

343
libXaw3d.keyring Normal file
View File

@ -0,0 +1,343 @@
pub 1024D/1F2D130E 2007-07-16 [expires: 2018-04-25]
uid [ unknown] Alan Coopersmith <alan.coopersmith@oracle.com>
uid [ unknown] Alan Coopersmith <alanc@freedesktop.org>
uid [ unknown] Alan Coopersmith <alan.coopersmith@sun.com>
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 <ajax@nwnk.net>
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-----
mQINBE6HVy4BEADACp0EU6HZ4KyFx/qfhzNarCfnlyEoCFY08k516UaHrUOrYWPp
ukoahcceA/M3H/xM0CGIn6uiuG/Cq7+qODAZNBsr6haIbDaqSUt+953b5qCSbD65
LBR8TXvW+9KkXPhXTKi/osYBdmsbFLeVLqU5Kd4QJqWKRLtuo0ENbFkQPVypEJk8
Ozg2zZ2yeSQAy0pgeFh8lezI7A23yj229kFq0EEfeqHpgifIzR2hNIhS5pTSOt8V
RDapO3FpOmxPPUMsaJ1KATD92+SgbZW8evW7ffz4QUiQiFsfTSOTCaTFu8qpu6Fb
a9u/u6mTrJQGRdqDcFp3iWjEUOVr0gUdLSr3zey152PBRaC26/eLqH8PFgCerBkn
o9vso0Vr+Kh63OOQeDHATZGy7tMHbWW5AEXVkTpNoSRYr48pd6u9Z1TfWVcovNAZ
tWiFVKKxniTa4MZY2czOSyh2YahCbEt3P0DoNihy3YHhTvW1k0Os2x5yCsfpGzp3
U8x1apfQqAyRNIa9SptLpQ7xF+lv52D9kp3XdkWXw1BFY+nmm/FqoC4tKU8AmbuB
n3SX/sYjq3Z6aLoBOmZ849G0Zp1xEYHCbfWBxvqhIc6dlPc3Y9uYV01+FlTzX9Mh
THa8p6oABrXbWRJpkOvaVbdDhXON+02Jlvawy3T3rwVkuEfEZu8akv7miwARAQAB
tCBNYXR0IFR1cm5lciA8bWF0dHN0ODhAZ21haWwuY29tPokCWAQTAQgAQgIbAwYL
CQgHAwIGFQgCCQoLBBYCAwECHgECF4ACGQEWIQQ7tjnlb4YfouhlBWkP3Wgtl0yn
KgUCYAS3AAUJFSl12wAKCRAP3Wgtl0ynKtWrEACJ80y/7+TsPU/EBviQM9SWyQpy
chWYM6XMQoyE8MweujhwlAtVr6QTm/dD87m50rw2MAILyyijrj/WGpgSGz999PRT
zJEGB0OG8mhx4SOPWis+aUwSgdCaS7phPsbqzIh4qfUuG53v1Eg5cZ2yHxBdHbrq
+YDsFq6Kq2bmIRIhuz7xLg/VicVom+lKOqeWMTQCX6NFeRn98AS/VM18dvNZbMye
DlRvqRzDi9pl6+FbHzi7ZosP1q0y8pezlVkZE7C6ESfpoxn/jWcoRp/TXGf3lkz2
W3jqbIr0qb+lq1TxMHQGGhhVGBY/slD8YLnr1bAdSxr1Mia6vqyR3Cn2QmlFIxrh
ZZek+SroxGJBQdXUhru+RP7AKrx+SvXXNHMaCFXcEiJ+3rQiF8vQhb/tgphj0ThD
ioSTtuQ5W2rqLcwxVikqBDCtvk6X8HkEzkgbgHjYI3BgV6Re2mzA3YUolganxmrI
ldVR9R1yZkdchQbIcfZ7qjdF/td8rPAm0JH4ScEhQHwL/KxDnjZkQs7nbL3wj84B
vU+Y24abcnQx70tM7kSnlZBMqhuQDiCWMadr5HIB0CusN4FNrwjiA0d6deAQzcf4
rRWmm/vkptvcygs1itvLwi+q5dC3cAiWAUACQ65qJs2ptRpMNiMTYVGk5j/2Vf1m
adw1Nxg/3f339vCLAbQhTWF0dCBUdXJuZXIgPG1hdHRzdDg4QGdlbnRvby5vcmc+
iQJVBBMBCAA/AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgBYhBDu2OeVvhh+i
6GUFaQ/daC2XTKcqBQJgBLcFBQkVKXXbAAoJEA/daC2XTKcqdiEQAKT7WGDB2f4d
rI4HScQSZbI4YWcSqSfBz+dHEn3op1z6hbLNyhlmP2/OoZ2bJL/mKuFhA53++ZEZ
8qqMPvZdJ8mcdoqbB2snaj2OBjMDYP32dprKvg0YzKajnWKJdR9iR0Fa4JwRclI1
VENoNgGit7DXbLdRTt/FmPcG+urPmWGue2DRKoKS1vJrmqY06Nq9W3Hz+1yqGHUr
1b3yZTiy3aHlEbxGpcYcUL3Altce03UrLVO820NtDKsPgPUzUpSCI7LSAFkxGKkt
2GuI2MDIANMcfwLiX6X9PZS1PaJkvVJhH60J9N8Oo8+XBXM9LdL34tLHvHlif4i+
qH+Zjg25Z2j1js8Fbs9YPtT1jlBbQUVgnDQNuSmZHMnUU9pjuJ2wL3HH2gUKPwxD
m4ydb20hbZKVu10nWDlO096Qx0yl7UyCVsbSIGYpZXC7ikrTR+jlWBMK1aTSdN0w
YWEDDjbJ2g6jqyX6z6ei+8MRQADTeCbtJAgvLrF8E4XOiQZZ8+lwQpw8bnorvePE
6hBMXVJKgWyxYJlgphaB+dfEUj/4YNK2jrSmrZFRGKHUooby+gJ3ghwGcnacenwr
Jm518iqkf+u0+SVveyoul69UDo9w7HUPNHS7NbSG8XEp0IgVe+eQ+PtlBYAPts74
3N7dZPcrITQ2hmUz059w17aodgUq5BMvtCZNYXR0IFR1cm5lciA8bWF0dHN0ODhA
ZnJlZWRlc2t0b3Aub3JnPokCVgQTAQgAQAIbAwcLCQgHAwIBBhUIAgkKCwQWAgMB
Ah4BAheAFiEEO7Y55W+GH6LoZQVpD91oLZdMpyoFAmAEtwUFCRUpddsACgkQD91o
LZdMpyq1eg//RxRYrB6B6Chs3YRyAyabaOaUWBS0T0INxbsYiYF5jZz/cFGufRCz
DbZNeh2RIEHnanKKJTNxgNejYwgNq7bupr4aqGbO5es3UkgUkeGN0aSOzapH2rxK
Dr+DTRmp1JpRJAdrvu37AwWFDbWJIdex7qacntLxDba5g3Olw1CwqENasFB+oEx4
bGWoFfjI8sS/Ilt2h/mk1nkBboO6FV1Rr4kolm5FFwdDeHV19FGGYok0zgZF9lq0
CWQazD/dxxYXtxsxxR0JVxGWLvGRLrdovvTYE6n21pZnyj9bdhOUPdKLjHqof8LX
FZvwr/Rt7bj9j/LqzrCwTDPg40dJyM/Zku9utSX/EFdwDE/bgPGtVWZEnuWyjXw2
ZCeR0zYVLvriv2g2NVn0zi2XlERpHRLTrJyPPKQmatTcYQUblIOutiwxlYn7DQTA
FzzsqQ+GOmvVKJTmhsZF3bj6gOHXlr1mfJNIyi0EFaFU1NTpnkXKTMym0hVi6X9v
iiVLJVJ1svhlZ2dvYXHbsHF6jZnvLUvOW40ySXLymzKFO/L+SZYpjeQsbqMBx7QI
BPtkhWgsg1P88aDYLZ7bU9BZv1ctpqn9OsgNRHvMB+01XoNdDRwWOX/KpUsd0JxL
dtJi3o4jIK/McHNnO8qu/5o9z7fUwd+OPqvcC5ny3l/LhqURqy52E2C0IU1hdHQg
VHVybmVyIDxtc3R1cm5lckBnb29nbGUuY29tPokCVAQTAQgAPgIbAwULCQgHAwUV
CgkICwUWAwIBAAIeAQIXgBYhBDu2OeVvhh+i6GUFaQ/daC2XTKcqBQJgBLcFBQkV
KXXbAAoJEA/daC2XTKcqxBcQAL4BBkQ61pAr7tNspSu4ne4aqnTeNvzA8BDBicS4
QFWuc7uZZQDg5VA0Weg4oom9k9bhAkDDYRh3O5tkJiYTc7wY6I1/Z5FUuOwprKgN
Gr+Qr9A2HvbyMuHLE2te0MBci9AmNgBa62PLB6OSCs34RFgmTNwmYmmiUBeIKhir
WIPKtA1b6Dcsw+H3IMBBhn6kCS7frunIigMek5elIDUdZB8gBzOC1SlPNYf0Htcz
i6e92AtKGsQScur254yMkS/hyfnyVfzZxi7/MC9J7gO6UwWxHQHe67sUCXveoceX
Z/42Py8ee0F7TefdsipKdOEgMCZP4dZh3u8tQ4g5aNojJtqIFQiofVytMerHUX0v
qDmNJ9dd/4hQ1zYr0c4V7fZWkXIF4FQxkm/7WUIC1D5jRDOMaKl85g7Y0TodyRPd
3alAWZp6JUbLOy7ADzfF9cB/V0DbT3FUEG2jFPB6zKsxlW6uYs387FFNLC54v1kZ
YDs4hPP/+7uMJpVI7F1zW1Qu8tR6hfy1ffgkOCiWrLI1/Dxwm6Wq63COud8aBiAE
bs+pwNtnGX8ocgtgAcYpLeXjuVkrYJIxDbBWlcEaGpvHHcJBLOfHUUjdDBQ4FqFV
LfUMNlB6S2RnBcnnT+tQ8CNQjCtdunvCzbYAwGTPMgodvVgd8ePn47nUgOM/SYcP
d9LOtCNNYXR0IFR1cm5lciA8bWF0dC50dXJuZXJAaW50ZWwuY29tPokCZQQwAQgA
TxYhBDu2OeVvhh+i6GUFaQ/daC2XTKcqBQJfuu40MR0gTm8gbG9uZ2VyIGFuIElu
dGVsIGVtcGxveWVlIGFzIG9mIE5vdmVtYmVyIDIwMjAACgkQD91oLZdMpyr+exAA
jn+PslziDgcQs6O+HURYum25o4sYDFKuQIJD3IHoA9RJbbIFcuT/lokTxfGnTG3x
OdDSI4gcB+cf+brrQ92ivrCnVlQKMjRkZwf17ECVXVyuvugbMPWQIXZ6ojrQ2BQC
YmhbVsRc9Ac7QbnFj5AAoWa7cOkTnIuh3cGOI+Sbexui7GINfL2+Nq3uiZK6cZt0
kLMH8P2Pn/3YB6WUUuEGLpGz62p+BCPJNCW6E84s5zuDZamPbbNWrPeIEULNIjbr
joH4KiKG5q4krGASSecvvTjBKnmN37H4U1uFFgEDULkyS3ZcJfirnRPHJ71QzgLj
BAJac7al3WS+7cAGBa/CaDqt3NFTWwXkRlZ224tHgRCi+nalOzn8ugqnTj1UKe65
6QFcDzzmd6Uv/16IW5H82pTQUI36ZtbtQl2em3jWg/8vkk1IbOSU8YsqXIZ8i+ph
A+LJCONTf8ewIFrwkY31ro5Xh7njcsbZUaVZaNOIyX1j4AvuFY8EU6SUhM+neG4y
b5wsozzVHYMsSCo5S7aA7qRCetwrPUTb+q2QSQVrmdFr3GxYbqghkM/LzcSC44TM
+rpwVKkgszJaR9CszVCfQV5ogQrgcdoqyUeGX/WrI8cq8xPNV/gJ6gJOu64NCwar
ZWDkey8jha1l0TO+pHoCSYWHcfqaxHIhatEuojPV4hO4MwRhCvo9FgkrBgEEAdpH
DwEBB0AZYb+aFbQPUp2f06B2SUfTXAtDZ6CX3/S+OPnLhJspB4kDFAQYAQgAJhYh
BDu2OeVvhh+i6GUFaQ/daC2XTKcqBQJhCvo9AhsCBQkCpuv9AOIJEA/daC2XTKcq
wBYgBBkWCAB9FiEEXq8hBJqGuKVMyxv6rOspdAyaTpcFAmEK+j1fFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDVF
QUYyMTA0OUE4NkI4QTU0Q0NCMUJGQUFDRUIyOTc0MEM5QTRFOTcACgkQrOspdAya
Tpd8VgD/W62JJ3LIp3ioR5mct+W/PlpbzxNW5KXOh0o6FdLo+gsA/3hzO18EKNwz
h/WGn7IUZJADUK06qrV1VYESOOoy/9EDx8wQALWnnrbr4xK+u7vNdM6LJ+RJ5yB4
M2+k9dkIsPeRNX4arF4ZJogevXdeUUWxpws9PXd6/uaRaL+4ZO4kUEUkTZ2Z8KGQ
QjcKlRvfR/S48YtPu5FlybnRlS61T0GOKkq98xuV8X3Y9NAXuh1tF7Mkj57JOGlQ
2TIzmvECQ00pBlDvJftvkECI99ARsoVGdL52HPRaKYI+/xvpParGLru4yP/mzP6Q
qu0C0It6s1ubu1Epq1jLKjLFMnRAPtud3hyZv6C0a1IWIFGCRM/soPAuRmhOWGgT
V3YdmJA9rVbVHKLSbFwOaftKO27jU41JoI/FaYRkIqFCT3Xb0b9haOb1sDdKMno/
33IGiSDEBKt13pjWGgkGN5ze9GF8honGLpu3ikAMWsci9XK9CsAs5fvt7cu4r1EY
H0qN+6Q36ThqK8li1VujRFvd3pdagPt9/NKm5BLv3MdmKsh9R+7JHBwc2ySua/HS
/fi57xQEuclaG1HxmT2wIlaIJ1BB28ka8YLx0ewdQRIWmXlmiUrcQ7dnf3HGcWdW
nLFH6h+nDMC1CkDJYZhu80pTQQFItMUlA9jLIxAATLyjDYtwNvivGifOGdd2dNIX
aY4IFDTylKu5q0M+C8oYM75HKaNQt2GgTyJMm+3rNB5Z6iQFoi5B1iTVp8n1vxtJ
tO2TRJa/kdtpEAOpuDMEYO5NlxYJKwYBBAHaRw8BAQdAkbyieR2bp5LOFNfrhJNc
TJcGEVlGcitKxci4PNBZHCKJAjYEGAEIACAWIQQ7tjnlb4YfouhlBWkP3Wgtl0yn
KgUCYO5NlwIbIAAKCRAP3Wgtl0ynKvhEEAC5jtMbuThN91sGy8NCjTDnR0lRN/4J
A74SB4tqyAeDMuLtnOX2MXtoGs+vho9TdylvUiKQABwBUCdR03eXEUlrDSTxqIYc
riJYm1uNmlS8GigEClCtn7+xhNaBOYTkUcaXWDLKYmJQIlrKJ4p+Cw7JHVp1g+cK
h5E+INSMHEx8zwxkjgjzhq4b0V0Exxa1Nkrj0hrhk3TxEv654yOF0+Q4RBnKC0rF
DTba1+Scw00HVzoxynHfWWmO097zJnW9cXmcRCFln13zi/eMiXsw5B0ft6Fq++2A
EZlgA/iM+Q9st3Li3aaf4PzEOccpQRoWoBvyGCSysrpjHNIhyU+0whKm+LqsiM7X
JGpd2Uydb7480yooTGdGKgvD5XZSFRSk8P99zhYSNjf3FxBLC+EFCvZvLIRZMPUP
OFz+MfKEtSOzZu7VZZLrLhAjeadFf066m3sXq85PDSNX+wIdH1FBWyZMNp/7HERp
jKMGukv+JhKpGAehhiW4EPGK9GmcX2iDDbCWeIdYtcutbpQRFWpC4uiMZsq9Jg79
gTh0NiKtbalgGxndOKFY0rU+ADcTqD7YwGd7BnqZ4JXSHDNODxVNaI+BRn1WuPnk
iHx5mtagik6zSIJflr97nMiw79/zT2uNyxxHVoJDFZCP9qcmsKOfhIYtcFCiMG8o
fYL6con2NyuagLkBDQRgKvtwAQgApl52VAUHecm2hiqbeAqSAKpJwmqdQbfdAwCb
SDHTITE7iD/WDcZsaL3TaV+BTmp+S6aqg1jsW/hg+vH69N4xTRaTxlixnS/54EoM
Ak4iqgcYIsTKpAT29D7cjUci9d8+8NEIB17vD713txjLM6/pV/1N2NdPmKSeaIpS
LyILM/AdRQYJVCxanToBF3chwt8B4/nYfy7sHMeqWrmk5HlsAMA4Ot9JSsbCjTs/
zkW2sgwMnK1DfGTUX8tdyHjM9QgemVI3gyPC+reUnxhyeaNexdShHL8AXhK33nES
7ZwhAPSEZNynI60W/J+33oM/8t5Q84ODOsOzYSelx/VuMYc6yQARAQABiQPSBBgB
CAAmFiEEO7Y55W+GH6LoZQVpD91oLZdMpyoFAmAq+3ACGwIFCQOGwEMBoAkQD91o
LZdMpyrA1CAEGQEIAH0WIQS+70lLWykeswCifxPtLtGfhbNoLAUCYCr7cF8UgAAA
AAAuAChpc3N1ZXItZnByQG5vdGF0aW9ucy5vcGVucGdwLmZpZnRoaG9yc2VtYW4u
bmV0QkVFRjQ5NEI1QjI5MUVCMzAwQTI3RjEzRUQyRUQxOUY4NUIzNjgyQwAKCRDt
LtGfhbNoLJagB/0ZlwRZ91KzZKtjUwtL9V3GEVPzeO6x16awkM91DI08pSS79KJ7
CuIJ/j/r2Pv53aQuCbXuO2iwnFq/kHXexeRU0joRbJfk2265CpryT+wKXngOS6Ah
RGPM2c8M3+CGs4i9MYv+oQzggtDQptDTjJ4w32MH8aBODw80Zwa8jp+f9Gw9ZoCC
iiMHeS4AOEen7DxuDYSoBfTPKg7YTlcBMZtRer5YMRQiIjvAqJbhv2GQTf4foo+S
0hNHYIyhIZPREBiQPljahB/b62ddhx1s+nywROYkwV3iysvFEANMFkfuysfFvu7v
YySihFYHWi22arnGet0D0S6/CkXS/kqYGlfHMoYQAKysQPCqrFyecH9jwkGPKk08
eZcZejc7w5qu/kgSi/MIc3CyTVi2fk3Pl5WVFLL97o6IYwICImvvWvCHBooeVYPs
ckUG6oDTT3CdK2dn1G9urCvp4IlogiYtidpyDC00fNU6COfABMC164KEjIrK1E7V
EpgTUVOU2zlO9nski4qCg2fTgimWE+5EBUycJFzCNyQX1fm3QS3yl2r0AOxfkhJS
j1Bpqhn4UhRbOt4zXuDAB9k3XTlDaHIH2GJCWiNNyTqISN/H7m19gYH1bdKwHxv0
chW+m0oYgtEwE8h9OK3RZ/ppyTvvNSvHGAb5rAa7qaCc9+jZLAVuYYlbgXWSsxtd
WJMEBzBL6uJZjMOIn8K/f+iybnc3tpRkwIgYN0LEpyfwZsy7XsEGNfr+NREWty9a
lTnXAPnkkTDuMSXuSipyzph/CUVigwBd36SPdmZBWZTVYkWtp//fFBTFfWHPBDnq
0QzqqXX8WjyYKxh9Ws/PETAH+OOLBJ1C/bQVIyDMBC0K3itAlOX61awv5QpTwq3u
cVOGLMCD4G7q7PRj97pp+DgwchRIlsG/dsw4wqRsWY3SV6Lhls5RK8kVhIlx7f7B
SC2XwbpVJFYML+XywwV3Ou+qkt1SdwbPTpQdM5qU+5fDXUIe+1HT00cuOvfuyTLa
SndZ06PRAmtP5l9L0JynuDgEW3PBDBIKKwYBBAGXVQEFAQEHQHJzyBXmAHLsRI9r
vIjq8QjS2th0emMplesdMYD5Na9oAwEIB4kCPAQYAQgAJgIbDBYhBDu2OeVvhh+i
6GUFaQ/daC2XTKcqBQJgBLdTBQkIPQv2AAoJEA/daC2XTKcqifUP/j3okRd2Btwr
Q8du8pl3ilmmMcSP7h2mSWcvNx82eEurQRjJISrS9lSOTJ8kOMatkDRGM9gO2NHu
I4VAX8PuFYCY5+yWN8eEdgT/VrQgGBbjMl7amiG0QaRH4DLFSDtHSU9zZyUSkupV
bvw+wEyfYZVzZTMhi6v2E7SCdH+/cyF6PsR+whRp5y+zNaSTWA2fBF0fU6qYV5oy
8XgBVj4PnX6w8kaI2VvzO2IzApF8bsUGw+5uNLYyWW/yaAurtMUDgMiMKJ1sBmta
5iHuovLLjD2ZtRbu4cLMBfTCDLe41YtFC7loeK16Rzv6BfV/dw+FBhMm10qChd7V
iryy8HwxTdmGpgs50IgnZVkbJN+OuDw8jpCtH2fBFYQK+f0P1q6H6GbZCnNdQKl/
yTXiixlA0F9VY1EDAYbiB+U/vOQ5zUompSivqHyd1VESfLsmmVLUB3OZ5KTHVT/m
fjhsthChvf4HbYOpfpvvEpD6G/d1MiQtg0Bfm1V2gIsWOp1BqUz346YuYBTUxFtg
iEjMnkjq5zcpte567rsSfmXjGei1W6qqWHIQYg7nW+GcDsCxsSOIaTZE1CHlRvND
u2GovwJUDK9aDvBF3zCRI9kEDTlS2gZz2LMSHTFjdinnWZCWOxS+useZpNL6ffBe
pCWMk2zZT/7s065ulM1T28ENgq12oDCauQINBE6HVy4BEACr5cHqXqhm5Jijkx3I
R2NXJzveQR55TgW4n5VPmm7yks0eM5v0CDHHJ+xNIRrAL6w0p3bQ9r0rFRxmwgyJ
JdFja6/s/GiD+RazpA8iyDvKwja/gsSreHJe76cUNAj/xK6vzOo3hrwcBX28kHDN
TPz+sVSQJNQAI9LbN/HNg1Ds9dRUJjA8tGcG/N9pn1zupTM5ypFnQJfUKpdbzuHB
+V1p+OVfe56p7INXyCvLE6L9w69vUYluVSrj7kIE9aSM7zwrDfTn/9RG/J8IB0j/
cdgqlB0rKJgUG72aCSMG3lltnM4stv4ypW7AZxv/XeF9iskvYziIJz1C39DaBJOq
oIamXodRHHHoG6ulXSsM+EyN5XF/aRJ1PZ8gHiAHLxES2zVsFiADHeiXK4if0gZJ
QVBRJ/aJ+EH+3setyqDsQ44+c3tk2Lsu3ama3CKtKpqLDFfDnGmNW8+3hUHZxU+h
4NavsjnyqbZ57dACTXYES/+9oTFOWtwqxdbLVzILZS389vIvNflCPcJkQRTbrxX3
07UvDOrEcm226tVhydJwuV0nTn400UYxy6MjaCcnVUTC2nFPEUqXUT+6/sWIw6Wl
JiJrs4vmWBf2Jvz7e0YioK47V6o8kuxfXZJhO1bd8Yz5+OZcH5JGLpvtehUEzyIT
Vm5qpxbN1m+6TejP4HPFW185DwARAQABiQI8BBgBCAAmAhsMFiEEO7Y55W+GH6Lo
ZQVpD91oLZdMpyoFAmAEtygFCRUpddYACgkQD91oLZdMpyqraBAAuSUa82+MkbP4
LVJtUA50hsm/UoWwsp4DiGpU0/33TnsjYY4QZ/J5RtIVONN5EqaMM/aIWWos9qqB
yItwmlPcnmwI76Dio90/5LcjdkvXm2+DaW90BGIcoYuzcllT2OGKy4FX1idx3E2s
rILqSS2IzNu4jXIXySss3bAiao9MHXGSqGMDRSU71ixqlhUX5Qsdnei+WMX1wLTk
eY8wmRbul4A0T3/H7b+hQQp+OkmSaDUtuHdvEuacMSaRIA4dmzKwjOQkssXQB6GP
Hwd4zIJ7MKBxAjO2fJD8NAmzYHMvvHGcYRLVqRXEEQO+rMYDJRoT32aLDC8gg15G
UTtinLrZGKSutX1qROUX2GqKszSXQ+BlpiYEvQG4uWjmdL/4LVl1x9aLrSD6QUkl
oRJ8NA+uupc8HlxQpu2GxlLM/Wk6QVa0tZVnswuiAqKjV0L21cayBfGBXBYJPEHP
0ALr0SKaT5e8S9rV0ehWA/srR6/B5/DMIKHPk0z9Bqrkm+lyYXs2wqTlUU8Aqao7
lt+q/uSqaQcgKXbcmYDXxCdcR5aorKOHEPgK5VlMex+Gbr9laOS7W+JrTUfyxJZ2
jLngo0b6j4L8+xlXzyTnGHhDd4IBuEpMK0hNwQN9aHvjuJlARCoTCtsH9bbapekU
RiFBVaLljnB1TY6fOzc4rPvhZpscp1O4MwRbVtM4FgkrBgEEAdpHDwEBB0BZ1luE
4xeMobpJZcLnvHqW5ln69aBBrxQM36SiV0h6JIkCXwQoAQgASRYhBDu2OeVvhh+i
6GUFaQ/daC2XTKcqBQJgKb7nKx0BU3VwZXJzZWRlZCBieSBuaXN0cDI1Ni8weEY0
NUMyNDMxRUY4QjVBNjYACgkQD91oLZdMpyo90A//U1pUOobwqUZBKrFjtJmw2w2b
ohtCrSscARPi7HIBpnafbIjD1rMwnQ9xuFYAEI0aF31culnVAy5ZHXnygRvLR1Ua
Lh7oAOCVNrOPTfTgIh3ugNacK1AGC2HMgQz08qb+Bx8eZLnM9o4fCnETFAHQWGyi
xJDKuTczeRRL3OHH76m3Lflg+Udci/s91cHL68hUkQhgHN02zy/zIb9tCD12p0vp
lm4d5/yH0D9fJTFGH6DXVMDF02CDz08Sh/JUsdc0BjH/PcKZE3z8r6p+l0oNydIR
sASxZfoyG6CHMbsxone7duDOkRjKwUCz2Of8SdroZrSdlXXBnZ7WUpcqBjkjrNgD
Dn42rakFvymmtZVLWh3lwEK1vT6m9gmXvNOZe5w+ysqHwq6ZO4Ruol6es0QvWQ/q
FRX+Py7oJnZZUX6YBbrB9OuQfJQZTxnSQ3H/xAA7mMlRspo7l8v9wX+N2fPrNorj
kENTPgQFFFQpzDGZjC2TBQ6D3EPcMInu8FMkAckX2QhO8n9CKm0eaITX5sVadQL9
uVIO3AFRTRmzaFwDLND18H/VZjpIKXt6mC3V5748SUyS7+XU5kB2uOE+49hjcqCE
aFZHbXfazM/7yyn9qiINHZqcra3MNluXR91pNY3wLF8RmR4A3duVpOQzTHSX5zwH
oWwRQ1sw+RCRz1r6BW+JAxQEGAEIACYCGwIWIQQ7tjnlb4YfouhlBWkP3Wgtl0yn
KgUCYAS3UwUJCFn5ygDiCRAP3Wgtl0ynKsAWIAQZFggAfRYhBLOWm08O+X1yHmOO
vZyCWmYF1Au+BQJbVtM4XxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w
ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRCMzk2OUI0RjBFRjk3RDcyMUU2MzhFQkQ5
QzgyNUE2NjA1RDQwQkJFAAoJEJyCWmYF1Au+/F4A/Ro3rYgJbK5T3/dt/svCRMCp
awu9pEGGQamcxVv7BJ6MAP47H/FLryJ+LH8srz7j5SFalYek/04C/svxSgBtIacr
DZHwD/9K6vW4tx8tKt6aZp0SvBlhUfBKgDSIQYESqoG3zylvymSUV45B2zgjaSdp
5hBDZEtG1Fz8AUB4F7VGy37e+GrqIzNZEgDaGpz5C4x2JPZsquPT1l/ket+kh0Lh
lckT/TZPLrtMJTRFnw4VHQkSX7grhvKnFKEjZ/IXe5d5bmIvbTlzGozRCx529u9D
AXN0FbO41zPot+cmVdObIa9Cc+ZS3BENCR645YztE2ypoxsXBCNB7fveQDUG7zV2
ahfEUFyD5n+XttyDwqnyn6vtKO0myaguqzTAwFIqt5pWgYJDUfFuJc9nVuOTnC7t
qu2SzzVvD61egEtwsLFO6f2wtSUP7yGgVpHjQpoUxMn1o5MqFHNhCqCZLjNIgzAE
EgHPMOMvb3zrfQlx084DTIBnAgJ/0HNjq5nWO2x8DMBhPXDUz7CXpkVHQ+uN6QjM
wL5dzMV1HnZbhLSFhUy6PF5oje05xupQ1DsHfhOG5gqf17ofchLhL3z5/0mSEKOJ
DYmvs0YlbUCFi4D9I/Q7Hs3G+/J/1t7MiC8e71rOyjHguWOqyQHwwdeIwl4nUvxc
Yik2PGfRmQ2m37bIU6d4IXxCQb6l9rgftwf1LNXmXcvmqUKPO7FQdAAzXTyAHK2M
ogJdn01o/GI7TRLyCbE8ezLCveSu8Ef6h/0vSzE9zmLbJad0uLhSBGApvpsTCCqG
SM49AwEHAgME1AThRI63qY5pPs6baKeL2rdbZsAycCcoV5/h+eP8+khefenG18V6
2TIwJs7tqfNu0so4ZKity5U0roOP04IgT4kCVgQoAQgAQBYhBDu2OeVvhh+i6GUF
aQ/daC2XTKcqBQJgKx/uIh0BU3VwZXJzZWRlZCBieSAweEVEMkVEMTlGODVCMzY4
MkMACgkQD91oLZdMpyrkPxAAhqdxxeQR1D9Qs6KBWD32GdnbySIdYJNZd8eqF85z
aC9G5YFe27lRH8d8DsG0zZDg9bYuLLm7J86Jq+21SIjuD1hHxLDd0cMelG2UwtW6
3M169+J7Al/ZaPDFEDmpqukFi8TvJkVYubebAkoKEdHWohHnbIHfNLe5m6JnQ0UY
3+WzyQmliRUmEzk6/fkagtHIqF98MmVNjvv7gb69YKhJbVKUy/deRnlOy/rgOLOu
eaQ+ieNpjOB6cPq1Y0PJklXEdIP350IxoxDsoXuAYiPCcHGqvs9FtL8Jcpa4AuK+
Pd30b0gSUiOJnzSyQnbXe6eJUROlEXCiW+5j7FreDFh6bKM5nAgGsM6PiPrAJP1F
ygG5q5XKhtoJOynFdVoKHz5vKBfG9rTUo7Gt6hVHGZhFY4aXI/4lIsHLSo2DsCVB
+qJa1zxtCPvzfv9sdzHveIhfUkOKx2o+Pj1qKqYqij+ZwEV2/vrM2VlXkj5c2Skk
AQB+EUxcmD61baHEVxq1W1nu3ND6VpzBFc8XytZH5ILPr7ffI2DZgmsnrFdzf0uX
aKe2qAe2an3hlwIdvZlZJLM3RK+CxQHPuFTCPIEuMA2H0NSnd40CAwAJrgJMQg6J
GtFxytk/Se55X3OyPOpl1ixz7MYKgloZhMob/essPnrQvYrWcHC/GJ87DnMqo2pX
TGeJAxQEGAEIACYWIQQ7tjnlb4YfouhlBWkP3Wgtl0ynKgUCYCm+mwIbAgUJA4f9
bADiCRAP3Wgtl0ynKsAWIAQZEwgAfRYhBFU7mh9yi+pV+GNfB/RcJDHvi1pmBQJg
Kb6bXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9wZW5wZ3AuZmlmdGho
b3JzZW1hbi5uZXQ1NTNCOUExRjcyOEJFQTU1Rjg2MzVGMDdGNDVDMjQzMUVGOEI1
QTY2AAoJEPRcJDHvi1pmfaoA/iw6DRx41LbeezZ+TETZ+h4ZPnMecPSKrkFsECv4
k3DsAQDbMt9ULddPUjkMnKElW5V+hQ1XmvHBiOUuwXv2eeA9rQpcEACH9phSbfq/
zjuK8BeEJfkKkoXFcA27LsqOsV5TQ2+X3IKjpB0BkqRzILACVbfix1x2DucaH2z1
QO/TgDpyqmdq6YoZ1w1QXSmftOppeAxM+rVieVvu3/HyEh5i1WphZpOz2T6kC6p4
wF8mNjtcwQycSU32Nk3wInPNNzcnKRGpdP/sanOTwrd9CmxoAH9pVtFomsgiWUBs
PYKAj7/DhQMb2cBhTN252RDSLMvGADaKnMekCSMLQ5TyCP4G7m+vHdgbrpdUI/Iu
vQ/Uw5ejzaURTJqKt5+s0E81KYYu8uBXGhufLwNTfIGh16ooEkY6wegGkmRvU3v5
kiWVuz5+gma24g7Z1Lan4UWLNMBzQxYQLFZ4AAOicVbpEb0o1LTvKBW8a1xe5tQ2
odoR4/6lngQQU0eTh2w7kJkAxlXF9OSN0NJnLWNR8E+7nKZo1IhYl2EwiN4PDokg
nPaq8YBeM1sI6lbsBb5RpCoR/+yKXxRUYJEd57dNtcZ6mcQv9twR9plw4z71FroL
gkT/2C65fE6Z/o3h7HCjjhbwgpQ0J8QYMgalgmUykW5Vid7z2ZfMxyewIjSS2SWR
PfG5kPU6OvjNuDaGPSOkDQUBQ6U9H9b3Lu2WtVai5PcwU+G5SukpK8RcBN4S0B9U
LpW12CiCdY+Bg+y+MQTdDxSEI46tQ8Oluw==
=YfQM
-----END PGP PUBLIC KEY BLOCK-----

189
libXaw3d.spec Normal file
View File

@ -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

164
xaw3d-3dlabel.patch Normal file
View File

@ -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 &&

63
xaw3d-elf.patch Normal file
View File

@ -0,0 +1,63 @@
From: Jan Engelhardt <jengelh@inai.de>
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

277
xaw3d-fontset.patch Normal file
View File

@ -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) {

266
xaw3d-hsbar.patch Normal file
View File

@ -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;

524
xaw3d-secure.patch Normal file
View File

@ -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 <X11/Xaw3d/LayoutP.h>
#endif
+#include "XawAlloc.h"
+
#include <ctype.h>
#include <stdio.h>
@@ -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 <X11/Xaw3d/XawInit.h>
#include <X11/Xaw3d/MenuButtoP.h>
+#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 <X11/Xaw3d/SimpleP.h>
#include <X11/Xmu/Drawing.h>
+#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 <X11/Xmu/Initer.h>
#include <X11/Xmu/CharSet.h>
+#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 <X11/Xaw3d/SmeBSBP.h>
#include <X11/Xaw3d/Cardinals.h>
#include <stdio.h>
+#include "XawAlloc.h"
/* needed for abs() */
#include <stdlib.h>
@@ -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 <X11/Xfuncs.h>
#include <ctype.h> /* 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 <X11/Xos.h> /* for O_RDONLY */
#include <errno.h>
+#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 <wctype.h>
#ifdef HAVE_WIDEC_H
+#ifndef NO_WIDEC_H
#include <widec.h>
#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 <wchar.h>
--- 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++);

970
xaw3d-thumb.patch Normal file
View File

@ -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;

70
xaw3d.patch Normal file
View File

@ -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)