summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobody <nobody@gnome.org>2006-07-14 17:07:50 +0000
committernobody <nobody@gnome.org>2006-07-14 17:07:50 +0000
commitda2453fba5e9fbc68123f2c847b0439e62cbf8eb (patch)
treeb4d3651ddad7593a7359d9c251e1ab254be54d96
parent1eda7dba187dc22aab241aca69587a6b5dcd048a (diff)
This commit was manufactured by cvs2svn to create tagOOO_BUILD_2_0_2_17
'OOO_BUILD_2_0_2_17'.
-rw-r--r--AUTHORS2
-rwxr-xr-xbin/build-galleries2
-rwxr-xr-xbin/build-ooo17
-rwxr-xr-xbin/font-munge107
-rwxr-xr-xbin/help-font-munge50
-rwxr-xr-xbin/openoffice-xlate-lang12
-rwxr-xr-xbin/package-ooo193
-rwxr-xr-xbin/stat-localizations92
-rwxr-xr-xbin/test-ooo5
-rw-r--r--configure.in30
-rw-r--r--desktop/calc.desktop.in1
-rw-r--r--distro-configs/Frugalware.conf.in10
-rw-r--r--distro-configs/SUSE-9.1.conf.in1
-rw-r--r--doc/stat-localizations.txt65
-rw-r--r--fonts/opens___.ttfbin118264 -> 118264 bytes
-rw-r--r--patches/cairo/cairo-query-text-bounds.diff210
-rw-r--r--patches/cairo/vcl-composite-string-set-alpha.diff44
-rw-r--r--patches/evo2/dbaccess-evo-changes.diff29
-rw-r--r--patches/src680/automation-testtool-oobuildfix.diff29
-rw-r--r--patches/src680/buildfix-no-java-ppc.diff11
-rw-r--r--patches/src680/buildfix-testtool-skip-gij-ppc-hack.diff9
-rw-r--r--patches/src680/config_office-freetype-embolden-check.diff43
-rw-r--r--patches/src680/cws-ab19.diff411
-rw-r--r--patches/src680/cws-atkbridge-20060306.diff8085
-rw-r--r--patches/src680/cws-jl34.diff838
-rw-r--r--patches/src680/dbase-utf8.diff98
-rw-r--r--patches/src680/debian-dictionary.diff22
-rw-r--r--patches/src680/fix-fileview-search.diff20
-rw-r--r--patches/src680/fix_filedlghelper.diff31
-rw-r--r--patches/src680/framework-check-items.diff16
-rw-r--r--patches/src680/framework-nofocussteal.diff1115
-rw-r--r--patches/src680/frugalware.diff31
-rw-r--r--patches/src680/gcj-32bit-runtime-path.diff20
-rw-r--r--patches/src680/gengal-cleanup.diff203
-rw-r--r--patches/src680/gui-gtk-contextmenu.diff16
-rw-r--r--patches/src680/hang-sw-layout.diff32
-rw-r--r--patches/src680/help-msg-add-package-info.diff11
-rw-r--r--patches/src680/ms-interoperability-email-attachment-as-doc-xls-ppt-m99.diff42
-rw-r--r--patches/src680/office-cfg-vcl-greek-fonts.diff272
-rw-r--r--patches/src680/ooqstart-black-progress-bar.diff27
-rw-r--r--patches/src680/ooqstart-honour-sofficerc.diff49
-rw-r--r--patches/src680/recently-used.diff71
-rw-r--r--patches/src680/sc-csvfix-ui.diff10
-rw-r--r--patches/src680/sc-dp-hash-items.diff950
-rw-r--r--patches/src680/sc-get-pivot-data.diff65
-rw-r--r--patches/src680/sc-insert-note-on-right-click.diff20
-rw-r--r--patches/src680/sc-standard-filter-options-i18n-fake.diff587
-rw-r--r--patches/src680/sc-string-arg.diff19
-rw-r--r--patches/src680/sc-xls-pivot-optimization.diff256
-rw-r--r--patches/src680/sd-sls-process-request-crash-fix.diff32
-rw-r--r--patches/src680/sfx2-fallback-to-en-help.diff124
-rw-r--r--patches/src680/sfx2-title-generic-url.diff13
-rw-r--r--patches/src680/speed-local-link.diff142
-rw-r--r--patches/src680/speed-quickstart-i18n.diff72
-rw-r--r--patches/src680/styles-dash.diff273
-rw-r--r--patches/src680/sw-ww8-redlining.diff23
-rw-r--r--patches/src680/system-neon-0.26.diff278
-rw-r--r--patches/src680/vcl-fontconfig-hints.diff618
-rw-r--r--patches/src680/vcl-freetype-2.2.x-2.0.2.diff83
-rw-r--r--patches/src680/vcl-gnome-screensaver-poke.diff242
-rw-r--r--patches/src680/win32-activex-disable.diff278
-rw-r--r--patches/src680/win32-multi-lang-installer.diff826
-rw-r--r--patches/src680/wizard-evo-local.diff11
-rw-r--r--patches/test/ooxml-filter.diff61
-rw-r--r--patches/test/sc-source-filter-ecma-ecma-cxx.diff318
-rw-r--r--patches/test/sc-source-filter-ecma-makefile-mk.diff71
-rw-r--r--patches/test/sc-source-filter-ecma-parsebase-hxx.diff50
-rw-r--r--scratch/sc-vba/makefile.mk2
-rw-r--r--scratch/sc-vba/vbaapplication.hxx10
-rw-r--r--scratch/sc-vba/vbacharacters.hxx5
-rw-r--r--scratch/sc-vba/vbachart.hxx2
-rw-r--r--scratch/sc-vba/vbacollectionimpl.hxx8
-rw-r--r--scratch/sc-vba/vbafont.cxx251
-rw-r--r--scratch/sc-vba/vbaglobals.cxx27
-rw-r--r--scratch/sc-vba/vbahelper.cxx17
-rw-r--r--scratch/sc-vba/vbapalette.cxx72
-rw-r--r--scratch/sc-vba/vbapalette.hxx20
-rw-r--r--scratch/sc-vba/vbarange.cxx475
-rw-r--r--scratch/sc-vba/vbarange.hxx48
-rw-r--r--scratch/sc-vba/vbaworkbook.hxx2
-rw-r--r--scratch/sc-vba/vbaworksheet.hxx8
-rw-r--r--src/Debian.dic10
82 files changed, 9228 insertions, 9523 deletions
diff --git a/AUTHORS b/AUTHORS
index 5d2fed48b..fb1ff1d5a 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,4 +1,4 @@
-Michael Meeks <michael@ximian.com>
+Michael Meeks <michael.meeks@novell.com>
Chris Halls <halls@debian.org>
Federico Mena <federico@ximian.com>
Martin Kretzschmar <martink@ximian.com>
diff --git a/bin/build-galleries b/bin/build-galleries
index 65072bc81..a0feb0d71 100755
--- a/bin/build-galleries
+++ b/bin/build-galleries
@@ -174,7 +174,7 @@ if test "$BUILD_OOO_GAL_FROM_OPENCLIPART" = "yes" ; then
echo "Doing gallery $gal_name..."
# xargs is necessary because I
- find $dir -name "*.png" -print0 | { xargs -0 $GAL_BIN --name "$gal_name" --path "$GAL_DIR" --destdir "$OODESTDIR" --number-from "$GAL_NUMBER_FROM" || exit 1; }
+ find $dir -name "*.png" -print0 | LC_CTYPE=C sort -z | { xargs -0 $GAL_BIN --name "$gal_name" --path "$GAL_DIR" --destdir "$OODESTDIR" --number-from "$GAL_NUMBER_FROM" || exit 1; }
done
fi
diff --git a/bin/build-ooo b/bin/build-ooo
index 700f9a0e2..0cac49669 100755
--- a/bin/build-ooo
+++ b/bin/build-ooo
@@ -69,12 +69,6 @@ if test "z$HOME" = "z"; then
export HOME="";
fi
cd $OOBUILDDIR
-# Import all of the OO.o environment
-if test "z$BUILD_WIN32" = "zyes"; then
- . $OOBUILDDIR/*.set.sh
-else
- . $OOBUILDDIR/*.Set.sh
-fi
if ! test "z$BUILD_DMAKE" == "zNO" -o -f "$SOLARENV/$OUTPATH/bin/dmake"; then
echo "A very clean straight-through build - deferring dep generation"
if test "z$BUILD_WIN32" != "zyes"; then
@@ -82,6 +76,15 @@ if ! test "z$BUILD_DMAKE" == "zNO" -o -f "$SOLARENV/$OUTPATH/bin/dmake"; then
export nodep=1
fi
fi
+echo 'Bootstrapping'
+./bootstrap || ./bootstrap || ./bootstrap || exit 1;
+echo 'Importing Environment'
+# Import all of the OO.o environment
+if test "z$BUILD_WIN32" = "zyes"; then
+ . $OOBUILDDIR/*.set.sh
+else
+ . $OOBUILDDIR/*.Set.sh
+fi
# Copy in missing libraries if we just built them
if test "z$SYSTEM_GCC" = "z"; then
echo "Copying libraries to $SOLARVER/$UPD/$INPATH/lib";
@@ -99,8 +102,6 @@ if test "z$BUILD_WIN32" != "zyes"; then
fi
bison --version
flex --version
-echo 'Bootstrapping'
-./bootstrap || ./bootstrap || ./bootstrap || exit 1;
# parallel build setting
EXTRA_BUILD_FLAGS=
if test "$BUILD_NCPUS" -gt 1; then
diff --git a/bin/font-munge b/bin/font-munge
index 9244aa796..7617da542 100755
--- a/bin/font-munge
+++ b/bin/font-munge
@@ -15,30 +15,99 @@ BEGIN { $ENV{OOO_VENDOR} ||= "unknown"; $uisans = 0; $uifixed = 0; }
s/(Bitstream Vera Serif;.*)Thorndale;/Thorndale;$1/;
s/(Bitstream Vera Serif;.*)Times New Roman;/Times New Roman;$1/;
+ # add Albany, Cumberland, and Thorndale
+ (m/Albany;/) || s/Arial;/Albany;Arial;/g;
+ (m/albany;/) || s/arial;/albany;arial;/g;
+ (m/Thorndale;/) || s/Times New Roman;/Thorndale;Times New Roman;/g;
+ (m/thorndale;/) || s/timesnewroman;/thorndale;timesnewroman;/g;
+ (m/Cumberland;/) || s/Courier New;/Cumberland;Courier New;/g;
+ (m/cumberland;/) || s/couriernew;/cumberland;couriernew;/g;
+
# add AMT fonts
- s/Albany;/Albany AMT;Albany;/g;
- s/albany;/albanyamt;albany;/g;
- s/Thorndale;/Thorndale AMT;Thorndale;/g;
- s/thorndale;/thorndaleamt;thorndale;/g;
- s/Cumberland;/Cumberland AMT;Cumberland;/g;
- s/cumberland;/cumberlandamt;cumberland;/g;
- s/comicsansms;/andymt;comicsansms;/g;
- s/kidprint;/andy;kidprint;/g;
+ (m/Albany AMT;/) || s/Albany;/Albany AMT;Albany;/g;
+ (m/albanyamt;/) || s/albany;/albanyamt;albany;/g;
+ (m/Thorndale AMT;/) || s/Thorndale;/Thorndale AMT;Thorndale;/g;
+ (m/thorndaleamt;/) || s/thorndale;/thorndaleamt;thorndale;/g;
+ (m/Cumberland AMT;/) || s/Cumberland;/Cumberland AMT;Cumberland;/g;
+ (m/cumberlandamt;/) || s/cumberland;/cumberlandamt;cumberland;/g;
+ (m/andymt;/) || s/comicsansms;/andymt;comicsansms;/g;
+ (m/andy;/) || s/kidprint;/andy;kidprint;/g;
# New bits from SUSE:
# add Nimbus fonts
- s/Arial;/Arial;Nimbus Sans L;/g;
- s/arial;/arial;nimbussansl;/g;
- s/Times New Roman;/Times New Roman;Nimbus Roman No9 L;/g;
- s/timesnewroman;/timesnewroman;nimbusromanno9l;/g;
- s/Courier New;/Courier New;Nimbus Mono L;/g;
- s/couriernew;/couriernew;nimbusmonol;/g;
-
- # prune duplicates
- s/nimbussansl;\(.*\)nimbussansl;/nimbussansl;$1/;
- s/nimbusmonol;\(.*\)nimbusmonol;/nimbusmonol;$1/;
- s/nimbusromanno9l;\(.*\)nimbusromanno9l;/nimbusromanno9l;$1/;
+ (m/Nimbus Sans L;/) || s/Arial;/Arial;Nimbus Sans L;/g;
+ (m/nimbussansl;/) || s/arial;/arial;nimbussansl;/g;
+ (m/Nimbus Roman No9 L;/) || s/Times New Roman;/Times New Roman;Nimbus Roman No9 L;/g;
+ (m/nimbusromanno9l;/) || s/timesnewroman;/timesnewroman;nimbusromanno9l;/g;
+ (m/Nimbus Mono L;/) || s/Courier New;/Courier New;Nimbus Mono L;/g;
+ (m/nimbusmonol;/) || s/couriernew;/couriernew;nimbusmonol;/g;
+
+
+# prune duplicates
+
+ s/Albany AMT;(.*)Albany AMT;/Albany AMT;$1/;
+ s/Albany;(.*)Albany;/Albany;$1/;
+ s/Arial;(.*)Arial;/Arial;$1/;
+ s/Nimbus Sans L;(.*)Nimbus Sans L;/Nimbus Sans L;$1/;
+
+ s/albanyamt;(.*)albanyamt;/albanyamt;$1/;
+ s/albany;(.*)albany;/albany;$1/;
+ s/arial;(.*)arial;/arial;$1/;
+ s/nimbussansl;(.*)nimbussansl;/nimbussansl;$1/;
+
+ s/Thorndale AMT;(.*)Thorndale AMT;/Thorndale AMT;$1/;
+ s/Thorndale;(.*)Thorndale;/Thorndale;$1/;
+ s/Times New Roman;(.*)Times New Roman;/Times New Roman;$1/;
+ s/Nimbus Roman No9 L;(.*)Nimbus Roman No9 L;/Nimbus Roman No9 L;$1/;
+
+ s/thorndaleamt;(.*)thorndaleamt;/thorndaleamt;$1/;
+ s/thorndale;(.*)thorndale;/thorndale;$1/;
+ s/timesnewroman;(.*)timesnewroman;/timesnewroman;$1/;
+ s/nimbusromanno9l;(.*)nimbusromanno9l;/nimbusromanno9l;$1/;
+
+ s/Cumberland AMT;(.*)Cumberland AMT;/Cumberland AMT;$1/;
+ s/Cumberland;(.*)Cumberland;/Cumberland;$1/;
+ s/Courier New;(.*)Courier New;/Courier New;$1/;
+ s/Nimbus Mono L;(.*)Nimbus Mono L;/Nimbus Mono L;$1/;
+
+ s/cumberlandamt;(.*)cumberlandamt;/cumberlandamt;$1/;
+ s/cumberland;(.*)cumberland;/cumberland;$1/;
+ s/couriernew;(.*)couriernew;/couriernew;$1/;
+ s/nimbusmonol;(.*)nimbusmonol;/nimbusmonol;$1/;
+
+
+ # sort fonts AMT over Albany... over MS over Nimbus over bitmap
+
+ s/(Helvetica;.*)Nimbus Sans L;/Nimbus Sans L;$1/;
+ s/(Nimbus Sans L;.*)Arial;/Arial;$1/;
+ s/(Arial;.*)Albany;/Albany;$1/;
+ s/(Albany;.*)Albany AMT;/Albany AMT;$1/;
+
+ s/(helvetica;.*)nimbussansl;/nimbussansl;$1/;
+ s/(nimbussansl;.*)arial;/arial;$1/;
+ s/(arial;.*)albany;/albany;$1/;
+ s/(albany;.*)albanyamt;/albanyamt;$1/;
+
+ s/(Times;.*)Nimbus Roman No9 L;/Nimbus Roman No9 L;$1/;
+ s/(Nimbus Roman No9 L;.*)Times New Roman;/Times New Roman;$1/;
+ s/(Times New Roman;.*)Thorndale;/Thorndale;$1/;
+ s/(Thorndale;.*)Thorndale AMT;/Thorndale AMT;$1/;
+
+ s/(times;.*)nimbusromanno9l;/nimbusromanno9l;$1/;
+ s/(nimbusromanno9l;.*)timesnewroman;/timesnewroman;$1/;
+ s/(timesnewroman;.*)thorndale;/thorndale;$1/;
+ s/(thorndale;.*)thorndaleamt;/thorndaleamt;$1/;
+
+ s/(Courier;.*)Nimbus Mono L;/Nimbus Mono L;$1/;
+ s/(Nimbus Mono L;.*)Courier New;/Courier New;$1/;
+ s/(Courier New;.*)Cumberland;/Cumberland;$1/;
+ s/(Cumberland;.*)Cumberland AMT;/Cumberland AMT;$1/;
+
+ s/(courier;.*)nimbusmonol;/nimbusmonol;$1/;
+ s/(nimbusmonol;.*)couriernew;/couriernew;$1/;
+ s/(couriernew;.*)cumberland;/cumberland;$1/;
+ s/(cumberland;.*)cumberlandamt;/cumberlandamt;$1/;
# Some RedHat CJK bits
diff --git a/bin/help-font-munge b/bin/help-font-munge
index e688d1aa8..96da61323 100755
--- a/bin/help-font-munge
+++ b/bin/help-font-munge
@@ -5,25 +5,6 @@ BEGIN { $ENV{OOO_VENDOR} ||= "unknown"; $helpsans = 0; $helpfixed = 0; }
# This does a partial substitution of the really
# mechanical bits of our fonts in help content.
- # add URW fonts
- s/Arial,/Arial,\"Nimbus Sans L\",/g;
- s/\"Courier New\",/\"Courier New\",\"Nimbus Mono L\",/g;
- s/\"Times New Roman\",/\"Times New Roman\",\"Nimbus Roman No9 L\",/g;
-
- # make sure Albany, Cumberland, and Thorndale are there
- s/Arial,/Albany,Arial,/g;
- s/\"Courier New\",/Cumberland,\"Courier New\",/g;
- s/\"Times New Roman\",/Thorndale,\"Times New Roman\",/g;
-
- # make sure that Albany and Arial are preferred over Helvetica
- s/(Helvetica\,.*)Albany\,/Albany\,$1/;
- s/(Helvetica\,.*)Arial\,/Arial\,$1/;
-
- # add AMT fonts
- s/Albany,/\"Albany AMT\",Albany,/g;
- s/Cumberland,/\"Cumberland AMT\",Cumberland,/g;
- s/Thorndale,/\"Thorndale AMT\",Thorndale,/g;
-
# move Bitstream Vera fonts after better fonts
s/\"Bitstream Vera Sans\"\,(.*Albany\,)/$1\"Bitstream Vera Sans\"\,/;
s/\"Bitstream Vera Sans\"\,(.*\"Albany AMT\"\,)/$1\"Bitstream Vera Sans\"\,/;
@@ -40,6 +21,21 @@ BEGIN { $ENV{OOO_VENDOR} ||= "unknown"; $helpsans = 0; $helpfixed = 0; }
s/\"Bitstream Vera Serif\"\,(.*\"Times New Roman\"\,)/$1\"Bitstream Vera Serif\"\,/;
s/\"Bitstream Vera Serif\"\,(.*\"Nimbus Roman No9 L\"\,)/$1\"Bitstream Vera Serif\"\,/;
+ # make sure Albany, Cumberland, and Thorndale are there
+ (m/Albany,/) || s/Arial,/Albany,Arial,/g;
+ (m/Cumberland,/) || s/\"Courier New\",/Cumberland,\"Courier New\",/g;
+ (m/Thorndale,/) || s/\"Times New Roman\",/Thorndale,\"Times New Roman\",/g;
+
+ # add AMT fonts
+ (m/\"Albany AMT\",/) || s/Albany,/\"Albany AMT\",Albany,/g;
+ (m/\"Cumberland AMT\",/) || s/Cumberland,/\"Cumberland AMT\",Cumberland,/g;
+ (m/\"Thorndale AMT\",/) || s/Thorndale,/\"Thorndale AMT\",Thorndale,/g;
+
+ # add URW fonts
+ (m/\"Nimbus Sans L\",/) || s/Arial,/Arial,\"Nimbus Sans L\",/g;
+ (m/\"Nimbus Mono L\",/) || s/\"Courier New\",/\"Courier New\",\"Nimbus Mono L\",/g;
+ (m/\"Nimbus Roman No9 L\",/) || s/\"Times New Roman\",/\"Times New Roman\",\"Nimbus Roman No9 L\",/g;
+
# prune duplicates
s/Albany,(.*)Albany,/Albany,$1/;
s/Cumberland,(.*)Cumberland,/Cumberland,$1/;
@@ -53,6 +49,22 @@ BEGIN { $ENV{OOO_VENDOR} ||= "unknown"; $helpsans = 0; $helpfixed = 0; }
s/\"Nimbus Mono L\",(.*)\"Nimbus Mono L\",/\"Nimbus Mono L\",$1/;
s/\"Nimbus Roman No9 L\",(.*)\"Nimbus Roman No9 L\",/\"Nimbus Roman No9 L\",$1/;
+ # sort fonts AMT over Albany... over MS over Nimbus over bitmap
+ s/(Helvetica\,.*)\"Nimbus Sans L\"\,/\"Nimbus Sans L\"\,$1/;
+ s/(\"Nimbus Sans L\"\,.*)Arial\,/Arial\,$1/;
+ s/(Arial\,.*)Albany\,/Albany\,$1/;
+ s/(Albany\,.*)\"Albany AMT\"\,/\"Albany AMT\"\,$1/;
+
+ s/(Times\,.*)\"Nimbus Roman No9 L\"\,/\"Nimbus Roman No9 L\"\,$1/;
+ s/(\"Nimbus Roman No9 L\"\,.*)\"Times New Roman\"\,/\"Times New Roman\"\,$1/;
+ s/(\"Times New Roman\"\,.*)Thorndale\,/Thorndale\,$1/;
+ s/(Thorndale\,.*)\"Thorndale AMT\"\,/\"Thorndale AMT\"\,$1/;
+
+ s/(Courier\,.*)\"Nimbus Mono L\"\,/\"Nimbus Mono L\"\,$1/;
+ s/(\"Nimbus Mono L\"\,.*)\"Courier New\"\,/\"Courier New\"\,$1/;
+ s/(\"Courier New\"\,.*)Cumberland\,/Cumberland\,$1/;
+ s/(Cumberland\,.*)\"Cumberland AMT\"\,/\"Cumberland AMT\"\,$1/;
+
# push SansSerif to the end of the list, some Tamil fonts don't
# have all ISO-8859-1 characters defined
s/sans-serif,(.*);/$1,sans-serif;/;
diff --git a/bin/openoffice-xlate-lang b/bin/openoffice-xlate-lang
index cae3be0b4..f31cb7724 100755
--- a/bin/openoffice-xlate-lang
+++ b/bin/openoffice-xlate-lang
@@ -139,6 +139,18 @@ __DATA__
:hi-IN:hindi
:bs-BA:bosnian
:en-ZA:english_southafrican
+:mk:macedonian
+:lo:lao
+:as-IN:assamese
+:ml-IN:malayalam
+:mr-IN:marathi
+:or-IN:oriya
+:ur-IN:urdu
+:fa:farsi
+:lv:latvian
+:nr:ndebele
+:ne:nepalese
+:sh-YU:serbian
01:en-US:english_american
03:pt:portuguese
07:ru:russian
diff --git a/bin/package-ooo b/bin/package-ooo
index 6fc872b17..8c5742fc9 100755
--- a/bin/package-ooo
+++ b/bin/package-ooo
@@ -90,6 +90,12 @@ else
done
create_qstart_wrapper "$PREFIX/bin/oofromtemplate${BINSUFFIX}" "" "slot:5500" || exit 1;
create_qstart_wrapper "$PREFIX/bin/ooffice${BINSUFFIX}" "" "" || exit 1;
+ if test "z$VENDORNAME" = "zNovell" -o "z$VENDORNAME" = "zPLD" \
+ -o "z$VENDORNAME" = "zDebian"; then
+ for app in calc draw impress math web writer base fromtemplate ffice ; do
+ echo ".so man1/openoffice$BINSUFFIX.1" >| $MANDIR/man1/oo${app}$BINSUFFIX.1;
+ done
+ fi
fi
# no man-page so ...
@@ -112,8 +118,8 @@ if test "z$VENDORNAME" != "zRedHat"; then
echo "Generating man page ...";
man_page_in=$TOOLSDIR/man/openoffice.1.in
# use the distro specific man page if available
- if test -f $TOOLSDIR/man/openoffice.1_$DISTRO.in ; then
- man_page_in=$TOOLSDIR/man/openoffice.1_$DISTRO.in
+ if test -f $TOOLSDIR/man/openoffice.1_${DISTRO%%-*}.in ; then
+ man_page_in=$TOOLSDIR/man/openoffice.1_${DISTRO%%-*}.in
fi
sed -e "s|@BINSUFFIX@|$BINSUFFIX|g" $man_page_in \
>| "$OOBUILDDIR/openoffice$BINSUFFIX.1" || exit 1;
@@ -276,43 +282,156 @@ rm -Rf $OOINSTDIR/share/uno_packages/cache/*
echo "Done";
+remove_help_localization()
+{
+ lang=$1
+
+ # nothing to be done if the localization is en-US if it does not exist
+ # or if it is already removed
+ test "$lang" = "en-US" -o \
+ ! -e $OOINSTDIR/help/$lang -o \
+ -L $OOINSTDIR/help/$lang && return;
+
+ echo "... remove \"$lang\""
+
+ rm -rf $OOINSTDIR/help/$lang
+ grep -v "$OOINSTBASE/help/$lang" $OODESTDIR/gid_Module_Root.$lang >$OODESTDIR/gid_Module_Root.$lang.new
+ mv -f $OODESTDIR/gid_Module_Root.$lang.new $OODESTDIR/gid_Module_Root.$lang
+ # FIXME: the following code could be used without the condition
+ # and should replace the lines above after only the milestones
+ # providing gid_Module_Langpack_Help and fixed gid_Module_Root.$lang
+ # are supported
+ # Note: The problem with gid_Module_Root.$lang is that it still includes
+ # %dir */help/* entries.
+ if test -f $OODESTDIR/gid_Module_Langpack_Help.$lang ; then
+ grep -v "$OOINSTBASE/help/$lang" $OODESTDIR/gid_Module_Langpack_Help.$lang >$OODESTDIR/gid_Module_Langpack_Help.$lang.new
+ mv -f $OODESTDIR/gid_Module_Langpack_Help.$lang.new $OODESTDIR/gid_Module_Langpack_Help.$lang
+ fi
+
+ # Note: We created a compat symlink in the past. It is no longer necessary.
+ # We do not want it because RPM has problems with update when we remove
+ # poor localizations in never packages
+}
+
# Check if the English help is installed and is in the main package (is first on the list)
# Note that Java-disabled builds do not create help at all.
if test -f $OOINSTDIR/help/en/sbasic.cfg -a \
"`for lang in $OOO_LANGS_LIST ; do echo $lang ; break ; done`" = "en-US" ; then
+
echo "Removing duplicated English help..."
for lang in $OOO_LANGS_LIST ; do
- test "$lang" = "en-US" && continue || :;
test ! -f $OOINSTDIR/help/en/sbasic.cfg -o ! -f $OOINSTDIR/help/$lang/sbasic.cfg && continue;
if diff $OOINSTDIR/help/en/sbasic.cfg $OOINSTDIR/help/$lang/sbasic.cfg >/dev/null 2>&1 ; then
- echo "... remove \"$lang\""
- rm -rf $OOINSTDIR/help/$lang
- grep -v "$OOINSTBASE/help/$lang" $OODESTDIR/gid_Module_Root.$lang >$OODESTDIR/gid_Module_Root.$lang.new
- mv -f $OODESTDIR/gid_Module_Root.$lang.new $OODESTDIR/gid_Module_Root.$lang
- # FIXME: the following code could be used without the condition
- # and should replace the lines above after only the milestones
- # providing gid_Module_Langpack_Help and fixed gid_Module_Root.$lang
- # are supported
- # Note: The problem with gid_Module_Root.$lang is that it still includes
- # %dir */help/* entries.
- if test -f $OODESTDIR/gid_Module_Langpack_Help.$lang ; then
- grep -v "$OOINSTBASE/help/$lang" $OODESTDIR/gid_Module_Langpack_Help.$lang >$OODESTDIR/gid_Module_Langpack_Help.$lang.new
- mv -f $OODESTDIR/gid_Module_Langpack_Help.$lang.new $OODESTDIR/gid_Module_Langpack_Help.$lang
- fi
- echo "... link \"$lang\" to \"en\""
- ln -sf en $OOINSTDIR/help/$lang
- echo "$OOINSTBASE/help/$lang" >>$OODESTDIR/gid_Module_Root.$lang
- # FIXME: the following code could be used without the condition
- # and should replace the line above after only the milestones
- # providing gid_Module_Langpack_Help are supported
- if test -f $OODESTDIR/gid_Module_Langpack_Help.$lang ; then
- echo "$OOINSTBASE/help/$lang" >>$OODESTDIR/gid_Module_Langpack_Help.$lang
- fi
+ remove_help_localization $lang
fi
done
+
+ echo "Removing poor help localizations..."
+
+ # FIXME: Should be configurable via a configure switch
+ OOO_POOR_HELP_LOCALIZATIONS=
+ if test "$VENDORNAME" = "Novell" ; then
+ # These are the localizations with less than 50% of localized string
+ # The list is generated by bin/stat-localizations
+ # See also doc/stat-localizations.txt
+ OOO_POOR_HELP_LOCALIZATIONS="af be-BY ca cy fi hi-IN lt nb nn st ts xh zu sr-CS vi rw tr el hr mk sk sl bg"
+ fi
+ for lang in $OOO_POOR_HELP_LOCALIZATIONS ; do
+ remove_help_localization $lang
+ done
fi
+if test -d $OOINSTDIR/sdk ; then
+ # bin potential .orig files
+ find $OOINSTDIR/sdk -name "*.orig" -exec rm -f {} \;
+
+ # move some SDK directories to the right place according to FHS
+ # note that examples must stay in $OOINSTDIR/sdk because there are used
+ # relative paths to $OOINSTDIR/sdk/setting and it does not work via
+ # a symlink
+ mkdir -p $PREFIX/include
+ mkdir -p $DATADIR/idl
+ mkdir -p $DATADIR/xml
+ mkdir -p $DATADIR/$OOOINSTALLDIRNAME/sdk
+ mkdir -p $DOCDIR/sdk
+ mv $OOINSTDIR/sdk/include $PREFIX/include/$OOOINSTALLDIRNAME
+ mv $OOINSTDIR/sdk/classes $DATADIR/$OOOINSTALLDIRNAME/sdk/classes
+ mv $OOINSTDIR/sdk/idl $DATADIR/idl/$OOOINSTALLDIRNAME
+ mv $OOINSTDIR/sdk/xml $DATADIR/xml/$OOOINSTALLDIRNAME
+ mv $OOINSTDIR/sdk/docs $DOCDIR/sdk
+ mv $OOINSTDIR/sdk/share/readme $DOCDIR/sdk
+ mv $OOINSTDIR/sdk/LICENSE* $DOCDIR/sdk
+ mv $OOINSTDIR/sdk/README* $DOCDIR/sdk
+ mv $OOINSTDIR/sdk/index.html $DOCDIR/sdk
+
+ # bin empty directories
+ rmdir $OOINSTDIR/sdk/share/
+
+ # compat symlinks
+ ln -sf $PREFIXBASE/include/$OOOINSTALLDIRNAME $OOINSTDIR/sdk/include
+ ln -sf $DATADIRBASE/$OOOINSTALLDIRNAME/sdk/classes $OOINSTDIR/sdk/classes
+ ln -sf $DATADIRBASE/idl/$OOOINSTALLDIRNAME $OOINSTDIR/sdk/idl
+ ln -sf $DATADIRBASE/xml/$OOOINSTALLDIRNAME $OOINSTDIR/sdk/xml
+ ln -sf $DOCDIRBASE/sdk/docs $OOINSTDIR/sdk/
+ ln -sf $DOCDIRBASE/sdk/index.html $OOINSTDIR/sdk/index.html
+ ln -sf $OOINSTBASE/sdk/examples $DOCDIR/sdk/examples
+
+ # fix file list
+ sed -e "s|^\(%dir \)\?$OOINSTBASE/sdk/include|\1$PREFIXBASE/include/$OOOINSTALLDIRNAME|" \
+ -e "s|^\(%dir \)\?$OOINSTBASE/sdk/classes|\1$DATADIRBASE/$OOOINSTALLDIRNAME/sdk/classes|" \
+ -e "s|^\(%dir \)\?$OOINSTBASE/sdk/idl|\1$DATADIRBASE/idl/$OOOINSTALLDIRNAME|" \
+ -e "s|^\(%dir \)\?$OOINSTBASE/sdk/xml|\1$DATADIRBASE/xml/$OOOINSTALLDIRNAME|" \
+ -e "s|^\(%dir \)\?$OOINSTBASE/sdk/docs|\1$DOCDIRBASE/sdk/docs|" \
+ -e "s|^\(%dir \)\?$OOINSTBASE/sdk/share/readme|\1$DOCDIRBASE/sdk/readme|" \
+ -e "s|^$OOINSTBASE/sdk/LICENSE\(.*\)$|$DOCDIRBASE/sdk/LICENSE\1|" \
+ -e "s|^$OOINSTBASE/sdk/README\(.*\)$|$DOCDIRBASE/sdk/README\1|" \
+ -e "s|^$OOINSTBASE/sdk/index.html$|$DOCDIRBASE/sdk/index.html|" \
+ -e "s|^\(%dir \)\?$OOINSTBASE/sdk/share.*$||" \
+ -e "/\.orig$/D" \
+ -e "/^$/D" \
+ $OODESTDIR/gid_Module_Root_SDK \
+ >$OODESTDIR/gid_Module_Root_SDK.new
+ mv $OODESTDIR/gid_Module_Root_SDK.new $OODESTDIR/gid_Module_Root_SDK
+ #
+ echo "%dir $DATADIRBASE/$OOOINSTALLDIRNAME/sdk" >>$OODESTDIR/gid_Module_Root_SDK
+ echo "%dir $DATADIRBASE/$OOOINSTALLDIRNAME" >>$OODESTDIR/gid_Module_Root_SDK
+ echo "%dir $DATADIRBASE/idl" >>$OODESTDIR/gid_Module_Root_SDK
+ echo "%dir $DATADIRBASE/xml" >>$OODESTDIR/gid_Module_Root_SDK
+ echo "%dir $DOCDIRBASE/sdk/docs" >>$OODESTDIR/gid_Module_Root_SDK
+ echo "%dir $DOCDIRBASE/sdk" >>$OODESTDIR/gid_Module_Root_SDK
+ echo "%dir $DOCDIRBASE" >>$OODESTDIR/gid_Module_Root_SDK
+ echo "$OOINSTBASE/sdk/include" >>$OODESTDIR/gid_Module_Root_SDK
+ echo "$OOINSTBASE/sdk/classes" >>$OODESTDIR/gid_Module_Root_SDK
+ echo "$OOINSTBASE/sdk/idl" >>$OODESTDIR/gid_Module_Root_SDK
+ echo "$OOINSTBASE/sdk/xml" >>$OODESTDIR/gid_Module_Root_SDK
+ echo "$OOINSTBASE/sdk/docs" >>$OODESTDIR/gid_Module_Root_SDK
+ echo "$OOINSTBASE/sdk/index.html" >>$OODESTDIR/gid_Module_Root_SDK
+ echo "$DOCDIRBASE/sdk/examples" >>$OODESTDIR/gid_Module_Root_SDK
+
+ # generate default profiles
+ for file in setsdkenv_unix.csh setsdkenv_unix.sh ; do
+ sed -e "s,@OO_SDK_NAME@,OpenOffice.org2.0_SDK," \
+ -e "s,@OO_SDK_HOME@,$OOINSTBASE/sdk," \
+ -e "s,@OFFICE_HOME@,$OOINSTBASE," \
+ -e "s,@OO_SDK_URE_HOME@,," \
+ -e "s,@OO_SDK_MAKE_HOME@,/usr/bin," \
+ -e "s,@OO_SDK_ZIP_HOME@,/usr/bin," \
+ -e "s,@OO_SDK_CPP_HOME@,/usr/bin," \
+ -e "s,@OO_SDK_CC_55_OR_HIGHER@,," \
+ -e "s,@OO_SDK_JAVA_HOME@,$JAVA_HOME," \
+ -e "s,@OO_SDK_OUTPUT_DIR@,\$HOME," \
+ -e "s,@SDK_AUTO_DEPLOYMENT@,NO," \
+ $OOINSTDIR/sdk/$file.in \
+ > $OOINSTDIR/sdk/$file
+ chmod 755 $OOINSTDIR/sdk/$file
+ echo $OOINSTBASE/sdk/$file >>$OODESTDIR/gid_Module_Root_SDK
+ done
+
+ # FIXME: I rather set this file to be non-world-writttable for now, i#64812
+ chmod go-w $OOINSTDIR/sdk/settings/component.uno.map
+fi
+
# move one file from one list of files to a second one
# Params: target_file_list source_file_list file_to_move
mv_file_between_flists()
@@ -353,7 +472,7 @@ fi
cd $OODESTDIR
if test -f gid_Module_Root_Files_2; then
- GID_MODULE_ROOT_FILES_LISTS="gid_Module_Root_Files_*"
+ GID_MODULE_ROOT_FILES_LISTS="gid_Module_Root_Files_[0-9]"
else
GID_MODULE_ROOT_FILES_LISTS=""
fi
@@ -407,6 +526,10 @@ if test "z$VENDORNAME" != "zDebian" ; then
test -f gid_Module_Langpack_Resource.$lang && lang_lists="$lang_lists gid_Module_Langpack_Resource.$lang" || :
test -n "$lang_lists" && cat $lang_lists | sort -u >$BUILDDIR/lang_${lang}_list.txt || :
done
+
+ if test -f gid_Module_Root_SDK ; then
+ cp gid_Module_Root_SDK $BUILDDIR/sdk_list.txt
+ fi
# sort && uniq suck but eg. gid_Module_Optional_Draw & Impress have substantial overlap
@@ -459,6 +582,20 @@ if test "z$VENDORNAME" != "zDebian" ; then
add_used_directories officebean_list.txt common_list.txt
fi
+ if test -f sdk_list.txt ; then
+ rm -f sdk_doc_list.txt
+ # in this case we move all entries including directories
+ mv_file_between_flists sdk_doc_list.txt sdk_list.txt "%dir $DOCDIRBASE/sdk/docs.*"
+ mv_file_between_flists sdk_doc_list.txt sdk_list.txt "$DOCDIRBASE/sdk/docs.*"
+ mv_file_between_flists sdk_doc_list.txt sdk_list.txt "$DOCDIRBASE/sdk/examples"
+ mv_file_between_flists sdk_doc_list.txt sdk_list.txt "$DOCDIRBASE/sdk/index.html"
+ mv_file_between_flists sdk_doc_list.txt sdk_list.txt "%dir $OOINSTBASE/sdk/examples.*"
+ mv_file_between_flists sdk_doc_list.txt sdk_list.txt "$OOINSTBASE/sdk/docs"
+ mv_file_between_flists sdk_doc_list.txt sdk_list.txt "$OOINSTBASE/sdk/examples.*"
+ mv_file_between_flists sdk_doc_list.txt sdk_list.txt "$OOINSTBASE/sdk/index.html"
+ add_used_directories sdk_doc_list.txt sdk_list.txt
+ fi
+
# remove known duplicities to do not have files packaged in two packages
# the Bulgarian fixes can be removed after the issue #54110 is fixed
remove_duplicity_from_flists common_list.txt lang_bg_list.txt $OOINSTBASE/presets/config/arrowhd.soe
@@ -518,6 +655,8 @@ else
create_package_directory gid_Module_Optional_Testtool pkg/openoffice.org-common
fi
+ create_package_directory gid_Module_Root_SDK pkg/openoffice.org-dev
+
for l in `echo $OOO_LANGS_LIST | sed -e s/en-US//`; do \
create_package_directory gid_Module_Root.$l pkg/openoffice.org-l10n-$l; \
create_package_directory gid_Module_Langpack_Resource.$l pkg/openoffice.org-l10n-$l; \
diff --git a/bin/stat-localizations b/bin/stat-localizations
new file mode 100755
index 000000000..ddd9e842c
--- /dev/null
+++ b/bin/stat-localizations
@@ -0,0 +1,92 @@
+#! /bin/sh
+
+usage()
+{
+ echo "This script counts how many strings of the given localization differs from"
+ echo "the English(US) localization"
+ echo
+ echo "Usage:" ${0##*/} locale ...
+ echo
+ echo "Presumptions:"
+ echo " - the module transex3 is built"
+ echo " - the profile *Env.Set* is sourced"
+ echo
+ echo "Note that the script is quite slow. It takes some minutes to extract strings"
+ echo "for one localization..."
+}
+
+if test -z "$1" -o "$1" = "--help" ; then
+ usage && exit 1;
+fi
+
+if ! which localize >/dev/null 2>&1 ; then
+ echo "Error: Unable to find the script \"localize\". Please, build and deliver"
+ echo " the module transex3 and keep the \*Env.Set\* sourced."
+ exit 1;
+fi
+
+extract_gsi()
+{
+ echo "Extracting $1 strings..."
+ localize -e -f "$2" -l "$1" >/dev/null 2>&1
+}
+
+final_stat=`mktemp /tmp/ooo-stat-localizationse.XXXXXXXX`
+
+primary_lang="en-US"
+
+primary_gsi=`mktemp /tmp/ooo-stat-localizationse.XXXXXXXX`
+extract_gsi $primary_lang $primary_gsi
+primary_strings=`mktemp /tmp/ooo-stat-localizationse.XXXXXXXX`
+cat $primary_gsi | cut -f 1,11 >$primary_strings
+
+primary_single_num=`grep -v "^helpcontent2" $primary_strings | sort -u | wc -l`
+primary_single_num_help=`grep "^helpcontent2" $primary_strings | sort -u | wc -l`
+
+
+for secondary_lang in $* ; do
+
+ secondary_gsi=`mktemp /tmp/ooo-stat-localizationse.XXXXXXXX`
+ extract_gsi $secondary_lang $secondary_gsi
+ secondary_strings=`mktemp /tmp/ooo-stat-localizationse.XXXXXXXX`
+ cat $secondary_gsi | cut -f 1,11 >$secondary_strings
+
+ echo "Counting $secondary_lang strings..."
+
+ single_num=`grep -h -v "^helpcontent2" $primary_strings $secondary_strings | sort -u | wc -l`
+ secondary_single_num=`grep -v "^helpcontent2" $secondary_strings | sort -u | wc -l`
+ single_num_help=`grep -h "^helpcontent2" $primary_strings $secondary_strings | sort -u | wc -l`
+ secondary_single_num_help=`grep "^helpcontent2" $secondary_strings | sort -u | wc -l`
+
+ #echo single_num=$single_num
+ #echo primary_single_num=$primary_single_num
+ #echo secondary_single_num=$secondary_single_num
+
+ #echo single_num_help=$single_num_help
+ #echo primary_single_num_help=$primary_single_num_help
+ #echo secondary_single_num_help=$secondary_single_num_help
+
+ localized=$((($single_num-$primary_single_num) * 100 / $primary_single_num))
+ localized_help=$((($single_num_help-$primary_single_num_help) * 100 / $primary_single_num_help))
+
+ echo
+ echo "Locale:$secondary_lang ui:${localized}% help:${localized_help}%"
+ echo
+
+ #
+ echo "Locale:$secondary_lang ui:${localized}% help:${localized_help}%" >>$final_stat
+
+ rm $secondary_strings
+ rm $secondary_gsi
+done
+
+rm $primary_strings
+rm $primary_gsi
+
+echo
+echo "==============================================================="
+echo "Status of localizations"
+echo "==============================================================="
+sort -n -t':' --key=4 $final_stat
+
+rm $final_stat
diff --git a/bin/test-ooo b/bin/test-ooo
index f28039d7c..ba82ac77e 100755
--- a/bin/test-ooo
+++ b/bin/test-ooo
@@ -240,6 +240,11 @@ testList=("
echo "Switching to en_US.UTF-8 locales!!!"
export LANG=en_US.UTF-8
+echo "Exporting OOO_FORCE_SYSALLOC=1"
+export OOO_FORCE_SYSALLOC=1
+echo "Exporting MALLOC_CHECK_=2"
+export MALLOC_CHECK_=2
+
is_blacklisted()
{
for t in $testBlackList ; do
diff --git a/configure.in b/configure.in
index d60e1ab58..0bcec9a55 100644
--- a/configure.in
+++ b/configure.in
@@ -1,4 +1,4 @@
-AC_INIT(ooo-build, 2.0.2.1)
+AC_INIT(ooo-build, 2.0.2.17)
AC_PREREQ(2.51)
AC_CONFIG_SRCDIR(bin/build-ooo)
AC_PREFIX_DEFAULT(/usr)
@@ -64,6 +64,16 @@ AC_ARG_WITH(lang,
--with-lang=ALL],
,)
+AC_ARG_WITH(poor-help-localizations,
+[
+ --with-poor-help-localizations
+ define the localizations with so incomplete help
+ that the English(US) one should be used instead.
+
+ Example: --with-poor-help-localizations="af ar ca"],
+,)
+
+
AC_ARG_ENABLE(dbgutil,
[ --enable-dbgutil: Include additional debugging utilities, such as
assertions, object counting, etc. Larger build.
@@ -747,6 +757,17 @@ OOO_LANGS="$with_lang"
AC_MSG_RESULT([$OOO_LANGS])
AC_SUBST(OOO_LANGS)
+AC_MSG_CHECKING([for insufficient help localizations])
+if test "$with_poor_help_localizations" = "yes" -o \
+ "$with_poor_help_localizations" = "no" ; then
+ # no default list defined for now, so it is empty for both "yes" and "no"
+ OOO_POOR_HELP_LOCALIZATIONS=
+else
+ OOO_POOR_HELP_LOCALIZATIONS="$with_poor_help_localizations"
+fi
+AC_MSG_RESULT([$OOO_POOR_HELP_LOCALIZATIONS])
+AC_SUBST(OOO_POOR_HELP_LOCALIZATIONS)
+
AC_MSG_CHECKING([whether to enable Mono bindings])
if test -n "$enable_mono" ; then
if test "$enable_mono" != "no" ; then
@@ -836,6 +857,7 @@ distro-configs/SUSE-9.1.conf
distro-configs/SUSE-9.2.conf
distro-configs/SUSE-9.3.conf
distro-configs/SUSE-10.0.conf
+distro-configs/SUSE-10.1.conf
distro-configs/Mandriva.conf
distro-configs/Mandriva64.conf
distro-configs/Gentoo.conf
@@ -903,8 +925,6 @@ To build run:
$warn_use_download make
bin/ooinstall <path-to-install>
- This is HEAD - the unstable branch for post-2.0.1 development.
- If you want to build the stable OOo, use:
- ooo-build-2-0 branch for 2.0
- ooo-build-2-0-1 branch for 2.0.1
+ This is ooo-build-2-0-2 - the stable branch for the 2.0.2 release.
+ If you want to build something cool, unstable, and risky, use HEAD.
"
diff --git a/desktop/calc.desktop.in b/desktop/calc.desktop.in
index 2c9506bdf..f1b5a3934 100644
--- a/desktop/calc.desktop.in
+++ b/desktop/calc.desktop.in
@@ -6,6 +6,7 @@ TryExec=oocalc@BINSUFFIX@
Exec=oocalc@BINSUFFIX@ %U
Icon=ooo-calc@BINSUFFIX@.png
Type=Application
+InitialPreference=6
Categories=Office;Spreadsheet
StartupNotify=@STARTUPNOTIFY@
MimeType=application/vnd.oasis.opendocument.spreadsheet;application/vnd.oasis.opendocument.spreadsheet-template;application/vnd.sun.xml.calc;application/vnd.sun.xml.calc.template;application/vnd.stardivision.calc;application/vnd.stardivision.chart;application/msexcel;application/vnd.ms-excel;text/x-comma-separated-values;text/x-csv;application/vnd.lotus-1-2-3;text/spreadsheet;application/excel;application/x-excel;application/x-ms-excel;application/x-msexcel;application/x-sylk;application/x-xls;application/xls
diff --git a/distro-configs/Frugalware.conf.in b/distro-configs/Frugalware.conf.in
index 6ecb8dff7..2be804371 100644
--- a/distro-configs/Frugalware.conf.in
+++ b/distro-configs/Frugalware.conf.in
@@ -4,17 +4,19 @@
--with-system-curl
--with-system-expat
--with-system-neon
---with-system-gcc=yes
--with-system-sndfile
--with-system-cairo
--with-system-boost
--with-system-hunspell
--with-system-odbc-headers
--with-system-sane-headers
---with-java-home=$JAVA_HOME
+--with-system-gcc=yes
+--with-system-nas
--with-javac
--with-firefox
---without-java
+--with-java=gij
+--with-openclipart=/usr/share/openclipart
+--with-docdir=/usr/share/doc/openoffice.org
--enable-libart
--enable-libsn
--enable-fontconfig
@@ -27,5 +29,5 @@
--enable-cairo
--enable-xsltproc
--disable-rpath
---disable-mozilla
+--disable-mozilla
--disable-odk
diff --git a/distro-configs/SUSE-9.1.conf.in b/distro-configs/SUSE-9.1.conf.in
index d733c87d3..2e9eb5084 100644
--- a/distro-configs/SUSE-9.1.conf.in
+++ b/distro-configs/SUSE-9.1.conf.in
@@ -1,4 +1,5 @@
--disable-access
+--disable-cairo
--disable-odk
--enable-gnome-vfs
--enable-libsn
diff --git a/doc/stat-localizations.txt b/doc/stat-localizations.txt
new file mode 100644
index 000000000..7f4dfee05
--- /dev/null
+++ b/doc/stat-localizations.txt
@@ -0,0 +1,65 @@
+The script bin/stat-localizations tries to find some poor localizations.
+
+The numbers show how many strings differ from the English localization. That's
+why the en-US localization has 0% and and en-GB has 7% resp. 10%.
+
+Note that there is no localizations with 100%. There are many international
+strings that are not translated. Then again some things marked translatable
+are really not eg.'#VALUE!' in Calc.
+
+
+Here is the statistic taken from Novell build (2 May, 2006):
+
+Locale:af ui:92% help:0%
+Locale:ar ui:85% help:0%
+Locale:be-BY ui:85% help:0%
+Locale:ca ui:91% help:0%
+Locale:cy ui:88% help:0%
+Locale:en-US ui:0% help:0%
+Locale:fi ui:92% help:0%
+Locale:gu-IN ui:60% help:0%
+Locale:hi-IN ui:56% help:0%
+Locale:lt ui:93% help:0%
+Locale:nb ui:92% help:0%
+Locale:nn ui:91% help:0%
+Locale:pa-IN ui:58% help:0%
+Locale:pt ui:59% help:0%
+Locale:st ui:96% help:0%
+Locale:ts ui:96% help:0%
+Locale:xh ui:96% help:0%
+Locale:zu ui:93% help:0%
+Locale:sr-CS ui:92% help:2%
+Locale:vi ui:86% help:2%
+Locale:en-GB ui:7% help:10%
+Locale:rw ui:88% help:11%
+Locale:tr ui:95% help:11%
+Locale:el ui:90% help:12%
+Locale:hr ui:88% help:14%
+Locale:mk ui:94% help:24%
+Locale:sk ui:91% help:28%
+Locale:sl ui:93% help:31%
+Locale:bg ui:91% help:32%
+Locale:zh-CN ui:31% help:64%
+Locale:zh-TW ui:31% help:65%
+Locale:et ui:92% help:66%
+Locale:km ui:39% help:74%
+Locale:ko ui:45% help:75%
+Locale:ja ui:72% help:86%
+Locale:cs ui:87% help:91%
+Locale:hu ui:92% help:91%
+Locale:pl ui:92% help:92%
+Locale:ru ui:89% help:92%
+Locale:da ui:91% help:93%
+Locale:fr ui:90% help:93%
+Locale:pt-BR ui:94% help:93%
+Locale:sv ui:93% help:93%
+Locale:de ui:93% help:94%
+Locale:nl ui:93% help:94%
+Locale:it ui:92% help:95%
+Locale:es ui:95% help:96%
+
+
+Note that many localizations were updated from the GSI sources that can be
+found at
+ftp://ftp.linux.cz/pub/localization/OpenOffice.org/devel/build/Files/OOB680
+The statistic is based on GSI files grabbed at 20 January, 2006.
diff --git a/fonts/opens___.ttf b/fonts/opens___.ttf
index 63f04c711..2c7dca6ef 100644
--- a/fonts/opens___.ttf
+++ b/fonts/opens___.ttf
Binary files differ
diff --git a/patches/cairo/cairo-query-text-bounds.diff b/patches/cairo/cairo-query-text-bounds.diff
new file mode 100644
index 000000000..fb95ef412
--- /dev/null
+++ b/patches/cairo/cairo-query-text-bounds.diff
@@ -0,0 +1,210 @@
+diff -rup canvas/source/cairo-orig/cairo_canvascustomsprite.cxx canvas/source/cairo/cairo_canvascustomsprite.cxx
+--- canvas/source/cairo-orig/cairo_canvascustomsprite.cxx 2006-05-25 20:38:42.000000000 +0200
++++ canvas/source/cairo/cairo_canvascustomsprite.cxx 2006-05-25 20:40:44.000000000 +0200
+@@ -62,6 +62,10 @@ namespace cairocanvas
+ ENSURE_AND_THROW( rRefDevice.get(),
+ "CanvasCustomSprite::CanvasCustomSprite(): Invalid sprite canvas" );
+
++ OSL_TRACE("sprite size: %d, %d",
++ ::canvas::tools::roundUp( rSpriteSize.Width ),
++ ::canvas::tools::roundUp( rSpriteSize.Height ));
++
+ //mpBufferSurface = mpSpriteCanvas->getSurface( aSize, CAIRO_CONTENT_COLOR );
+ mpBufferSurface = mpSpriteCanvas->getSurface( maSize );
+
+diff -rup canvas/source/cairo-orig/cairo_canvasfont.cxx canvas/source/cairo/cairo_canvasfont.cxx
+--- canvas/source/cairo-orig/cairo_canvasfont.cxx 2006-05-25 20:38:42.000000000 +0200
++++ canvas/source/cairo/cairo_canvasfont.cxx 2006-05-25 21:52:45.000000000 +0200
+@@ -111,7 +111,8 @@ namespace cairocanvas
+ return new TextLayout( aText,
+ nDirection,
+ nRandomSeed,
+- Reference( this ) );
++ Reference( this ),
++ mpRefDevice );
+ }
+
+ rendering::FontRequest SAL_CALL CanvasFont::getFontRequest( ) throw (uno::RuntimeException)
+diff -rup canvas/source/cairo-orig/cairo_textlayout.cxx canvas/source/cairo/cairo_textlayout.cxx
+--- canvas/source/cairo-orig/cairo_textlayout.cxx 2006-05-25 20:38:42.000000000 +0200
++++ canvas/source/cairo/cairo_textlayout.cxx 2006-05-25 22:00:57.000000000 +0200
+@@ -36,6 +36,9 @@
+ #include <canvas/debug.hxx>
+ #include <canvas/verbosetrace.hxx>
+
++#include <vcl/metric.hxx>
++#include <vcl/virdev.hxx>
++
+ #include <basegfx/matrix/b2dhommatrix.hxx>
+ #include <basegfx/numeric/ftools.hxx>
+
+@@ -50,14 +53,48 @@ using namespace ::com::sun::star;
+
+ namespace cairocanvas
+ {
++ namespace
++ {
++ void setupLayoutMode( OutputDevice& rOutDev,
++ sal_Int8 nTextDirection )
++ {
++ // TODO(P3): avoid if already correctly set
++ ULONG nLayoutMode;
++ switch( nTextDirection )
++ {
++ default:
++ nLayoutMode = 0;
++ break;
++ case rendering::TextDirection::WEAK_LEFT_TO_RIGHT:
++ nLayoutMode = TEXT_LAYOUT_BIDI_LTR;
++ break;
++ case rendering::TextDirection::STRONG_LEFT_TO_RIGHT:
++ nLayoutMode = TEXT_LAYOUT_BIDI_LTR | TEXT_LAYOUT_BIDI_STRONG;
++ break;
++ case rendering::TextDirection::WEAK_RIGHT_TO_LEFT:
++ nLayoutMode = TEXT_LAYOUT_BIDI_RTL;
++ break;
++ case rendering::TextDirection::STRONG_RIGHT_TO_LEFT:
++ nLayoutMode = TEXT_LAYOUT_BIDI_RTL | TEXT_LAYOUT_BIDI_STRONG;
++ break;
++ }
++
++ // set calculated layout mode. Origin is always the left edge,
++ // as required at the API spec
++ rOutDev.SetLayoutMode( nLayoutMode | TEXT_LAYOUT_TEXTORIGIN_LEFT );
++ }
++ }
++
+ TextLayout::TextLayout( const rendering::StringContext& aText,
+ sal_Int8 nDirection,
+ sal_Int64 nRandomSeed,
+- const CanvasFont::Reference& rFont ) :
++ const CanvasFont::Reference& rFont,
++ const DeviceRef& rRefDevice ) :
+ TextLayout_Base( m_aMutex ),
+ maText( aText ),
+ maLogicalAdvancements(),
+ mpFont( rFont ),
++ mpRefDevice( rRefDevice ),
+ mnTextDirection( nDirection )
+ {
+ }
+@@ -68,7 +105,10 @@ namespace cairocanvas
+
+ void SAL_CALL TextLayout::disposing()
+ {
++ ::osl::MutexGuard aGuard( m_aMutex );
++
+ mpFont.reset();
++ mpRefDevice.clear();
+ }
+
+ // XTextLayout
+@@ -120,25 +160,36 @@ namespace cairocanvas
+ {
+ ::osl::MutexGuard aGuard( m_aMutex );
+
+- ENSURE_AND_THROW( mpFont.get(),
+- "TextLayout::queryTextBounds(): invalid font" );
++ OutputDevice* pOutDev = mpRefDevice->getOutputWindow();
++ if( !pOutDev )
++ return geometry::RealRectangle2D();
++
++ VirtualDevice aVDev( *pOutDev );
++ aVDev.SetFont( mpFont->getVCLFont() );
++
++ // need metrics for Y offset, the XCanvas always renders
++ // relative to baseline
++ const ::FontMetric& aMetric( aVDev.GetFontMetric() );
++
++ setupLayoutMode( aVDev, mnTextDirection );
++
++ const sal_Int32 nAboveBaseline( -aMetric.GetIntLeading() - aMetric.GetAscent() );
++ const sal_Int32 nBelowBaseline( aMetric.GetDescent() );
+
+- // fake text bounds by either taking the advancement values,
+- // or assuming square glyph boxes (width similar to height)
+- const rendering::FontRequest& rFontRequest( mpFont->getFontRequest() );
+- const double nFontSize( ::std::max( rFontRequest.CellSize,
+- rFontRequest.ReferenceAdvancement ) );
+ if( maLogicalAdvancements.getLength() )
+ {
+- return geometry::RealRectangle2D( 0, -nFontSize/2,
++ return geometry::RealRectangle2D( 0, nAboveBaseline,
+ maLogicalAdvancements[ maLogicalAdvancements.getLength()-1 ],
+- nFontSize/2 );
++ nBelowBaseline );
+ }
+ else
+ {
+- return geometry::RealRectangle2D( 0, -nFontSize/2,
+- nFontSize * maText.Length,
+- nFontSize/2 );
++ return geometry::RealRectangle2D( 0, nAboveBaseline,
++ aVDev.GetTextWidth(
++ maText.Text,
++ ::canvas::tools::numeric_cast<USHORT>(maText.StartPosition),
++ ::canvas::tools::numeric_cast<USHORT>(maText.Length) ),
++ nBelowBaseline );
+ }
+ }
+
+@@ -256,38 +307,6 @@ namespace cairocanvas
+
+ namespace
+ {
+- void setupLayoutMode( OutputDevice& rOutDev,
+- sal_Int8 nTextDirection )
+- {
+- // TODO(P3): avoid if already correctly set
+- ULONG nLayoutMode;
+- switch( nTextDirection )
+- {
+- default:
+- nLayoutMode = 0;
+- break;
+- case rendering::TextDirection::WEAK_LEFT_TO_RIGHT:
+- nLayoutMode = TEXT_LAYOUT_BIDI_LTR;
+- break;
+- case rendering::TextDirection::STRONG_LEFT_TO_RIGHT:
+- nLayoutMode = TEXT_LAYOUT_BIDI_LTR | TEXT_LAYOUT_BIDI_STRONG;
+- break;
+- case rendering::TextDirection::WEAK_RIGHT_TO_LEFT:
+- nLayoutMode = TEXT_LAYOUT_BIDI_RTL;
+- break;
+- case rendering::TextDirection::STRONG_RIGHT_TO_LEFT:
+- nLayoutMode = TEXT_LAYOUT_BIDI_RTL | TEXT_LAYOUT_BIDI_STRONG;
+- break;
+- }
+-
+- // set calculated layout mode. Origin is always the left edge,
+- // as required at the API spec
+- rOutDev.SetLayoutMode( nLayoutMode | TEXT_LAYOUT_TEXTORIGIN_LEFT );
+- }
+- }
+-
+- namespace
+- {
+ class OffsetTransformer
+ {
+ public:
+diff -rup canvas/source/cairo-orig/cairo_textlayout.hxx canvas/source/cairo/cairo_textlayout.hxx
+--- canvas/source/cairo-orig/cairo_textlayout.hxx 2006-05-25 20:38:42.000000000 +0200
++++ canvas/source/cairo/cairo_textlayout.hxx 2006-05-25 21:54:24.000000000 +0200
+@@ -67,7 +67,8 @@ namespace cairocanvas
+ TextLayout( const ::com::sun::star::rendering::StringContext& aText,
+ sal_Int8 nDirection,
+ sal_Int64 nRandomSeed,
+- const CanvasFont::Reference& rFont );
++ const CanvasFont::Reference& rFont,
++ const DeviceRef& rRefDevice );
+
+ /// Dispose all internal references
+ virtual void SAL_CALL disposing();
+@@ -113,6 +114,7 @@ namespace cairocanvas
+ ::com::sun::star::rendering::StringContext maText;
+ ::com::sun::star::uno::Sequence< double > maLogicalAdvancements;
+ CanvasFont::Reference mpFont;
++ DeviceRef mpRefDevice;
+ sal_Int8 mnTextDirection;
+
+ void useFont( ::cairo::Cairo* pCairo );
diff --git a/patches/cairo/vcl-composite-string-set-alpha.diff b/patches/cairo/vcl-composite-string-set-alpha.diff
new file mode 100644
index 000000000..9f6aa87e4
--- /dev/null
+++ b/patches/cairo/vcl-composite-string-set-alpha.diff
@@ -0,0 +1,44 @@
+diff -rup vcl-orig/unx/source/gdi/gcach_xpeer.cxx vcl/unx/source/gdi/gcach_xpeer.cxx
+--- vcl-orig/unx/source/gdi/gcach_xpeer.cxx 2006-05-05 21:10:23.000000000 +0200
++++ vcl/unx/source/gdi/gcach_xpeer.cxx 2006-05-05 21:10:32.000000000 +0200
+@@ -179,6 +179,11 @@ void X11GlyphPeer::SetDisplay( Display*
+ pFunc=osl_getSymbol(pRenderLib, freePicFuncName.pData);
+ if( !pFunc ) return;
+ pXRenderFreePicture = (void(*)(Display*,Picture))pFunc;
++
++ OUString fillRectangleFuncName(RTL_CONSTASCII_USTRINGPARAM("XRenderFillRectangle"));
++ pFunc=osl_getSymbol(pRenderLib, fillRectangleFuncName.pData);
++ if( !pFunc ) return;
++ pXRenderFillRectangle = (void(*)(Display*,int,Picture,_Xconst XRenderColor*,int,int,unsigned int,unsigned int))pFunc;
+ #endif
+
+ // needed to initialize libXrender internals, we already know its there
+diff -rup vcl-orig/unx/source/gdi/gcach_xpeer.hxx vcl/unx/source/gdi/gcach_xpeer.hxx
+--- vcl-orig/unx/source/gdi/gcach_xpeer.hxx 2006-05-05 21:10:23.000000000 +0200
++++ vcl/unx/source/gdi/gcach_xpeer.hxx 2006-05-05 21:10:32.000000000 +0200
+@@ -85,6 +85,7 @@ public:
+ Picture (*pXRenderCreatePicture)(Display*,Drawable,XRenderPictFormat*,unsigned long,XRenderPictureAttributes*);
+ void (*pXRenderSetPictureClipRegion)(Display*,Picture,XLIB_Region);
+ void (*pXRenderFreePicture)(Display*,Picture);
++ void (*pXRenderFillRectangle)(Display*,int,Picture,_Xconst XRenderColor*,int,int,unsigned int,unsigned int);
+ #endif
+ };
+
+diff -rup vcl-orig/unx/source/gdi/salgdi3.cxx vcl/unx/source/gdi/salgdi3.cxx
+--- vcl-orig/unx/source/gdi/salgdi3.cxx 2006-05-05 21:10:23.000000000 +0200
++++ vcl/unx/source/gdi/salgdi3.cxx 2006-05-05 21:19:25.000000000 +0200
+@@ -800,6 +800,14 @@ void X11SalGraphics::DrawServerAAFontStr
+ aGCVal.clip_mask = None;
+ GC tmpGC = XCreateGC( pDisplay, aSrcPixmap, GCForeground | GCClipMask, &aGCVal );
+ XDrawPoint( pDisplay, aSrcPixmap, tmpGC, 0, 0 );
++
++ XRenderColor aRenderColor = { 0, 0, 0, 0xffff };
++#ifdef XRENDER_LINK
++ XRenderFillRectangle( pDisplay, PictOpAdd, aSrcPicture, &aRenderColor, 0, 0, 1, 1 );
++#else
++ (*aX11GlyphPeer.pXRenderFillRectangle)( pDisplay, PictOpAdd, aSrcPicture, &aRenderColor, 0, 0, 1, 1 );
++#endif
++
+ XFreeGC( pDisplay, tmpGC );
+
+ // notify xrender of target drawable
diff --git a/patches/evo2/dbaccess-evo-changes.diff b/patches/evo2/dbaccess-evo-changes.diff
index 51ecc4f1c..e63b0ed5b 100644
--- a/patches/evo2/dbaccess-evo-changes.diff
+++ b/patches/evo2/dbaccess-evo-changes.diff
@@ -148,7 +148,7 @@
};
String STR_KAB
{
-@@ -221,11 +229,21 @@
+@@ -221,10 +229,41 @@
Text [ de ] = "Microsoft Windows Adressbuch";
Text[ en-US ] = "Microsoft Windows Address Book";
};
@@ -159,18 +159,39 @@
- };
+ String STR_EVOLUTION_LOCAL
+ {
-+ Text [ de ] = "Evolution Local Adressbuch";
+ Text[ en-US ] = "Evolution Local";
++ Text[ de ] = "Lokales Evolution-Adressbuch";
++ Text[ es ] = "Libreta de direcciones local de Evolution";
++ Text[ fr ] = "Carnet d'adresses Evolution local";
++ Text[ it ] = "Rubrica locale di Evolution";
++ Text[ ja ] = "EvolutionローカルAddressbook ";
++ Text[ pt-BR ] = "Bloco de Endereços Local do Evolution";
++ Text[ zh-CN ] = "Evolution 本地地址簿";
++ Text[ zh-TW ] = "Evolution Local 通訊錄";
+ };
+ String STR_EVOLUTION_LDAP
+ {
-+ Text [ de ] = "Evolution LDAP Adressbuch";
+ Text[ en-US ] = "Evolution LDAP";
++ Text[ de ] = "Evolution-LDAP-Adressbuch";
++ Text[ es ] = "Libreta de direcciones LDAP de Evolution";
++ Text[ fr ] = "Carnet d'adresses Evolution LDAP";
++ Text[ it ] = "Rubrica LDAP di Evolution";
++ Text[ ja ] = "Evolution LDAP Addressbook `";
++ Text[ pt-BR ] = "Bloco de Endereços LDAP do Evolution";
++ Text[ zh-CN ] = "Evolution LDAP 地址簿";
++ Text[ zh-TW ] = "Evolution LDAP 通訊錄";
+ };
+ String STR_EVOLUTION_GROUPWISE
+ {
-+ Text [ de ] = "Groupwise Adressbuch";
+ Text[ en-US ] = "Groupwise";
++ Text[ de ] = "Evolution-Groupwise-Adressbuch";
++ Text[ es ] = "Libreta de direcciones de GroupWise de Evolution";
++ Text[ fr ] = "Carnet d'adresses Evolution Groupwise";
++ Text[ it ] = "Rubrica Groupwise di Evolution";
++ Text[ ja ] = "Evolution Groupwise Addressbook ";
++ Text[ pt-BR ] = "Bloco de Endereços Groupwise do Evolution";
++ Text[ zh-CN ] = "Evolution Groupwise 地址簿";
++ Text[ zh-TW ] = "Evolution Groupwise 通訊錄";
+ };
String STR_KAB
{
diff --git a/patches/src680/automation-testtool-oobuildfix.diff b/patches/src680/automation-testtool-oobuildfix.diff
index bb73a8559..4a3505d52 100644
--- a/patches/src680/automation-testtool-oobuildfix.diff
+++ b/patches/src680/automation-testtool-oobuildfix.diff
@@ -1,21 +1,3 @@
-Index: automation/source/app/testbasi.cxx
-===================================================================
-RCS file: /cvs/util/automation/source/app/testbasi.cxx,v
-retrieving revision 1.5
-diff -u -p -r1.5 testbasi.cxx
---- automation/source/app/testbasi.cxx 7 Sep 2005 19:15:51 -0000 1.5
-+++ automation/source/app/testbasi.cxx 3 Feb 2006 17:40:28 -0000
-@@ -128,6 +128,10 @@ IMPL_LINK( TTBasic, CErrorImpl, ErrorEnt
- BOOL TTBasic::Compile( SbModule* p )
- {
- p->SetComment( ((TestToolObj*)pTestObject)->GetRevision(p->GetSource()) );
-+ // the default ooo-build compatibilty options stuff
-+ // up the testtool make sure they are false
-+ p->SetCompatibleMode( false );
-+
- SbModule* pOldModule = GetCompileModule();
- SetCompileModule( p );
- p->SetSource( ((TestToolObj*)pTestObject)->PreCompile(p->GetSource()) );
Index: automation/source/testtool/objtest.cxx
===================================================================
RCS file: /cvs/util/automation/source/testtool/objtest.cxx,v
@@ -23,17 +5,6 @@ retrieving revision 1.20
diff -u -p -r1.20 objtest.cxx
--- automation/source/testtool/objtest.cxx 6 Oct 2005 12:37:43 -0000 1.20
+++ automation/source/testtool/objtest.cxx 3 Feb 2006 17:40:30 -0000
-@@ -1849,6 +1849,10 @@ void TestToolObj::SFX_NOTIFY( SfxBroadca
- {
- SbModule *pMod;
- pMod = pBasic->MakeModule( CUniString("--"), String() );
-+ if ( pMod )
-+ // the default ooo-build compatibilty options stuff
-+ // up the testtool
-+ pMod->SetCompatibleMode( false );
- pMod->Clear();
- if ( Load( aFullPathname, pMod ) )
- {
@@ -2715,7 +2719,8 @@ void TestToolObj::DebugFindNoErrors( BOO
SbxVariable* TestToolObj::Find( const String& Str, SbxClassType Type)
diff --git a/patches/src680/buildfix-no-java-ppc.diff b/patches/src680/buildfix-no-java-ppc.diff
deleted file mode 100644
index d02e4a632..000000000
--- a/patches/src680/buildfix-no-java-ppc.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- solenv/inc/unxlngppc4.mk.old 2006-01-20 11:50:50.000000000 +0100
-+++ solenv/inc/unxlngppc4.mk 2006-02-28 15:06:48.000000000 +0100
-@@ -36,7 +36,7 @@
- ASM=
- AFLAGS=
-
--SOLAR_JAVA*=TRUE
-+SOLAR_JAVA*=
- JAVAFLAGSDEBUG=-g
-
- # filter for supressing verbose messages from linker
diff --git a/patches/src680/buildfix-testtool-skip-gij-ppc-hack.diff b/patches/src680/buildfix-testtool-skip-gij-ppc-hack.diff
deleted file mode 100644
index 022b23601..000000000
--- a/patches/src680/buildfix-testtool-skip-gij-ppc-hack.diff
+++ /dev/null
@@ -1,9 +0,0 @@
---- testtools/prj/build.lst.orig 2004-12-10 17:48:26.000000000 +0100
-+++ testtools/prj/build.lst 2006-02-22 12:00:54.000000000 +0100
-@@ -1,6 +1 @@
- tt testtools : cpputools io remotebridges stoc javaunohelper pyuno NULL
--tt testtools\source\bridgetest nmake - all tt_bridgetest tt_bridgetest_idl tt_javaTestObjs NULL
--tt testtools\source\bridgetest\cli nmake - w,vc7 tt_cli tt_bridgetest tt_bridgetest_idl NULL
--tt testtools\source\bridgetest\idl nmake - all tt_bridgetest_idl NULL
--tt testtools\com\sun\star\comp\bridge nmake - all tt_javaTestObjs tt_bridgetest_idl NULL
--tt testtools\source\bridgetest\pyuno nmake - all tt_pyuno tt_bridgetest NULL
diff --git a/patches/src680/config_office-freetype-embolden-check.diff b/patches/src680/config_office-freetype-embolden-check.diff
new file mode 100644
index 000000000..497e7c128
--- /dev/null
+++ b/patches/src680/config_office-freetype-embolden-check.diff
@@ -0,0 +1,43 @@
+--- config_office/configure.in
++++ config_office/configure.in
+@@ -2693,6 +2693,27 @@
+ AC_SUBST(LIBWPD_LIBS)
+
+ dnl ===================================================================
++dnl Check whether freetype2 supports emboldening
++dnl ===================================================================
++if test "$SYSTEM_FREETYPE" = "YES" ; then
++ save_CPPFLAGS="$CPPFLAGS"
++ save_LDFLAGS="$LDFLAGS"
++ save_LIBS="$LIBS"
++ CPPFLAGS="$CPPFLAGS $FREETYPE_CFLAGS"
++ LDFLAGS="$LDFLAGS $FREETYPE_LIBS"
++ AC_CHECK_LIB(freetype, FT_GlyphSlot_Embolden,
++ [USE_FT_EMBOLDEN="YES"], [USE_FT_EMBOLDEN="NO"], [])
++ LDFLAGS="$save_LDFLAGS"
++ CPPFLAGS="$save_CPPFLAGS"
++ LIBS="$save_LIBS"
++else
++ # It was added in freetype-2.1.10
++ USE_FT_EMBOLDEN="NO"
++ AC_MSG_WARN([Internal freetype2 does not support emboldening.])
++fi
++AC_SUBST(USE_FT_EMBOLDEN)
++
++dnl ===================================================================
+ dnl Check for system libxml
+ dnl ===================================================================
+ AC_MSG_CHECKING([which libxml to use])
+
+
+--- config_office/set_soenv.in
++++ config_office/set_soenv.in
+@@ -1786,6 +1786,7 @@
+ ToFile( "LIBWPD_CFLAGS", "@LIBWPD_CFLAGS@", "e" );
+ ToFile( "LIBWPD_LIBS", "@LIBWPD_LIBS@", "e" );
+ ToFile( "SYSTEM_LIBXML", "@SYSTEM_LIBXML@", "e" );
++ToFile( "USE_FT_EMBOLDEN", "@USE_FT_EMBOLDEN@", "e" );
+ ToFile( "LIBXML_CFLAGS", "@LIBXML_CFLAGS@", "e" );
+ ToFile( "LIBXML_LIBS", "@LIBXML_LIBS@", "e" );
+ ToFile( "SYSTEM_EXPAT", "@SYSTEM_EXPAT@", "e" );
+
diff --git a/patches/src680/cws-ab19.diff b/patches/src680/cws-ab19.diff
new file mode 100644
index 000000000..b78564b35
--- /dev/null
+++ b/patches/src680/cws-ab19.diff
@@ -0,0 +1,411 @@
+Index: basic/source/classes/sb.cxx
+===================================================================
+RCS file: /cvs/script/basic/source/classes/sb.cxx,v
+retrieving revision 1.26
+retrieving revision 1.23.40.3
+diff -u -p -r1.26 -r1.23.40.3
+--- basic/source/classes/sb.cxx 29 Sep 2005 16:10:50 -0000 1.26
++++ basic/source/classes/sb.cxx 21 Mar 2006 12:55:13 -0000 1.23.40.3
+@@ -1243,13 +1243,15 @@ void StarBASIC::MakeErrorText( SbError n
+ }
+ GetSbData()->aErrMsg = aMsg1;
+ }
+- else
++ else if( nOldID != 0 )
+ {
+ String aStdMsg( RTL_CONSTASCII_USTRINGPARAM("Fehler ") );
+ aStdMsg += String::CreateFromInt32( nOldID);
+ aStdMsg += String( RTL_CONSTASCII_USTRINGPARAM(": Kein Fehlertext verfuegbar!") );
+ GetSbData()->aErrMsg = aStdMsg;
+ }
++ else
++ GetSbData()->aErrMsg = String::EmptyString();
+ }
+
+ BOOL StarBASIC::CError
+Index: basic/source/classes/sbxmod.cxx
+===================================================================
+RCS file: /cvs/script/basic/source/classes/sbxmod.cxx,v
+retrieving revision 1.27
+retrieving revision 1.22.40.3
+diff -u -p -r1.27 -r1.22.40.3
+--- basic/source/classes/sbxmod.cxx 29 Sep 2005 18:38:55 -0000 1.27
++++ basic/source/classes/sbxmod.cxx 3 Mar 2006 10:37:39 -0000 1.22.40.3
+@@ -1441,6 +1441,8 @@ BOOL SimpleTokenizer_Impl::getNextToken(
+ // Zahl?
+ else if( testCharFlags( c, CHAR_START_NUMBER ) == TRUE )
+ {
++ reType = TT_NUMBER;
++
+ // Buffer-Position initialisieren
+ int nPos = 0;
+
+@@ -1448,22 +1450,21 @@ BOOL SimpleTokenizer_Impl::getNextToken(
+ int nRadix = 10;
+
+ // Ist es eine Hex- oder Oct-Zahl?
+- if( c == '0' )
++ if( c == '&' )
+ {
+ // Octal?
+- // Java-Script geht von einem Octal-Wert aus, wenn nach 0 eine
+- // Ziffer im oktalen Ziffernbereich folgt
+- if( testCharFlags( peekChar(), CHAR_IN_OCT_NUMBER ) )
++ if( peekChar() == 'o' || peekChar() == 'O' )
+ {
++ // o entfernen
++ getChar();
+ nRadix = 8; // Octal-Basis
+
+ // Alle Ziffern einlesen
+ while( testCharFlags( peekChar(), CHAR_IN_OCT_NUMBER ) )
+ c = getChar();
+ }
+-
+- // Dementsprechend wird bei 0x Hex geparsed
+- else if( peekChar() == 'x' || peekChar() == 'X' )
++ // Hex?
++ else if( peekChar() == 'h' || peekChar() == 'H' )
+ {
+ // x entfernen
+ getChar();
+@@ -1473,10 +1474,14 @@ BOOL SimpleTokenizer_Impl::getNextToken(
+ while( testCharFlags( peekChar(), CHAR_IN_HEX_NUMBER ) )
+ c = getChar();
+ }
++ else
++ {
++ reType = TT_OPERATOR;
++ }
+ }
+
+ // Wenn nicht Oct oder Hex als double ansehen
+- if( nRadix == 10 )
++ if( reType == TT_NUMBER && nRadix == 10 )
+ {
+ // Flag, ob das letzte Zeichen ein Exponent war
+ BOOL bAfterExpChar = FALSE;
+@@ -1492,7 +1497,7 @@ BOOL SimpleTokenizer_Impl::getNextToken(
+ }
+ }
+
+- reType = TT_NUMBER;
++ // reType = TT_NUMBER;
+ }
+
+ // String?
+@@ -1500,6 +1505,8 @@ BOOL SimpleTokenizer_Impl::getNextToken(
+ {
+ // Merken, welches Zeichen den String eroeffnet hat
+ sal_Unicode cEndString = c;
++ if( c == '[' )
++ cEndString = ']';
+
+ // Alle Ziffern einlesen und puffern
+ while( peekChar() != cEndString )
+@@ -1524,7 +1531,10 @@ BOOL SimpleTokenizer_Impl::getNextToken(
+ if( reType != TT_ERROR )
+ {
+ getChar();
+- reType = TT_STRING;
++ if( cEndString == ']' )
++ reType = TT_IDENTIFIER;
++ else
++ reType = TT_STRING;
+ }
+ }
+
+@@ -1610,9 +1620,10 @@ SimpleTokenizer_Impl::SimpleTokenizer_Im
+ aCharTypeTab[i] |= nHelpMask;
+
+ // e und E sowie . von Hand ergaenzen
+- aCharTypeTab['e'] |= CHAR_IN_NUMBER;
+- aCharTypeTab['E'] |= CHAR_IN_NUMBER;
+- aCharTypeTab['.'] |= (USHORT)( CHAR_IN_NUMBER | CHAR_START_NUMBER );
++ aCharTypeTab['e'] |= CHAR_IN_NUMBER;
++ aCharTypeTab['E'] |= CHAR_IN_NUMBER;
++ aCharTypeTab['.'] |= (USHORT)( CHAR_IN_NUMBER | CHAR_START_NUMBER );
++ aCharTypeTab['&'] |= CHAR_START_NUMBER;
+
+ // Hex-Ziffern
+ for( i = 'a' ; i <= 'f' ; i++ )
+@@ -1627,11 +1638,12 @@ SimpleTokenizer_Impl::SimpleTokenizer_Im
+ // String-Beginn/End-Zeichen
+ aCharTypeTab['\''] |= CHAR_START_STRING;
+ aCharTypeTab['\"'] |= CHAR_START_STRING;
++ aCharTypeTab['['] |= CHAR_START_STRING;
+
+ // Operator-Zeichen
+ aCharTypeTab['!'] |= CHAR_OPERATOR;
+ aCharTypeTab['%'] |= CHAR_OPERATOR;
+- aCharTypeTab['&'] |= CHAR_OPERATOR;
++ // aCharTypeTab['&'] |= CHAR_OPERATOR; Removed because of #i14140
+ aCharTypeTab['('] |= CHAR_OPERATOR;
+ aCharTypeTab[')'] |= CHAR_OPERATOR;
+ aCharTypeTab['*'] |= CHAR_OPERATOR;
+@@ -1649,7 +1661,7 @@ SimpleTokenizer_Impl::SimpleTokenizer_Im
+ aCharTypeTab['~'] |= CHAR_OPERATOR;
+ aCharTypeTab['{'] |= CHAR_OPERATOR;
+ aCharTypeTab['}'] |= CHAR_OPERATOR;
+- aCharTypeTab['['] |= CHAR_OPERATOR;
++ // aCharTypeTab['['] |= CHAR_OPERATOR; Removed because of #i17826
+ aCharTypeTab[']'] |= CHAR_OPERATOR;
+ aCharTypeTab[';'] |= CHAR_OPERATOR;
+
+cvs diff: Diffing basic/source/comp
+Index: basic/source/comp/exprtree.cxx
+===================================================================
+RCS file: /cvs/script/basic/source/comp/exprtree.cxx,v
+retrieving revision 1.12
+retrieving revision 1.7.40.2
+diff -u -p -r1.12 -r1.7.40.2
+--- basic/source/comp/exprtree.cxx 9 Feb 2006 12:47:18 -0000 1.12
++++ basic/source/comp/exprtree.cxx 3 Mar 2006 10:38:37 -0000 1.7.40.2
+@@ -284,8 +284,7 @@ SbiExprNode* SbiExpression::Term()
+ // (Wobei 0 Parameter () entsprechen)
+ if( pDef->GetDims() )
+ {
+- if( !pPar
+- || ( pPar->GetSize() && pPar->GetSize() != pDef->GetDims() ) )
++ if( pPar && pPar->GetSize() && pPar->GetSize() != pDef->GetDims() )
+ pParser->Error( SbERR_WRONG_DIMS );
+ }
+ if( pDef->IsDefinedAs() )
+Index: basic/source/comp/loops.cxx
+===================================================================
+RCS file: /cvs/script/basic/source/comp/loops.cxx,v
+retrieving revision 1.7
+retrieving revision 1.3.48.3
+diff -u -p -r1.7 -r1.3.48.3
+--- basic/source/comp/loops.cxx 29 Sep 2005 18:40:22 -0000 1.7
++++ basic/source/comp/loops.cxx 3 Mar 2006 10:38:53 -0000 1.3.48.3
+@@ -57,11 +57,11 @@ void SbiParser::If()
+
+ // multiline IF
+ nEndLbl = aGen.Gen( _JUMPF, 0 );
+- while( !bAbort && Parse() )
++ eTok = Peek();
++ while( !( eTok == ELSEIF || eTok == ELSE || eTok == ENDIF ) &&
++ !bAbort && Parse() )
+ {
+ eTok = Peek();
+- if( eTok == ELSEIF || eTok == ELSE || eTok == ENDIF )
+- break;
+ if( IsEof() )
+ {
+ Error( SbERR_BAD_BLOCK, IF ); bAbort = TRUE; return;
+@@ -79,16 +79,18 @@ void SbiParser::If()
+
+ Next();
+ aGen.BackChain( nEndLbl );
++
++ aGen.Statement();
+ SbiExpression* pCond = new SbiExpression( this );
+ pCond->Gen();
+ nEndLbl = aGen.Gen( _JUMPF, 0 );
+ delete pCond;
+ TestToken( THEN );
+- while( !bAbort && Parse() )
++ eTok = Peek();
++ while( !( eTok == ELSEIF || eTok == ELSE || eTok == ENDIF ) &&
++ !bAbort && Parse() )
+ {
+ eTok = Peek();
+- if( eTok == ELSEIF || eTok == ELSE || eTok == ENDIF )
+- break;
+ if( IsEof() )
+ {
+ Error( SbERR_BAD_BLOCK, ELSEIF ); bAbort = TRUE; return;
+@@ -101,6 +103,8 @@ void SbiParser::If()
+ USHORT nElseLbl = nEndLbl;
+ nEndLbl = aGen.Gen( _JUMP, 0 );
+ aGen.BackChain( nElseLbl );
++
++ aGen.Statement();
+ StmntBlock( ENDIF );
+ }
+ else if( eTok == ENDIF )
+Index: basic/source/comp/scanner.cxx
+===================================================================
+RCS file: /cvs/script/basic/source/comp/scanner.cxx,v
+retrieving revision 1.17
+retrieving revision 1.11.82.2
+diff -u -p -r1.17 -r1.11.82.2
+--- basic/source/comp/scanner.cxx 31 Jan 2006 18:30:17 -0000 1.17
++++ basic/source/comp/scanner.cxx 3 Mar 2006 10:39:30 -0000 1.11.82.2
+@@ -238,7 +238,10 @@ BOOL SbiScanner::NextSym()
+ // Abschliessendes '_' durch Space ersetzen, wenn Zeilenende folgt
+ // (sonst falsche Zeilenfortsetzung)
+ if( !bUsedForHilite && !*pLine && *(pLine-1) == '_' )
++ {
++ aSym.GetBufferAccess(); // #109693 force copy if necessary
+ *((sal_Unicode*)(pLine-1)) = ' '; // cast wegen const
++ }
+ // Typkennung?
+ // Das Ausrufezeichen bitte nicht testen, wenn
+ // danach noch ein Symbol anschliesst
+Index: basic/source/runtime/inputbox.cxx
+===================================================================
+RCS file: /cvs/script/basic/source/runtime/inputbox.cxx,v
+retrieving revision 1.6
+retrieving revision 1.5.40.2
+diff -u -p -r1.6 -r1.5.40.2
+--- basic/source/runtime/inputbox.cxx 7 Sep 2005 21:39:07 -0000 1.6
++++ basic/source/runtime/inputbox.cxx 3 Mar 2006 10:45:10 -0000 1.5.40.2
+@@ -179,9 +179,9 @@ RTLFUNC(InputBox)
+ String aDefault;
+ INT32 nX = -1, nY = -1; // zentrieren
+ const String& rPrompt = rPar.Get(1)->GetString();
+- if ( nArgCount > 2 )
++ if ( nArgCount > 2 && !rPar.Get(2)->IsErr() )
+ aTitle = rPar.Get(2)->GetString();
+- if ( nArgCount > 3 )
++ if ( nArgCount > 3 && !rPar.Get(3)->IsErr() )
+ aDefault = rPar.Get(3)->GetString();
+ if ( nArgCount > 4 )
+ {
+Index: basic/source/runtime/methods.cxx
+===================================================================
+RCS file: /cvs/script/basic/source/runtime/methods.cxx,v
+retrieving revision 1.64
+retrieving revision 1.61.38.2
+diff -u -p -r1.64 -r1.61.38.2
+--- basic/source/runtime/methods.cxx 14 Dec 2005 14:35:50 -0000 1.64
++++ basic/source/runtime/methods.cxx 3 Mar 2006 10:45:40 -0000 1.61.38.2
+@@ -3548,18 +3548,39 @@ RTLFUNC(RGB)
+
+ RTLFUNC(QBColor)
+ {
++ static const INT32 pRGB[] =
++ {
++ 0x000000,
++ 0x800000,
++ 0x008000,
++ 0x808000,
++ 0x000080,
++ 0x800080,
++ 0x008080,
++ 0xC0C0C0,
++ 0x808080,
++ 0xFF0000,
++ 0x00FF00,
++ 0xFFFF00,
++ 0x0000FF,
++ 0xFF00FF,
++ 0x00FFFF,
++ 0xFFFFFF,
++ };
++
+ if ( rPar.Count() != 2 )
+ {
+ StarBASIC::Error( SbERR_BAD_ARGUMENT );
+ return;
+ }
+-
+- Color aCol( (ColorData)rPar.Get(1)->GetInteger() );
+-
+- ULONG nRed = aCol.GetRed() >> 8;
+- ULONG nGreen = aCol.GetGreen() >> 8;
+- ULONG nBlue = aCol.GetBlue() >> 8;
+- ULONG nRGB = (nRed << 16) | (nGreen << 8) | nBlue;
++
++ INT16 nCol = rPar.Get(1)->GetInteger();
++ if( nCol < 0 || nCol > 15 )
++ {
++ StarBASIC::Error( SbERR_BAD_ARGUMENT );
++ return;
++ }
++ INT32 nRGB = pRGB[ nCol ];
+ rPar.Get(0)->PutLong( nRGB );
+ }
+
+Index: basic/source/runtime/methods1.cxx
+===================================================================
+RCS file: /cvs/script/basic/source/runtime/methods1.cxx,v
+retrieving revision 1.24
+retrieving revision 1.22.40.3
+diff -u -p -r1.24 -r1.22.40.3
+--- basic/source/runtime/methods1.cxx 14 Dec 2005 14:36:04 -0000 1.24
++++ basic/source/runtime/methods1.cxx 3 Mar 2006 10:45:48 -0000 1.22.40.3
+@@ -604,7 +604,12 @@ RTLFUNC(Array)
+
+ // Parameter ins Array uebernehmen
+ for( short i = 0 ; i < nArraySize ; i++ )
+- pArray->Put( rPar.Get(i+1), &i );
++ {
++ SbxVariable* pVar = rPar.Get(i+1);
++ SbxVariable* pNew = new SbxVariable( *pVar );
++ pNew->SetFlag( SBX_WRITE );
++ pArray->Put( pNew, &i );
++ }
+
+ // Array zurueckliefern
+ SbxVariableRef refVar = rPar.Get(0);
+@@ -1473,6 +1478,7 @@ RTLFUNC(Split)
+ else
+ {
+ vRet.push_back( aExpression );
++ nArraySize = 1;
+ }
+ }
+
+Index: basic/source/runtime/step2.cxx
+===================================================================
+RCS file: /cvs/script/basic/source/runtime/step2.cxx,v
+retrieving revision 1.18
+retrieving revision 1.17.40.2
+diff -u -p -r1.18 -r1.17.40.2
+--- basic/source/runtime/step2.cxx 7 Sep 2005 21:42:41 -0000 1.18
++++ basic/source/runtime/step2.cxx 3 Mar 2006 10:47:14 -0000 1.17.40.2
+@@ -579,17 +579,19 @@ void SbiRuntime::StepPARAM( USHORT nOp1,
+
+ // #57915 Missing sauberer loesen
+ USHORT nParamCount = refParams->Count();
+- // Wurden ueberhaupt genug Parameter uebergeben
+ if( i >= nParamCount )
+ {
+- p = new SbxVariable();
+- p->PutErr( 448 ); // Wie in VB: Error-Code 448 (SbERR_NAMED_NOT_FOUND)
+- refParams->Put( p, i );
+- }
+- else
+- {
+- p = refParams->Get( i );
++ INT16 iLoop = i;
++ while( iLoop >= nParamCount )
++ {
++ p = new SbxVariable();
++ p->PutErr( 448 ); // Wie in VB: Error-Code 448 (SbERR_NAMED_NOT_FOUND)
++ refParams->Put( p, iLoop );
++ iLoop--;
++ }
+ }
++ p = refParams->Get( i );
++
+ if( p->GetType() == SbxERROR && ( i ) )
+ //if( p->GetType() == SbxEMPTY && ( i ) )
+ {
+Index: basctl/source/basicide/baside2b.cxx
+===================================================================
+RCS file: /cvs/script/basctl/source/basicide/baside2b.cxx,v
+retrieving revision 1.51
+retrieving revision 1.48.30.2
+diff -u -p -r1.51 -r1.48.30.2
+--- basctl/source/basicide/baside2b.cxx 31 Jan 2006 18:32:49 -0000 1.51
++++ basctl/source/basicide/baside2b.cxx 3 Mar 2006 10:58:52 -0000 1.48.30.2
+@@ -1861,7 +1861,6 @@ void WatchTreeListBox::RequestingChilds(
+ WatchItem* pChildItem = new WatchItem();
+ pChildItem->maName = aName;
+ pChildEntry->SetUserData( pChildItem );
+- MakeVisible( pChildEntry );
+ }
+ if( nPropCount > 0 )
+ {
+@@ -1914,7 +1913,6 @@ void WatchTreeListBox::RequestingChilds(
+ SvLBoxEntry* pChildEntry = SvTreeListBox::InsertEntry( aDisplayName, pEntry );
+ nElementCount++;
+ pChildEntry->SetUserData( pChildItem );
+- MakeVisible( pChildEntry );
+ }
+ if( nElementCount > 0 )
+ {
diff --git a/patches/src680/cws-atkbridge-20060306.diff b/patches/src680/cws-atkbridge-20060306.diff
deleted file mode 100644
index e96af9674..000000000
--- a/patches/src680/cws-atkbridge-20060306.diff
+++ /dev/null
@@ -1,8085 +0,0 @@
-cvs diff: Diffing fpicker
-cvs diff: Diffing fpicker/prj
-cvs diff: Diffing fpicker/source
-cvs diff: Diffing fpicker/source/generic
-cvs diff: Diffing fpicker/source/office
-cvs diff: Diffing fpicker/source/unx
-cvs diff: Diffing fpicker/source/unx/gnome
-Index: fpicker/source/unx/gnome/FPentry.cxx
-===================================================================
-RCS file: /cvs/gsl/fpicker/source/unx/gnome/FPentry.cxx,v
-retrieving revision 1.4
-retrieving revision 1.4.26.1
-diff -u -p -r1.4 -r1.4.26.1
---- fpicker/source/unx/gnome/FPentry.cxx 8 Sep 2005 23:34:31 -0000 1.4
-+++ fpicker/source/unx/gnome/FPentry.cxx 7 Dec 2005 14:37:07 -0000 1.4.26.1
-@@ -158,8 +158,7 @@ void* SAL_CALL component_getFactory(
- {
- if (
- /* crude gtkplug check */ !g_type_from_name( "GdkDisplay" ) ||
-- /* old version */ !( gtk_major_version >= 2 && gtk_minor_version >= 4 ) ||
-- /* #i42429# */ Application::GetSettings().GetMiscSettings().GetEnableATToolSupport()
-+ /* old version */ !( gtk_major_version >= 2 && gtk_minor_version >= 4 )
- )
- {
- return 0;
-cvs diff: Diffing fpicker/source/win32
-cvs diff: Diffing fpicker/source/win32/filepicker
-cvs diff: Diffing fpicker/source/win32/filepicker/workbench
-cvs diff: Diffing fpicker/source/win32/folderpicker
-cvs diff: Diffing fpicker/source/win32/folderpicker/workbench
-cvs diff: Diffing fpicker/source/win32/misc
-cvs diff: Diffing fpicker/util
-cvs diff: Diffing svtools
-cvs diff: Diffing svtools/bmpmaker
-cvs diff: Diffing svtools/inc
-cvs diff: Diffing svtools/inc/svtools
-cvs diff: Diffing svtools/prj
-cvs diff: Diffing svtools/qa
-cvs diff: Diffing svtools/qa/unoapi
-cvs diff: Diffing svtools/source
-cvs diff: Diffing svtools/source/Accessibility
-Index: svtools/source/Accessibility/accessibleiconchoicectrlentry.cxx
-===================================================================
-RCS file: /cvs/util/svtools/source/Accessibility/accessibleiconchoicectrlentry.cxx,v
-retrieving revision 1.16
-retrieving revision 1.15.106.2
-diff -u -p -r1.16 -r1.15.106.2
---- svtools/source/Accessibility/accessibleiconchoicectrlentry.cxx 31 Jan 2006 18:46:28 -0000 1.16
-+++ svtools/source/Accessibility/accessibleiconchoicectrlentry.cxx 6 Feb 2006 10:26:28 -0000 1.15.106.2
-@@ -441,6 +441,7 @@ throw(RuntimeException)
- pStateSetHelper->AddState( AccessibleStateType::TRANSIENT );
- pStateSetHelper->AddState( AccessibleStateType::SELECTABLE );
- pStateSetHelper->AddState( AccessibleStateType::ENABLED );
-+ pStateSetHelper->AddState( AccessibleStateType::SENSITIVE );
- if ( IsShowing_Impl() )
- {
- pStateSetHelper->AddState( AccessibleStateType::SHOWING );
-Index: svtools/source/Accessibility/accessiblelistboxentry.cxx
-===================================================================
-RCS file: /cvs/util/svtools/source/Accessibility/accessiblelistboxentry.cxx,v
-retrieving revision 1.25
-retrieving revision 1.25.106.1
-diff -u -p -r1.25 -r1.25.106.1
---- svtools/source/Accessibility/accessiblelistboxentry.cxx 8 Sep 2005 14:25:58 -0000 1.25
-+++ svtools/source/Accessibility/accessiblelistboxentry.cxx 6 Dec 2005 08:41:55 -0000 1.25.106.1
-@@ -503,6 +503,7 @@ namespace svt
- pStateSetHelper->AddState( AccessibleStateType::TRANSIENT );
- pStateSetHelper->AddState( AccessibleStateType::SELECTABLE );
- pStateSetHelper->AddState( AccessibleStateType::ENABLED );
-+ pStateSetHelper->AddState( AccessibleStateType::SENSITIVE );
- if ( getListBox()->IsInplaceEditingEnabled() )
- pStateSetHelper->AddState( AccessibleStateType::EDITABLE );
- if ( IsShowing_Impl() )
-Index: svtools/source/Accessibility/accessibletabbar.cxx
-===================================================================
-RCS file: /cvs/util/svtools/source/Accessibility/accessibletabbar.cxx,v
-retrieving revision 1.12
-retrieving revision 1.11.84.2
-diff -u -p -r1.12 -r1.11.84.2
---- svtools/source/Accessibility/accessibletabbar.cxx 31 Jan 2006 18:30:03 -0000 1.12
-+++ svtools/source/Accessibility/accessibletabbar.cxx 6 Feb 2006 10:26:01 -0000 1.11.84.2
-@@ -115,6 +115,8 @@ namespace svt
- {
- case VCLEVENT_WINDOW_ENABLED:
- {
-+ aNewValue <<= AccessibleStateType::SENSITIVE;
-+ NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
- aNewValue <<= AccessibleStateType::ENABLED;
- NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
- }
-@@ -123,6 +125,8 @@ namespace svt
- {
- aOldValue <<= AccessibleStateType::ENABLED;
- NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
-+ aOldValue <<= AccessibleStateType::SENSITIVE;
-+ NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
- }
- break;
- case VCLEVENT_WINDOW_GETFOCUS:
-@@ -164,7 +168,10 @@ namespace svt
- if ( m_pTabBar )
- {
- if ( m_pTabBar->IsEnabled() )
-- rStateSet.AddState( AccessibleStateType::ENABLED );
-+ {
-+ rStateSet.AddState( AccessibleStateType::ENABLED );
-+ rStateSet.AddState( AccessibleStateType::SENSITIVE );
-+ }
-
- rStateSet.AddState( AccessibleStateType::FOCUSABLE );
-
-Index: svtools/source/Accessibility/accessibletabbarpage.cxx
-===================================================================
-RCS file: /cvs/util/svtools/source/Accessibility/accessibletabbarpage.cxx,v
-retrieving revision 1.11
-retrieving revision 1.10.106.2
-diff -u -p -r1.11 -r1.10.106.2
---- svtools/source/Accessibility/accessibletabbarpage.cxx 31 Jan 2006 18:30:28 -0000 1.11
-+++ svtools/source/Accessibility/accessibletabbarpage.cxx 6 Feb 2006 10:26:47 -0000 1.10.106.2
-@@ -142,13 +142,21 @@ namespace svt
- {
- if ( m_bEnabled != bEnabled )
- {
-- Any aOldValue, aNewValue;
-+ Any aOldValue[2], aNewValue[2];
- if ( m_bEnabled )
-- aOldValue <<= AccessibleStateType::ENABLED;
-- else
-- aNewValue <<= AccessibleStateType::ENABLED;
-+ {
-+ aOldValue[0] <<= AccessibleStateType::SENSITIVE;
-+ aOldValue[1] <<= AccessibleStateType::ENABLED;
-+ }
-+ else
-+ {
-+
-+ aNewValue[0] <<= AccessibleStateType::ENABLED;
-+ aNewValue[1] <<= AccessibleStateType::SENSITIVE;
-+ }
- m_bEnabled = bEnabled;
-- NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
-+ NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue[0], aNewValue[0] );
-+ NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue[1], aNewValue[1] );
- }
- }
-
-@@ -203,7 +211,10 @@ namespace svt
- void AccessibleTabBarPage::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
- {
- if ( IsEnabled() )
-+ {
- rStateSet.AddState( AccessibleStateType::ENABLED );
-+ rStateSet.AddState( AccessibleStateType::SENSITIVE );
-+ }
-
- rStateSet.AddState( AccessibleStateType::VISIBLE );
-
-Index: svtools/source/Accessibility/accessibletabbarpagelist.cxx
-===================================================================
-RCS file: /cvs/util/svtools/source/Accessibility/accessibletabbarpagelist.cxx,v
-retrieving revision 1.17
-retrieving revision 1.16.72.2
-diff -u -p -r1.17 -r1.16.72.2
---- svtools/source/Accessibility/accessibletabbarpagelist.cxx 31 Jan 2006 18:30:44 -0000 1.17
-+++ svtools/source/Accessibility/accessibletabbarpagelist.cxx 6 Feb 2006 10:26:54 -0000 1.16.72.2
-@@ -251,19 +251,21 @@ namespace svt
-
- switch ( rVclWindowEvent.GetId() )
- {
-- case VCLEVENT_WINDOW_ENABLED:
-+ case VCLEVENT_WINDOW_ENABLED:
- {
-- Any aOldValue, aNewValue;
-- aNewValue <<= AccessibleStateType::ENABLED;
-- NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
-- }
-- break;
-- case VCLEVENT_WINDOW_DISABLED:
-- {
-- Any aOldValue, aNewValue;
-- aOldValue <<= AccessibleStateType::ENABLED;
-- NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
-- }
-+ aNewValue <<= AccessibleStateType::SENSITIVE;
-+ NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
-+ aNewValue <<= AccessibleStateType::ENABLED;
-+ NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
-+ }
-+ break;
-+ case VCLEVENT_WINDOW_DISABLED:
-+ {
-+ aOldValue <<= AccessibleStateType::ENABLED;
-+ NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
-+ aOldValue <<= AccessibleStateType::SENSITIVE;
-+ NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
-+ }
- break;
- case VCLEVENT_WINDOW_SHOW:
- {
-@@ -395,7 +397,10 @@ namespace svt
- if ( m_pTabBar )
- {
- if ( m_pTabBar->IsEnabled() )
-- rStateSet.AddState( AccessibleStateType::ENABLED );
-+ {
-+ rStateSet.AddState( AccessibleStateType::ENABLED );
-+ rStateSet.AddState( AccessibleStateType::SENSITIVE );
-+ }
-
- rStateSet.AddState( AccessibleStateType::VISIBLE );
-
-cvs diff: Diffing svtools/source/brwbox
-Index: svtools/source/brwbox/brwbox3.cxx
-===================================================================
-RCS file: /cvs/util/svtools/source/brwbox/brwbox3.cxx,v
-retrieving revision 1.16
-retrieving revision 1.16.106.1
-diff -u -p -r1.16 -r1.16.106.1
---- svtools/source/brwbox/brwbox3.cxx 8 Sep 2005 14:29:19 -0000 1.16
-+++ svtools/source/brwbox/brwbox3.cxx 6 Dec 2005 11:50:53 -0000 1.16.106.1
-@@ -357,7 +357,10 @@ void BrowseBox::FillAccessibleStateSet(
- if ( GetUpdateMode() )
- rStateSet.AddState( AccessibleStateType::EDITABLE );
- if ( IsEnabled() )
-+ {
- rStateSet.AddState( AccessibleStateType::ENABLED );
-+ rStateSet.AddState( AccessibleStateType::SENSITIVE );
-+ }
- if ( IsReallyVisible() )
- rStateSet.AddState( AccessibleStateType::VISIBLE );
- if ( eObjType == ::svt::BBTYPE_TABLE )
-cvs diff: Diffing svtools/source/cmdparse
-cvs diff: Diffing svtools/source/config
-cvs diff: Diffing svtools/source/config/test
-cvs diff: Diffing svtools/source/contnr
-Index: svtools/source/contnr/svtabbx.cxx
-===================================================================
-RCS file: /cvs/util/svtools/source/contnr/svtabbx.cxx,v
-retrieving revision 1.18
-retrieving revision 1.16.106.3
-diff -u -p -r1.18 -r1.16.106.3
---- svtools/source/contnr/svtabbx.cxx 6 Feb 2006 13:37:19 -0000 1.18
-+++ svtools/source/contnr/svtabbx.cxx 16 Feb 2006 13:38:08 -0000 1.16.106.3
-@@ -1206,7 +1206,10 @@ void SvHeaderTabListBox::FillAccessibleS
- if ( IsActive() )
- _rStateSet.AddState( AccessibleStateType::ACTIVE );
- if ( IsEnabled() )
-+ {
- _rStateSet.AddState( AccessibleStateType::ENABLED );
-+ _rStateSet.AddState( AccessibleStateType::SENSITIVE );
-+ }
- if ( IsReallyVisible() )
- _rStateSet.AddState( AccessibleStateType::VISIBLE );
- if ( _eType == ::svt::BBTYPE_TABLE )
-cvs diff: Diffing svtools/source/control
-Index: svtools/source/control/valueacc.cxx
-===================================================================
-RCS file: /cvs/util/svtools/source/control/valueacc.cxx,v
-retrieving revision 1.17
-retrieving revision 1.17.108.1
-diff -u -p -r1.17 -r1.17.108.1
---- svtools/source/control/valueacc.cxx 8 Sep 2005 15:08:48 -0000 1.17
-+++ svtools/source/control/valueacc.cxx 6 Dec 2005 11:50:54 -0000 1.17.108.1
-@@ -319,6 +319,7 @@ uno::Reference< accessibility::XAccessib
-
- // Set some states.
- pStateSet->AddState (accessibility::AccessibleStateType::ENABLED);
-+ pStateSet->AddState (accessibility::AccessibleStateType::SENSITIVE);
- pStateSet->AddState (accessibility::AccessibleStateType::SHOWING);
- pStateSet->AddState (accessibility::AccessibleStateType::VISIBLE);
- pStateSet->AddState (accessibility::AccessibleStateType::MANAGES_DESCENDANTS);
-@@ -991,6 +992,7 @@ uno::Reference< accessibility::XAccessib
- if( mpParent )
- {
- pStateSet->AddState (accessibility::AccessibleStateType::ENABLED);
-+ pStateSet->AddState (accessibility::AccessibleStateType::SENSITIVE);
- pStateSet->AddState (accessibility::AccessibleStateType::SHOWING);
- pStateSet->AddState (accessibility::AccessibleStateType::VISIBLE);
- pStateSet->AddState (accessibility::AccessibleStateType::TRANSIENT);
-cvs diff: Diffing svtools/source/dialogs
-cvs diff: Diffing svtools/source/edit
-Index: svtools/source/edit/textwindowaccessibility.cxx
-===================================================================
-RCS file: /cvs/util/svtools/source/edit/textwindowaccessibility.cxx,v
-retrieving revision 1.26
-retrieving revision 1.24.104.3
-diff -u -p -r1.26 -r1.24.104.3
---- svtools/source/edit/textwindowaccessibility.cxx 1 Feb 2006 14:40:09 -0000 1.26
-+++ svtools/source/edit/textwindowaccessibility.cxx 6 Feb 2006 10:27:37 -0000 1.24.104.3
-@@ -1421,6 +1421,8 @@ Document::retrieveParagraphNumber(Paragr
- = (static_cast< ::sal_Int64 >(1)
- << ::css::accessibility::AccessibleStateType::ENABLED)
- | (static_cast< ::sal_Int64 >(1)
-+ << ::css::accessibility::AccessibleStateType::SENSITIVE)
-+ | (static_cast< ::sal_Int64 >(1)
- << ::css::accessibility::AccessibleStateType::FOCUSABLE)
- | (static_cast< ::sal_Int64 >(1)
- << ::css::accessibility::AccessibleStateType::MULTI_LINE);
-cvs diff: Diffing svtools/source/filepicker
-cvs diff: Diffing svtools/source/filerec
-cvs diff: Diffing svtools/source/filter.vcl
-cvs diff: Diffing svtools/source/filter.vcl/filter
-cvs diff: Diffing svtools/source/filter.vcl/igif
-cvs diff: Diffing svtools/source/filter.vcl/ixbm
-cvs diff: Diffing svtools/source/filter.vcl/ixpm
-cvs diff: Diffing svtools/source/filter.vcl/jpeg
-cvs diff: Diffing svtools/source/filter.vcl/wmf
-cvs diff: Diffing svtools/source/fsstor
-cvs diff: Diffing svtools/source/hatchwindow
-cvs diff: Diffing svtools/source/inc
-cvs diff: Diffing svtools/source/items
-cvs diff: Diffing svtools/source/items1
-cvs diff: Diffing svtools/source/java
-cvs diff: Diffing svtools/source/memtools
-cvs diff: Diffing svtools/source/misc
-cvs diff: Diffing svtools/source/misc1
-cvs diff: Diffing svtools/source/notify
-cvs diff: Diffing svtools/source/numbers
-cvs diff: Diffing svtools/source/passwordcontainer
-cvs diff: Diffing svtools/source/plugapp
-cvs diff: Diffing svtools/source/productregistration
-cvs diff: Diffing svtools/source/svdde
-cvs diff: Diffing svtools/source/svhtml
-cvs diff: Diffing svtools/source/svrtf
-cvs diff: Diffing svtools/source/svsql
-cvs diff: Diffing svtools/source/syslocale
-cvs diff: Diffing svtools/source/undo
-cvs diff: Diffing svtools/source/uno
-cvs diff: Diffing svtools/source/urlobj
-cvs diff: Diffing svtools/uno
-cvs diff: Diffing svtools/unx
-cvs diff: Diffing svtools/unx/inc
-cvs diff: Diffing svtools/unx/source
-cvs diff: Diffing svtools/unx/source/svdde
-cvs diff: Diffing svtools/util
-cvs diff: Diffing svtools/util/defs
-Index: toolkit/source/awt/accessiblemenubasecomponent.cxx
-===================================================================
-RCS file: /cvs/gsl/toolkit/source/awt/accessiblemenubasecomponent.cxx,v
-retrieving revision 1.21
-retrieving revision 1.21.30.1
-diff -u -p -r1.21 -r1.21.30.1
---- toolkit/source/awt/accessiblemenubasecomponent.cxx 9 Sep 2005 13:01:15 -0000 1.21
-+++ toolkit/source/awt/accessiblemenubasecomponent.cxx 5 Dec 2005 14:27:11 -0000 1.21.30.1
-@@ -196,13 +196,20 @@ void OAccessibleMenuBaseComponent::SetEn
- {
- if ( m_bEnabled != bEnabled )
- {
-- Any aOldValue, aNewValue;
-+ Any aOldValue[2], aNewValue[2];
- if ( m_bEnabled )
-- aOldValue <<= AccessibleStateType::ENABLED;
-+ {
-+ aOldValue[0] <<= AccessibleStateType::SENSITIVE;
-+ aOldValue[1] <<= AccessibleStateType::ENABLED;
-+ }
- else
-- aNewValue <<= AccessibleStateType::ENABLED;
-+ {
-+ aNewValue[0] <<= AccessibleStateType::ENABLED;
-+ aNewValue[1] <<= AccessibleStateType::SENSITIVE;
-+ }
- m_bEnabled = bEnabled;
-- NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
-+ NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue[0], aNewValue[0] );
-+ NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue[1], aNewValue[1] );
- }
- }
-
-Index: toolkit/source/awt/accessiblemenucomponent.cxx
-===================================================================
-RCS file: /cvs/gsl/toolkit/source/awt/accessiblemenucomponent.cxx,v
-retrieving revision 1.13
-retrieving revision 1.13.32.1
-diff -u -p -r1.13 -r1.13.32.1
---- toolkit/source/awt/accessiblemenucomponent.cxx 9 Sep 2005 13:01:32 -0000 1.13
-+++ toolkit/source/awt/accessiblemenucomponent.cxx 5 Dec 2005 14:27:12 -0000 1.13.32.1
-@@ -128,7 +128,10 @@ sal_Bool OAccessibleMenuComponent::IsSho
- void OAccessibleMenuComponent::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
- {
- if ( IsEnabled() )
-+ {
- rStateSet.AddState( AccessibleStateType::ENABLED );
-+ rStateSet.AddState( AccessibleStateType::SENSITIVE );
-+ }
-
- rStateSet.AddState( AccessibleStateType::FOCUSABLE );
-
-Index: toolkit/source/awt/accessiblemenuitemcomponent.cxx
-===================================================================
-RCS file: /cvs/gsl/toolkit/source/awt/accessiblemenuitemcomponent.cxx,v
-retrieving revision 1.14
-retrieving revision 1.14.32.1
-diff -u -p -r1.14 -r1.14.32.1
---- toolkit/source/awt/accessiblemenuitemcomponent.cxx 9 Sep 2005 13:01:57 -0000 1.14
-+++ toolkit/source/awt/accessiblemenuitemcomponent.cxx 5 Dec 2005 14:27:12 -0000 1.14.32.1
-@@ -274,7 +274,10 @@ void OAccessibleMenuItemComponent::SetIt
- void OAccessibleMenuItemComponent::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
- {
- if ( IsEnabled() )
-+ {
- rStateSet.AddState( AccessibleStateType::ENABLED );
-+ rStateSet.AddState( AccessibleStateType::SENSITIVE );
-+ }
-
- rStateSet.AddState( AccessibleStateType::VISIBLE );
-
-Index: toolkit/source/awt/vclxaccessiblecomponent.cxx
-===================================================================
-RCS file: /cvs/gsl/toolkit/source/awt/vclxaccessiblecomponent.cxx,v
-retrieving revision 1.53
-retrieving revision 1.52.32.2
-diff -u -p -r1.53 -r1.52.32.2
---- toolkit/source/awt/vclxaccessiblecomponent.cxx 31 Jan 2006 18:21:29 -0000 1.53
-+++ toolkit/source/awt/vclxaccessiblecomponent.cxx 6 Feb 2006 10:28:37 -0000 1.52.32.2
-@@ -391,12 +391,17 @@ void VCLXAccessibleComponent::ProcessWin
- {
- aNewValue <<= accessibility::AccessibleStateType::ENABLED;
- NotifyAccessibleEvent( accessibility::AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
-+ aNewValue <<= accessibility::AccessibleStateType::SENSITIVE;
-+ NotifyAccessibleEvent( accessibility::AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
- }
- break;
- case VCLEVENT_WINDOW_DISABLED:
- {
-- aOldValue <<= accessibility::AccessibleStateType::ENABLED;
-+ aOldValue <<= accessibility::AccessibleStateType::SENSITIVE;
- NotifyAccessibleEvent( accessibility::AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
-+
-+ aOldValue <<= accessibility::AccessibleStateType::ENABLED;
-+ NotifyAccessibleEvent( accessibility::AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
- }
- break;
- case VCLEVENT_WINDOW_MOVE:
-@@ -510,7 +515,10 @@ void VCLXAccessibleComponent::FillAccess
- }
-
- if ( pWindow->IsEnabled() )
-+ {
- rStateSet.AddState( accessibility::AccessibleStateType::ENABLED );
-+ rStateSet.AddState( accessibility::AccessibleStateType::SENSITIVE );
-+ }
-
- if ( pWindow->HasChildPathFocus() &&
- ( getAccessibleRole() == accessibility::AccessibleRole::FRAME ||
-Index: toolkit/source/awt/vclxaccessiblelistitem.cxx
-===================================================================
-RCS file: /cvs/gsl/toolkit/source/awt/vclxaccessiblelistitem.cxx,v
-retrieving revision 1.27
-retrieving revision 1.27.32.1
-diff -u -p -r1.27 -r1.27.32.1
---- toolkit/source/awt/vclxaccessiblelistitem.cxx 9 Sep 2005 13:06:59 -0000 1.27
-+++ toolkit/source/awt/vclxaccessiblelistitem.cxx 5 Dec 2005 14:27:13 -0000 1.27.32.1
-@@ -373,6 +373,7 @@ Reference< XAccessibleStateSet > SAL_CAL
- pStateSetHelper->AddState( AccessibleStateType::TRANSIENT );
- pStateSetHelper->AddState( AccessibleStateType::SELECTABLE );
- pStateSetHelper->AddState( AccessibleStateType::ENABLED );
-+ pStateSetHelper->AddState( AccessibleStateType::SENSITIVE );
- if ( m_bSelected )
- pStateSetHelper->AddState( AccessibleStateType::SELECTED );
- if ( m_bVisible )
-Index: toolkit/source/awt/vclxaccessiblemenuitem.cxx
-===================================================================
-RCS file: /cvs/gsl/toolkit/source/awt/vclxaccessiblemenuitem.cxx,v
-retrieving revision 1.35
-retrieving revision 1.35.32.1
-diff -u -p -r1.35 -r1.35.32.1
---- toolkit/source/awt/vclxaccessiblemenuitem.cxx 9 Sep 2005 13:07:49 -0000 1.35
-+++ toolkit/source/awt/vclxaccessiblemenuitem.cxx 16 Nov 2005 15:59:22 -0000 1.35.32.1
-@@ -114,12 +114,8 @@ sal_Bool VCLXAccessibleMenuItem::IsHighl
- {
- sal_Bool bHighlighted = sal_False;
-
-- if ( m_pParent )
-- {
-- sal_uInt16 nItemId = m_pParent->GetItemId( m_nItemPos );
-- if ( nItemId == m_pParent->GetCurItemId() )
-- bHighlighted = sal_True;
-- }
-+ if ( m_pParent && m_pParent->IsHighlighted( m_nItemPos ) )
-+ bHighlighted = sal_True;
-
- return bHighlighted;
- }
-Index: toolkit/source/awt/vclxaccessiblestatusbaritem.cxx
-===================================================================
-RCS file: /cvs/gsl/toolkit/source/awt/vclxaccessiblestatusbaritem.cxx,v
-retrieving revision 1.6
-retrieving revision 1.6.32.1
-diff -u -p -r1.6 -r1.6.32.1
---- toolkit/source/awt/vclxaccessiblestatusbaritem.cxx 9 Sep 2005 13:09:29 -0000 1.6
-+++ toolkit/source/awt/vclxaccessiblestatusbaritem.cxx 5 Dec 2005 14:27:13 -0000 1.6.32.1
-@@ -203,6 +203,7 @@ void VCLXAccessibleStatusBarItem::SetIte
- void VCLXAccessibleStatusBarItem::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
- {
- rStateSet.AddState( AccessibleStateType::ENABLED );
-+ rStateSet.AddState( AccessibleStateType::SENSITIVE );
-
- rStateSet.AddState( AccessibleStateType::VISIBLE );
-
-Index: toolkit/source/awt/vclxaccessibletabpage.cxx
-===================================================================
-RCS file: /cvs/gsl/toolkit/source/awt/vclxaccessibletabpage.cxx,v
-retrieving revision 1.17
-retrieving revision 1.17.32.1
-diff -u -p -r1.17 -r1.17.32.1
---- toolkit/source/awt/vclxaccessibletabpage.cxx 9 Sep 2005 13:09:58 -0000 1.17
-+++ toolkit/source/awt/vclxaccessibletabpage.cxx 5 Dec 2005 14:27:14 -0000 1.17.32.1
-@@ -228,6 +228,7 @@ void VCLXAccessibleTabPage::Update( bool
- void VCLXAccessibleTabPage::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
- {
- rStateSet.AddState( AccessibleStateType::ENABLED );
-+ rStateSet.AddState( AccessibleStateType::SENSITIVE );
-
- rStateSet.AddState( AccessibleStateType::FOCUSABLE );
-
-Index: toolkit/source/awt/vclxaccessibletoolboxitem.cxx
-===================================================================
-RCS file: /cvs/gsl/toolkit/source/awt/vclxaccessibletoolboxitem.cxx,v
-retrieving revision 1.39
-retrieving revision 1.38.32.2
-diff -u -p -r1.39 -r1.38.32.2
---- toolkit/source/awt/vclxaccessibletoolboxitem.cxx 26 Jan 2006 17:54:59 -0000 1.39
-+++ toolkit/source/awt/vclxaccessibletoolboxitem.cxx 30 Jan 2006 15:06:05 -0000 1.38.32.2
-@@ -274,13 +274,21 @@ void VCLXAccessibleToolBoxItem::ToggleEn
- {
- if ( m_pToolBox )
- {
-- Any aOldValue, aNewValue;
-+ Any aOldValue[2], aNewValue[2];
- const XubString& sText = m_pToolBox->GetItemText( m_nItemId );
- if ( m_pToolBox->IsItemEnabled( m_nItemId ) )
-- aNewValue <<= AccessibleStateType::ENABLED;
-+ {
-+ aNewValue[0] <<= AccessibleStateType::SENSITIVE;
-+ aNewValue[1] <<= AccessibleStateType::ENABLED;
-+ }
- else
-- aOldValue <<= AccessibleStateType::ENABLED;
-- NotifyAccessibleEvent( AccessibleEventId::NAME_CHANGED, aOldValue, aNewValue );
-+ {
-+ aOldValue[0] <<= AccessibleStateType::ENABLED;
-+ aOldValue[1] <<= AccessibleStateType::SENSITIVE;
-+ }
-+
-+ NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue[0], aNewValue[0] );
-+ NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue[1], aNewValue[1] );
- }
- }
- // -----------------------------------------------------------------------------
-@@ -458,7 +466,10 @@ Reference< XAccessibleStateSet > SAL_CAL
- if ( m_bIndeterminate )
- pStateSetHelper->AddState( AccessibleStateType::INDETERMINATE );
- if ( m_pToolBox->IsItemEnabled( m_nItemId ) )
-+ {
- pStateSetHelper->AddState( AccessibleStateType::ENABLED );
-+ pStateSetHelper->AddState( AccessibleStateType::SENSITIVE );
-+ }
- if ( m_pToolBox->IsItemVisible( m_nItemId ) )
- {
- pStateSetHelper->AddState( AccessibleStateType::VISIBLE );
-Index: toolkit/source/awt/vclxwindow.cxx
-===================================================================
-RCS file: /cvs/gsl/toolkit/source/awt/vclxwindow.cxx,v
-retrieving revision 1.57
-retrieving revision 1.57.10.1
-diff -u -p -r1.57 -r1.57.10.1
---- toolkit/source/awt/vclxwindow.cxx 6 Feb 2006 13:00:26 -0000 1.57
-+++ toolkit/source/awt/vclxwindow.cxx 17 Feb 2006 11:13:21 -0000 1.57.10.1
-@@ -88,6 +88,9 @@
- #ifndef _TOOLKIT_AWT_VCLXACCESSIBLETABPAGEWINDOW_HXX_
- #include <toolkit/awt/vclxaccessibletabpagewindow.hxx>
- #endif
-+#ifndef _TOOLKIT_AWT_VCLXACCESSIBLEFIXEDTEXT_HXX_
-+#include <toolkit/awt/vclxaccessiblefixedtext.hxx>
-+#endif
- #ifndef _TOOLKIT_HELPER_MACROS_HXX_
- #include <toolkit/helper/macros.hxx>
- #endif
-@@ -133,12 +136,15 @@
- #include <toolkit/helper/solarrelease.hxx>
- #endif
-
-+using namespace ::com::sun::star;
-+
- using ::com::sun::star::style::VerticalAlignment;
- using ::com::sun::star::style::VerticalAlignment_TOP;
- using ::com::sun::star::style::VerticalAlignment_MIDDLE;
- using ::com::sun::star::style::VerticalAlignment_BOTTOM;
- using ::com::sun::star::style::VerticalAlignment_MAKE_FIXED_SIZE;
-
-+
- //#define SYNCHRON_NOTIFICATION
- // define this for notifying mouse events synchronously when they happen
- // disadvantage: potential of deadlocks, since this means that the
-@@ -876,47 +882,51 @@ void VCLXWindow::ProcessWindowEvent( con
- }
- }
-
--::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXWindow::CreateAccessibleContext()
-+uno::Reference< accessibility::XAccessibleContext > VCLXWindow::CreateAccessibleContext()
- {
-- ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > xContext;
-+ uno::Reference< accessibility::XAccessibleContext > xContext;
-
-- Window* pWindow = GetWindow();
-- if ( pWindow )
-- {
-- WindowType nType = pWindow->GetType();
-+ Window* pWindow = GetWindow();
-+ if ( pWindow )
-+ {
-+ WindowType nType = pWindow->GetType();
-
-- if ( nType == WINDOW_MENUBARWINDOW || pWindow->IsMenuFloatingWindow() || pWindow->IsToolbarFloatingWindow() )
-- {
-- ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > xAcc( pWindow->GetAccessible() );
-- if ( xAcc.is() )
-- {
-- ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > xCont( xAcc->getAccessibleContext() );
-- if ( pWindow->GetType() == WINDOW_MENUBARWINDOW
-- || ( xCont.is() && xCont->getAccessibleRole() == ::com::sun::star::accessibility::AccessibleRole::POPUP_MENU ) )
-- {
-- xContext = xCont;
-- }
-- }
-- }
-- else if ( nType == WINDOW_STATUSBAR )
-- {
-- xContext = (::com::sun::star::accessibility::XAccessibleContext*) new VCLXAccessibleStatusBar( this );
-- }
-- else if ( nType == WINDOW_TABCONTROL )
-- {
-- xContext = (::com::sun::star::accessibility::XAccessibleContext*) new VCLXAccessibleTabControl( this );
-- }
-+ if ( nType == WINDOW_MENUBARWINDOW || pWindow->IsMenuFloatingWindow() || pWindow->IsToolbarFloatingWindow() )
-+ {
-+ uno::Reference< accessibility::XAccessible > xAcc( pWindow->GetAccessible() );
-+ if ( xAcc.is() )
-+ {
-+ uno::Reference< accessibility::XAccessibleContext > xCont( xAcc->getAccessibleContext() );
-+ if ( pWindow->GetType() == WINDOW_MENUBARWINDOW ||
-+ ( xCont.is() && xCont->getAccessibleRole() == accessibility::AccessibleRole::POPUP_MENU ) )
-+ {
-+ xContext = xCont;
-+ }
-+ }
-+ }
-+ else if ( nType == WINDOW_STATUSBAR )
-+ {
-+ xContext = (accessibility::XAccessibleContext*) new VCLXAccessibleStatusBar( this );
-+ }
-+ else if ( nType == WINDOW_TABCONTROL )
-+ {
-+ xContext = (accessibility::XAccessibleContext*) new VCLXAccessibleTabControl( this );
-+ }
- else if ( nType == WINDOW_TABPAGE && pWindow->GetAccessibleParentWindow() && pWindow->GetAccessibleParentWindow()->GetType() == WINDOW_TABCONTROL )
- {
-- xContext = (::com::sun::star::accessibility::XAccessibleContext*) new VCLXAccessibleTabPageWindow( this );
-+ xContext = (accessibility::XAccessibleContext*) new VCLXAccessibleTabPageWindow( this );
- }
-- else
-- {
-- xContext = (::com::sun::star::accessibility::XAccessibleContext*) new VCLXAccessibleComponent( this );
-- }
-- }
-+ else if ( nType == WINDOW_HELPTEXTWINDOW )
-+ {
-+ xContext = (accessibility::XAccessibleContext*) new VCLXAccessibleFixedText( this );
-+ }
-+ else
-+ {
-+ xContext = (accessibility::XAccessibleContext*) new VCLXAccessibleComponent( this );
-+ }
-+ }
-
-- return xContext;
-+ return xContext;
- }
-
- /*
-cvs diff: Diffing toolkit/source/controls
-cvs diff: Diffing toolkit/source/helper
-cvs diff: Diffing toolkit/test
-cvs diff: Diffing toolkit/test/accessibility
-cvs diff: Diffing toolkit/test/accessibility/ov
-cvs diff: Diffing toolkit/test/accessibility/tools
-cvs diff: Diffing toolkit/util
-cvs diff: Diffing toolkit/util/defs
-Index: svx/source/accessibility/AccessibleContextBase.cxx
-===================================================================
-RCS file: /cvs/graphics/svx/source/accessibility/AccessibleContextBase.cxx,v
-retrieving revision 1.21
-retrieving revision 1.21.172.1
-diff -u -p -r1.21 -r1.21.172.1
---- svx/source/accessibility/AccessibleContextBase.cxx 8 Sep 2005 20:13:15 -0000 1.21
-+++ svx/source/accessibility/AccessibleContextBase.cxx 6 Dec 2005 11:51:38 -0000 1.21.172.1
-@@ -108,6 +108,7 @@ AccessibleContextBase::AccessibleContext
- if (pStateSet != NULL)
- {
- pStateSet->AddState (AccessibleStateType::ENABLED);
-+ pStateSet->AddState (AccessibleStateType::SENSITIVE);
- pStateSet->AddState (AccessibleStateType::SHOWING);
- pStateSet->AddState (AccessibleStateType::VISIBLE);
- pStateSet->AddState (AccessibleStateType::FOCUSABLE);
-Index: svx/source/accessibility/AccessibleControlShape.cxx
-===================================================================
-RCS file: /cvs/graphics/svx/source/accessibility/AccessibleControlShape.cxx,v
-retrieving revision 1.21
-retrieving revision 1.21.168.1
-diff -u -p -r1.21 -r1.21.168.1
---- svx/source/accessibility/AccessibleControlShape.cxx 8 Sep 2005 20:13:41 -0000 1.21
-+++ svx/source/accessibility/AccessibleControlShape.cxx 6 Dec 2005 11:51:38 -0000 1.21.168.1
-@@ -885,6 +885,7 @@ void AccessibleControlShape::initializeC
- // we need to reset some states of the composed set, because they either do not apply
- // for controls in alive mode, or are in the responsibility of the UNO-control, anyway
- pComposedStates->RemoveState( AccessibleStateType::ENABLED ); // this is controlled by the UNO-control
-+ pComposedStates->RemoveState( AccessibleStateType::SENSITIVE ); // this is controlled by the UNO-control
- pComposedStates->RemoveState( AccessibleStateType::FOCUSABLE ); // this is controlled by the UNO-control
- pComposedStates->RemoveState( AccessibleStateType::SELECTABLE ); // this does not hold for an alive UNO-control
- #if OSL_DEBUG_LEVEL > 0
-Index: svx/source/accessibility/AccessibleEditableTextPara.cxx
-===================================================================
-RCS file: /cvs/graphics/svx/source/accessibility/AccessibleEditableTextPara.cxx,v
-retrieving revision 1.45
-retrieving revision 1.43.172.3
-diff -u -p -r1.45 -r1.43.172.3
---- svx/source/accessibility/AccessibleEditableTextPara.cxx 1 Feb 2006 14:59:29 -0000 1.45
-+++ svx/source/accessibility/AccessibleEditableTextPara.cxx 6 Feb 2006 10:33:18 -0000 1.43.172.3
-@@ -197,6 +197,7 @@ namespace accessibility
- pStateSet->AddState( AccessibleStateType::VISIBLE );
- pStateSet->AddState( AccessibleStateType::SHOWING );
- pStateSet->AddState( AccessibleStateType::ENABLED );
-+ pStateSet->AddState( AccessibleStateType::SENSITIVE );
- }
- catch( const uno::Exception& ) {}
- }
-Index: svx/source/accessibility/AccessibleFrameSelector.cxx
-===================================================================
-RCS file: /cvs/graphics/svx/source/accessibility/AccessibleFrameSelector.cxx,v
-retrieving revision 1.3
-retrieving revision 1.3.172.1
-diff -u -p -r1.3 -r1.3.172.1
---- svx/source/accessibility/AccessibleFrameSelector.cxx 8 Sep 2005 20:15:10 -0000 1.3
-+++ svx/source/accessibility/AccessibleFrameSelector.cxx 6 Dec 2005 11:51:38 -0000 1.3.172.1
-@@ -292,7 +292,10 @@ Reference< XAccessibleStateSet > AccFram
- pStateSetHelper->AddState(aStandardStates[nState++]);
- }
- if(mpFrameSel->IsEnabled())
-+ {
- pStateSetHelper->AddState(AccessibleStateType::ENABLED);
-+ pStateSetHelper->AddState(AccessibleStateType::SENSITIVE);
-+ }
-
- sal_Bool bIsParent = meBorder == FRAMEBORDER_NONE;
- if(mpFrameSel->HasFocus() &&
-Index: svx/source/accessibility/AccessibleImageBullet.cxx
-===================================================================
-RCS file: /cvs/graphics/svx/source/accessibility/AccessibleImageBullet.cxx,v
-retrieving revision 1.17
-retrieving revision 1.17.172.1
-diff -u -p -r1.17 -r1.17.172.1
---- svx/source/accessibility/AccessibleImageBullet.cxx 8 Sep 2005 20:15:49 -0000 1.17
-+++ svx/source/accessibility/AccessibleImageBullet.cxx 6 Dec 2005 11:51:39 -0000 1.17.172.1
-@@ -145,6 +145,7 @@ namespace accessibility
- pStateSet->AddState( AccessibleStateType::VISIBLE );
- pStateSet->AddState( AccessibleStateType::SHOWING );
- pStateSet->AddState( AccessibleStateType::ENABLED );
-+ pStateSet->AddState( AccessibleStateType::SENSITIVE );
- }
- catch( const uno::Exception& ) {}
- }
-Index: svx/source/accessibility/GraphCtlAccessibleContext.cxx
-===================================================================
-RCS file: /cvs/graphics/svx/source/accessibility/GraphCtlAccessibleContext.cxx,v
-retrieving revision 1.18
-retrieving revision 1.18.168.1
-diff -u -p -r1.18 -r1.18.168.1
---- svx/source/accessibility/GraphCtlAccessibleContext.cxx 8 Sep 2005 20:21:42 -0000 1.18
-+++ svx/source/accessibility/GraphCtlAccessibleContext.cxx 6 Dec 2005 11:51:39 -0000 1.18.168.1
-@@ -482,6 +482,7 @@ Reference< XAccessibleStateSet > SAL_CAL
- else
- {
- // pStateSetHelper->AddState( AccessibleStateType::ENABLED );
-+ // pStateSetHelper->AddState( AccessibleStateType::SENSITIVE );
- pStateSetHelper->AddState( AccessibleStateType::FOCUSABLE );
- if( mpControl->HasFocus() )
- pStateSetHelper->AddState( AccessibleStateType::FOCUSED );
-Index: svx/source/accessibility/charmapacc.cxx
-===================================================================
-RCS file: /cvs/graphics/svx/source/accessibility/charmapacc.cxx,v
-retrieving revision 1.9
-retrieving revision 1.9.172.1
-diff -u -p -r1.9 -r1.9.172.1
---- svx/source/accessibility/charmapacc.cxx 8 Sep 2005 20:23:00 -0000 1.9
-+++ svx/source/accessibility/charmapacc.cxx 6 Dec 2005 11:51:39 -0000 1.9.172.1
-@@ -251,7 +251,10 @@ Reference< XAccessibleStateSet > SAL_CAL
- if ( mpParent->IsActive() )
- pStateSet->AddState( AccessibleStateType::ACTIVE );
- if ( mpParent->IsEnabled() )
-+ {
- pStateSet->AddState( AccessibleStateType::ENABLED );
-+ pStateSet->AddState( AccessibleStateType::SENSITIVE );
-+ }
- if ( mpParent->IsReallyVisible() )
- pStateSet->AddState( AccessibleStateType::VISIBLE );
- }
-@@ -483,7 +486,10 @@ uno::Reference< accessibility::XAccessib
- if ( m_pParent->getCharSetControl()->IsActive() )
- pStateSet->AddState( AccessibleStateType::ACTIVE );
- if ( m_pParent->getCharSetControl()->IsEnabled() )
-- pStateSet->AddState( AccessibleStateType::ENABLED );
-+ {
-+ pStateSet->AddState( AccessibleStateType::ENABLED );
-+ pStateSet->AddState( AccessibleStateType::SENSITIVE );
-+ }
- if ( m_pParent->getCharSetControl()->IsReallyVisible() )
- pStateSet->AddState( AccessibleStateType::VISIBLE );
-
-Index: svx/source/accessibility/svxrectctaccessiblecontext.cxx
-===================================================================
-RCS file: /cvs/graphics/svx/source/accessibility/svxrectctaccessiblecontext.cxx,v
-retrieving revision 1.18
-retrieving revision 1.18.172.1
-diff -u -p -r1.18 -r1.18.172.1
---- svx/source/accessibility/svxrectctaccessiblecontext.cxx 8 Sep 2005 20:23:56 -0000 1.18
-+++ svx/source/accessibility/svxrectctaccessiblecontext.cxx 6 Dec 2005 11:51:39 -0000 1.18.172.1
-@@ -434,6 +434,7 @@ Reference< XAccessibleStateSet > SAL_CAL
- if( IsAlive() )
- {
- // pStateSetHelper->AddState( AccessibleStateType::ENABLED );
-+ // pStateSetHelper->AddState( AccessibleStateType::SENSITIVE );
- pStateSetHelper->AddState( AccessibleStateType::FOCUSABLE );
- if( mpRepr->HasFocus() )
- pStateSetHelper->AddState( AccessibleStateType::FOCUSED );
-@@ -1039,6 +1040,7 @@ Reference< XAccessibleStateSet > SAL_CAL
- }
-
- pStateSetHelper->AddState( AccessibleStateType::ENABLED );
-+ pStateSetHelper->AddState( AccessibleStateType::SENSITIVE );
- pStateSetHelper->AddState( AccessibleStateType::OPAQUE );
- pStateSetHelper->AddState( AccessibleStateType::SELECTABLE );
- pStateSetHelper->AddState( AccessibleStateType::SHOWING );
-cvs diff: Diffing svx/source/customshapes
-cvs diff: Diffing svx/source/dialog
-cvs diff: Diffing svx/source/editeng
-cvs diff: Diffing svx/source/engine3d
-cvs diff: Diffing svx/source/fmcomp
-cvs diff: Diffing svx/source/form
-cvs diff: Diffing svx/source/gallery2
-cvs diff: Diffing svx/source/gengal
-cvs diff: Diffing svx/source/inc
-cvs diff: Diffing svx/source/init
-cvs diff: Diffing svx/source/intro
-cvs diff: Diffing svx/source/items
-cvs diff: Diffing svx/source/mnuctrls
-cvs diff: Diffing svx/source/msfilter
-cvs diff: Diffing svx/source/options
-cvs diff: Diffing svx/source/outliner
-cvs diff: Diffing svx/source/sdr
-cvs diff: Diffing svx/source/sdr/animation
-cvs diff: Diffing svx/source/sdr/contact
-cvs diff: Diffing svx/source/sdr/event
-cvs diff: Diffing svx/source/sdr/mixer
-cvs diff: Diffing svx/source/sdr/properties
-cvs diff: Diffing svx/source/src
-cvs diff: Diffing svx/source/stbctrls
-cvs diff: Diffing svx/source/svdraw
-cvs diff: Diffing svx/source/svrtf
-cvs diff: Diffing svx/source/svxlink
-cvs diff: Diffing svx/source/tbxctrls
-cvs diff: Diffing svx/source/toolbars
-cvs diff: Diffing svx/source/unodialogs
-cvs diff: Diffing svx/source/unodialogs/inc
-cvs diff: Diffing svx/source/unodialogs/textconversiondlgs
-cvs diff: Diffing svx/source/unodraw
-cvs diff: Diffing svx/source/unoedit
-cvs diff: Diffing svx/source/unogallery
-cvs diff: Diffing svx/source/xml
-cvs diff: Diffing svx/source/xoutdev
-cvs diff: Diffing svx/uiconfig
-cvs diff: Diffing svx/uiconfig/accelerator
-cvs diff: Diffing svx/uiconfig/accelerator/en-GB
-cvs diff: Diffing svx/uiconfig/accelerator/en-US
-cvs diff: Diffing svx/uiconfig/accelerator/es
-cvs diff: Diffing svx/util
-cvs diff: Diffing svx/util/defs
-Index: comphelper/source/misc/accessiblewrapper.cxx
-===================================================================
-RCS file: /cvs/util/comphelper/source/misc/accessiblewrapper.cxx,v
-retrieving revision 1.9
-retrieving revision 1.8.156.3
-diff -u -p -r1.9 -r1.8.156.3
---- comphelper/source/misc/accessiblewrapper.cxx 8 Sep 2005 02:48:04 -0000 1.9
-+++ comphelper/source/misc/accessiblewrapper.cxx 1 Mar 2006 12:12:20 -0000 1.8.156.3
-@@ -151,6 +151,12 @@ namespace comphelper
- {
- Reference< XAccessible > xValue;
-
-+ if( !_rxKey.is() )
-+ {
-+ // fprintf( stderr, "It was this path that was crashing stuff\n" );
-+ return xValue;
-+ }
-+
- // do we have this child in the cahce?
- AccessibleMap::const_iterator aPos = m_aChildrenMap.find( _rxKey );
- if ( m_aChildrenMap.end() != aPos )
-cvs diff: Diffing comphelper/source/officeinstdir
-cvs diff: Diffing comphelper/source/processfactory
-cvs diff: Diffing comphelper/source/property
-cvs diff: Diffing comphelper/source/streaming
-cvs diff: Diffing comphelper/util
-cvs diff: Diffing comphelper/util/defs
-Index: vcl/inc/menu.hxx
-===================================================================
-RCS file: /cvs/gsl/vcl/inc/menu.hxx,v
-retrieving revision 1.35
-retrieving revision 1.35.12.1
-diff -u -p -r1.35 -r1.35.12.1
---- vcl/inc/menu.hxx 9 Sep 2005 11:09:19 -0000 1.35
-+++ vcl/inc/menu.hxx 16 Nov 2005 15:57:55 -0000 1.35.12.1
-@@ -379,6 +379,9 @@ public:
-
- void SetAccessibleDescription( USHORT nItemId, const XubString& rStr );
- XubString GetAccessibleDescription( USHORT nItemId ) const;
-+
-+ // returns whether the item a position nItemPos is highlighted or not.
-+ bool IsHighlighted( USHORT nItemPos ) const;
- };
-
- // -----------
-Index: vcl/inc/svapp.hxx
-===================================================================
-RCS file: /cvs/gsl/vcl/inc/svapp.hxx,v
-retrieving revision 1.35
-retrieving revision 1.35.12.1
-diff -u -p -r1.35 -r1.35.12.1
---- vcl/inc/svapp.hxx 9 Sep 2005 11:29:11 -0000 1.35
-+++ vcl/inc/svapp.hxx 20 Oct 2005 07:07:01 -0000 1.35.12.1
-@@ -349,7 +349,7 @@ public:
- static void AddKeyListener( const Link& rKeyListener );
- static void RemoveKeyListener( const Link& rKeyListener );
- static void ImplCallEventListeners( ULONG nEvent, Window* pWin, void* pData );
-- static void ImplCallEventListeners( VclWindowEvent* pEvent );
-+ static void ImplCallEventListeners( VclSimpleEvent* pEvent );
- static BOOL HandleKey( ULONG nEvent, Window *pWin, KeyEvent* pKeyEvent );
-
- static ULONG PostKeyEvent( ULONG nEvent, Window *pWin, KeyEvent* pKeyEvent );
-cvs diff: Diffing vcl/prj
-Index: vcl/prj/build.lst
-===================================================================
-RCS file: /cvs/gsl/vcl/prj/build.lst,v
-retrieving revision 1.42
-retrieving revision 1.41.72.2
-diff -u -p -r1.42 -r1.41.72.2
---- vcl/prj/build.lst 30 Aug 2005 09:37:21 -0000 1.42
-+++ vcl/prj/build.lst 21 Sep 2005 07:13:26 -0000 1.41.72.2
-@@ -18,6 +18,7 @@ vc vcl\unx\source\gdi nmake - u vc_
- vc vcl\unx\source\window nmake - u vc__winu vc_unot NULL
- vc vcl\unx\source\src nmake - u vc__srcu vc_unot NULL
- vc vcl\unx\dummy nmake - u vc__du vc_unot NULL
-+vc vcl\unx\gtk\a11y nmake - u vc__gtky vc_unot NULL
- vc vcl\unx\gtk\app nmake - u vc__gtka vc_unot NULL
- vc vcl\unx\gtk\window nmake - u vc__gtkw vc_unot NULL
- vc vcl\unx\gtk\gdi nmake - u vc__gtkg vc_unot NULL
-@@ -30,5 +31,5 @@ vc vcl\mac\source\app nmake - m vc_
- vc vcl\mac\source\gdi nmake - m vc__gdim vc_unot NULL
- vc vcl\mac\source\window nmake - m vc__winm vc_unot NULL
- vc vcl\mac\source\src nmake - m vc__srcm vc_unot NULL
--vc vcl\util nmake - all vc_util vc__plug.u vc__appa.u vc__appm.m vc__appu.u vc__appw.w vc__gdim.m vc__gdiu.u vc__gdiw.w vc__srcm.m vc__srcu.u vc__srcw.w vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__du.u vc__gtka.u vc__gtkw.u vc__gtkg.u vc__kde.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs NULL
-+vc vcl\util nmake - all vc_util vc__plug.u vc__appa.u vc__appm.m vc__appu.u vc__appw.w vc__gdim.m vc__gdiu.u vc__gdiw.w vc__srcm.m vc__srcu.u vc__srcw.w vc__wina.u vc__winm.m vc__winu.u vc__winw.w vc__du.u vc__gtka.u vc__gtky.u vc__gtkw.u vc__gtkg.u vc__kde.u vc_app vc_ctrl vc_gdi vc_hlp vc_src vc_win vc_glyphs NULL
- vc vcl\workben nmake - all vc_wrkb vc_util NULL
-cvs diff: Diffing vcl/qa
-cvs diff: Diffing vcl/qa/complex
-cvs diff: Diffing vcl/qa/complex/memCheck
-cvs diff: Diffing vcl/qa/complex/persistent_window_states
-cvs diff: Diffing vcl/qa/testdocuments
-cvs diff: Diffing vcl/source
-cvs diff: Diffing vcl/source/app
-Index: vcl/source/app/svapp.cxx
-===================================================================
-RCS file: /cvs/gsl/vcl/source/app/svapp.cxx,v
-retrieving revision 1.61
-retrieving revision 1.58.10.7
-diff -u -p -r1.61 -r1.58.10.7
---- vcl/source/app/svapp.cxx 7 Feb 2006 10:21:10 -0000 1.61
-+++ vcl/source/app/svapp.cxx 16 Feb 2006 13:51:32 -0000 1.58.10.7
-@@ -867,7 +867,7 @@ void Application::ImplCallEventListeners
-
- // -----------------------------------------------------------------------
-
--void Application::ImplCallEventListeners( VclWindowEvent* pEvent )
-+void Application::ImplCallEventListeners( VclSimpleEvent* pEvent )
- {
- ImplSVData* pSVData = ImplGetSVData();
-
-@@ -1227,7 +1227,7 @@ long Application::GetTopWindowCount()
- {
- long nRet = 0;
- ImplSVData* pSVData = ImplGetSVData();
-- Window *pWin = pSVData->maWinData.mpFirstFrame;
-+ Window *pWin = pSVData ? pSVData->maWinData.mpFirstFrame : NULL;
- while( pWin )
- {
- if( pWin->ImplGetWindow()->IsTopWindow() )
-@@ -1243,7 +1243,7 @@ Window* Application::GetTopWindow( long
- {
- long nIdx = 0;
- ImplSVData* pSVData = ImplGetSVData();
-- Window *pWin = pSVData->maWinData.mpFirstFrame;
-+ Window *pWin = pSVData ? pSVData->maWinData.mpFirstFrame : NULL;
- while( pWin )
- {
- if( pWin->ImplGetWindow()->IsTopWindow() )
-@@ -1868,10 +1868,12 @@ BOOL Application::IsAccessibilityEnabled
-
- BOOL InitAccessBridge( BOOL bShowCancel, BOOL &rCancelled )
- {
-- BOOL bRet = ImplInitAccessBridge( bShowCancel, rCancelled );
-+ BOOL bRet = true;
-
--// There is no GUI to re-enable accessibility on Unix ..
-+// Disable Java bridge on UNIX
- #ifndef UNX
-+ bRet = ImplInitAccessBridge( bShowCancel, rCancelled );
-+
- if( !bRet && bShowCancel && !rCancelled )
- {
- // disable accessibility if the user chooses to continue
-@@ -1881,7 +1883,7 @@ BOOL InitAccessBridge( BOOL bShowCancel,
- aSettings.SetMiscSettings( aMisc );
- Application::SetSettings( aSettings );
- }
--#endif
-+#endif // !UNX
-
- return bRet;
- }
-cvs diff: Diffing vcl/source/control
-cvs diff: Diffing vcl/source/ex
-cvs diff: Diffing vcl/source/gdi
-cvs diff: Diffing vcl/source/glyphs
-cvs diff: Diffing vcl/source/helper
-cvs diff: Diffing vcl/source/src
-cvs diff: Diffing vcl/source/unotypes
-cvs diff: Diffing vcl/source/window
-Index: vcl/source/window/menu.cxx
-===================================================================
-RCS file: /cvs/gsl/vcl/source/window/menu.cxx,v
-retrieving revision 1.132
-retrieving revision 1.127.12.6
-diff -u -p -r1.132 -r1.127.12.6
---- vcl/source/window/menu.cxx 26 Jan 2006 18:10:24 -0000 1.132
-+++ vcl/source/window/menu.cxx 30 Jan 2006 16:17:33 -0000 1.127.12.6
-@@ -577,7 +577,6 @@ public:
- USHORT GetPosInParent() const { return nPosInParent; }
-
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
-- BOOL IsTopmostApplicationMenu();
- };
-
- // To get the transparent mouse-over look, the closer is actually a toolbox
-@@ -1112,6 +1111,13 @@ void Menu::ImplCallEventListeners( ULONG
- {
- VclMenuEvent aEvent( this, nEvent, nPos );
-
-+ // This is needed by atk accessibility bridge
-+ if ( nEvent == VCLEVENT_MENU_HIGHLIGHT )
-+ {
-+ ImplSVData* pSVData = ImplGetSVData();
-+ pSVData->mpApp->ImplCallEventListeners( &aEvent );
-+ }
-+
- if ( !maEventListeners.empty() )
- maEventListeners.Call( &aEvent );
-
-@@ -2884,7 +2890,20 @@ BOOL Menu::GetSystemMenuData( SystemMenu
- return FALSE;
- }
-
--
-+bool Menu::IsHighlighted( USHORT nItemPos ) const
-+{
-+ bool bRet = false;
-+
-+ if( pWindow )
-+ {
-+ if( bIsMenuBar )
-+ bRet = ( nItemPos == static_cast< MenuBarWindow * > (pWindow)->GetHighlightedItem() );
-+ else
-+ bRet = ( nItemPos == static_cast< MenuFloatingWindow * > (pWindow)->GetHighlightedItem() );
-+ }
-+
-+ return bRet;
-+}
-
- // -----------
- // - MenuBar -
-@@ -4406,9 +4425,11 @@ void MenuFloatingWindow::KeyInput( const
- else
- {
- StopExecute();
-- MenuFloatingWindow* pFloat = ((PopupMenu*)pMenu->pStartedFrom)->ImplGetFloatingWindow();
-+ PopupMenu* pPopupMenu = (PopupMenu*)pMenu->pStartedFrom;
-+ MenuFloatingWindow* pFloat = pPopupMenu->ImplGetFloatingWindow();
- pFloat->GrabFocus();
- pFloat->KillActivePopup();
-+ pPopupMenu->pStartedFrom->ImplCallHighlight(pFloat->nHighlightedItem);
- }
- }
- break;
-@@ -4622,18 +4643,12 @@ void MenuFloatingWindow::Command( const
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > xAcc;
-
-- if ( pMenu )
-+ if ( pMenu && !pMenu->pStartedFrom )
- xAcc = pMenu->GetAccessible();
-
- return xAcc;
- }
-
--
--BOOL MenuFloatingWindow::IsTopmostApplicationMenu()
--{
-- return (!pMenu->pStartedFrom) ? TRUE : FALSE;
--}
--
- MenuBarWindow::MenuBarWindow( Window* pParent ) :
- Window( pParent, 0 ),
- aCloser( this ),
-cvs diff: Diffing vcl/test
-cvs diff: Diffing vcl/unx
-cvs diff: Diffing vcl/unx/dummy
-cvs diff: Diffing vcl/unx/gtk
-cvs diff: Diffing vcl/unx/gtk/a11y
-Index: vcl/unx/gtk/a11y/TODO
-===================================================================
-RCS file: vcl/unx/gtk/a11y/TODO
-diff -N vcl/unx/gtk/a11y/TODO
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/TODO 31 May 2005 14:08:21 -0000 1.1.2.6
-@@ -0,0 +1,49 @@
-+cws 'atkbridge'
-+#Issue number: i#47890#
-+Submitted by: mmeeks
-+
-+Hacked up prototype of atk bridge
-+
-+
-+Serious problems
-+ + Threading/locking:
-+ + incoming CORBA calls & the GDK lock
-+ + how are these being processed & on what thread ?
-+ + are we holding the GDK_THREADS lock ?
-+ + can we even do that ?
-+ + is it really necessary to be thread safe ?
-+ + how does this work in combination with the (unsafe) GAIL code ?
-+ + what should incoming CORBA calls be doing ?
-+ + esp. since we can't tell if they're coming from
-+ in-proc or not either [ though this is unlikely ]
-+
-+
-+Test:
-+ + in-line text editing, does the TEXT_CHANGED signal get it right,
-+ + why not copy/paste/delete etc. ?
-+ + check vs. writer & other bits ...
-+ + AtkSelection
-+ + AtkHyper*
-+
-+* At-poke
-+ + implement non-gui mode - for to-console event logging
-+ + logging
-+ + more detail from remaining events
-+ + add a Tree navigation thing instead (?)
-+ + poke a sub-child (?)
-+ + embed a tree widget inside the tree view ?
-+ + AtkHyperText testing (?)
-+
-+
-+Known bugs:
-+ + AtkText
-+ + selection interface - multiple selections ?
-+ + word boundary issues
-+ + copy AccessibleTextImpl.java's getAfterIndex eg.
-+ + the 'getFoo' methods need to use UNO_QUERY_THROW &
-+ throw an exception to avoid null pointer dereferences.
-+ + AtkAttributeSet (etc.)
-+ + AtkEditableText
-+ + finish/test AtkTable
-+ + HyperLink 'link_activated', HyperText 'link_selected' (?)
-+ + tooltips create new toplevels with broken roles.
-Index: vcl/unx/gtk/a11y/atkaction.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkaction.cxx
-diff -N vcl/unx/gtk/a11y/atkaction.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkaction.cxx 15 Feb 2006 10:59:20 -0000 1.1.2.7
-@@ -0,0 +1,287 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include "atkwrapper.hxx"
-+
-+#include <com/sun/star/accessibility/XAccessibleAction.hpp>
-+#include <com/sun/star/accessibility/XAccessibleKeyBinding.hpp>
-+
-+#include <com/sun/star/awt/Key.hpp>
-+#include <com/sun/star/awt/KeyModifier.hpp>
-+
-+#include <rtl/strbuf.hxx>
-+#include <algorithm>
-+#include <map>
-+
-+#include <stdio.h>
-+
-+using namespace ::com::sun::star;
-+
-+// FIXME
-+static G_CONST_RETURN gchar *
-+getAsConst( const rtl::OString& rString )
-+{
-+ static const int nMax = 10;
-+ static rtl::OString aUgly[nMax];
-+ static int nIdx = 0;
-+ nIdx = (nIdx + 1) % nMax;
-+ aUgly[nIdx] = rString;
-+ return aUgly[ nIdx ];
-+}
-+
-+static accessibility::XAccessibleAction*
-+ getAction( AtkAction *action ) throw (uno::RuntimeException)
-+{
-+ AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( action );
-+
-+ if( pWrap )
-+ {
-+ if( !pWrap->mpAction && pWrap->mpContext )
-+ {
-+ uno::Any any = pWrap->mpContext->queryInterface( accessibility::XAccessibleAction::static_type(NULL) );
-+ pWrap->mpAction = reinterpret_cast< accessibility::XAccessibleAction * > (any.pReserved);
-+ pWrap->mpAction->acquire();
-+ }
-+
-+ return pWrap->mpAction;
-+ }
-+
-+ return NULL;
-+}
-+
-+extern "C" {
-+
-+static gboolean
-+action_wrapper_do_action (AtkAction *action,
-+ gint i)
-+{
-+ try {
-+ accessibility::XAccessibleAction* pAction = getAction( action );
-+ if( pAction )
-+ return pAction->doAccessibleAction( i );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in doAccessibleAction()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+static gint
-+action_wrapper_get_n_actions (AtkAction *action)
-+{
-+ try {
-+ accessibility::XAccessibleAction* pAction = getAction( action );
-+ if( pAction )
-+ return pAction->getAccessibleActionCount();
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleActionCount()" );
-+ }
-+
-+ return 0;
-+}
-+
-+static G_CONST_RETURN gchar *
-+action_wrapper_get_description (AtkAction *action,
-+ gint i)
-+{
-+ // GAIL implement this only for cells
-+ g_warning( "Not implemented: get_description()" );
-+ return "";
-+}
-+
-+static G_CONST_RETURN gchar *
-+action_wrapper_get_localized_name (AtkAction *action,
-+ gint i)
-+{
-+ // GAIL doesn't implement this as well
-+ g_warning( "Not implemented: get_localized_name()" );
-+ return "";
-+}
-+
-+#define ACTION_NAME_PAIR( OOoName, AtkName ) \
-+ std::pair< const rtl::OUString, const gchar * > ( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OOoName ) ), AtkName )
-+
-+static G_CONST_RETURN gchar *
-+action_wrapper_get_name (AtkAction *action,
-+ gint i)
-+{
-+ static std::map< rtl::OUString, const gchar * > aNameMap;
-+
-+ if( aNameMap.empty() )
-+ {
-+ aNameMap.insert( ACTION_NAME_PAIR( "click", "click" ) );
-+ aNameMap.insert( ACTION_NAME_PAIR( "select", "click" ) );
-+ aNameMap.insert( ACTION_NAME_PAIR( "togglePopup", "push" ) );
-+ }
-+
-+ try {
-+ accessibility::XAccessibleAction* pAction = getAction( action );
-+ if( pAction )
-+ {
-+ std::map< rtl::OUString, const gchar * >::iterator iter;
-+
-+ rtl::OUString aDesc( pAction->getAccessibleActionDescription( i ) );
-+
-+ iter = aNameMap.find( aDesc );
-+ if( iter != aNameMap.end() )
-+ return iter->second;
-+
-+ std::pair< const rtl::OUString, const gchar * > aNewVal( aDesc,
-+ g_strdup( OUStringToConstGChar(aDesc) ) );
-+
-+ if( aNameMap.insert( aNewVal ).second );
-+ return aNewVal.second;
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleActionDescription()" );
-+ }
-+
-+ return "";
-+}
-+
-+/*
-+* GNOME Expects a string in the format:
-+*
-+* <nmemonic>;<full-path>;<accelerator>
-+*
-+* The keybindings in <full-path> should be separated by ":"
-+*/
-+
-+static inline void
-+appendKeyStrokes(rtl::OStringBuffer& rBuffer, const uno::Sequence< awt::KeyStroke >& rKeyStrokes)
-+{
-+ for( sal_Int32 i = 0; i < rKeyStrokes.getLength(); i++ )
-+ {
-+ if( rKeyStrokes[i].Modifiers & awt::KeyModifier::SHIFT )
-+ rBuffer.append("<Shift>");
-+ if( rKeyStrokes[i].Modifiers & awt::KeyModifier::MOD1 )
-+ rBuffer.append("<Control>");
-+ if( rKeyStrokes[i].Modifiers & awt::KeyModifier::MOD2 )
-+ rBuffer.append("<Alt>");
-+
-+ if( ( rKeyStrokes[i].KeyCode >= awt::Key::A ) && ( rKeyStrokes[i].KeyCode <= awt::Key::Z ) )
-+ rBuffer.append( (sal_Char) ( 'a' + ( rKeyStrokes[i].KeyCode - awt::Key::A ) ) );
-+ else
-+ {
-+ sal_Char c = '\0';
-+
-+ switch( rKeyStrokes[i].KeyCode )
-+ {
-+ case awt::Key::TAB: c = '\t'; break;
-+ case awt::Key::SPACE: c = ' '; break;
-+ case awt::Key::ADD: c = '+'; break;
-+ case awt::Key::SUBTRACT: c = '-'; break;
-+ case awt::Key::MULTIPLY: c = '*'; break;
-+ case awt::Key::DIVIDE: c = '/'; break;
-+ case awt::Key::POINT: c = '.'; break;
-+ case awt::Key::COMMA: c = ','; break;
-+ case awt::Key::LESS: c = '<'; break;
-+ case awt::Key::GREATER: c = '>'; break;
-+ case awt::Key::EQUAL: c = '='; break;
-+ case 0:
-+ break;
-+ default:
-+ g_warning( "Unmapped KeyCode: %d", rKeyStrokes[i].KeyCode );
-+ break;
-+ }
-+
-+ if( c != '\0' )
-+ rBuffer.append( c );
-+ }
-+ }
-+}
-+
-+
-+static G_CONST_RETURN gchar *
-+action_wrapper_get_keybinding (AtkAction *action,
-+ gint i)
-+{
-+ try {
-+ accessibility::XAccessibleAction* pAction = getAction( action );
-+ if( pAction )
-+ {
-+ uno::Reference< accessibility::XAccessibleKeyBinding > xBinding( pAction->getAccessibleActionKeyBinding( i ));
-+
-+ if( xBinding.is() )
-+ {
-+ rtl::OStringBuffer aRet;
-+
-+ sal_Int32 nmax = std::min( xBinding->getAccessibleKeyBindingCount(), (sal_Int32) 3 );
-+ for( sal_Int32 n = 0; n < nmax; n++ )
-+ {
-+ appendKeyStrokes( aRet, xBinding->getAccessibleKeyBinding( n ) );
-+
-+ if( n < 2 )
-+ aRet.append( (sal_Char) ';' );
-+ }
-+
-+ // !! FIXME !! remember keystroke in wrapper object ?
-+ return getAsConst( aRet.makeStringAndClear() );
-+ }
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in get_keybinding()" );
-+ }
-+
-+ return "";
-+}
-+
-+static gboolean
-+action_wrapper_set_description (AtkAction *action,
-+ gint i,
-+ const gchar *desc)
-+{
-+ return FALSE;
-+}
-+
-+} // extern "C"
-+
-+void
-+actionIfaceInit (AtkActionIface *iface)
-+{
-+ g_return_if_fail (iface != NULL);
-+
-+ iface->do_action = action_wrapper_do_action;
-+ iface->get_n_actions = action_wrapper_get_n_actions;
-+// iface->get_description = action_wrapper_get_description;
-+ iface->get_keybinding = action_wrapper_get_keybinding;
-+ iface->get_name = action_wrapper_get_name;
-+// iface->get_localized_name = action_wrapper_get_localized_name;
-+ iface->set_description = action_wrapper_set_description;
-+}
-Index: vcl/unx/gtk/a11y/atkbridge.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkbridge.cxx
-diff -N vcl/unx/gtk/a11y/atkbridge.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkbridge.cxx 15 Feb 2006 10:59:21 -0000 1.1.2.2
-@@ -0,0 +1,56 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include <plugins/gtk/atkbridge.hxx>
-+#include <plugins/gtk/gtkframe.hxx>
-+
-+#include "atkfactory.hxx"
-+#include "atkutil.hxx"
-+#include "atkwindow.hxx"
-+
-+void InitAtkBridge(void)
-+{
-+ /* Initialize the AtkUtilityWrapper class */
-+ g_type_class_unref( g_type_class_ref( OOO_TYPE_ATK_UTIL ) );
-+
-+ /* Initialize the GailWindow wrapper class */
-+ g_type_class_unref( g_type_class_ref( OOO_TYPE_WINDOW_WRAPPER ) );
-+
-+ /* Register AtkObject wrapper factory */
-+ AtkRegistry * registry = atk_get_default_registry();
-+ if( registry)
-+ atk_registry_set_factory_type( registry, OOO_TYPE_FIXED, OOO_TYPE_WRAPPER_FACTORY );
-+}
-+
-Index: vcl/unx/gtk/a11y/atkcomponent.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkcomponent.cxx
-diff -N vcl/unx/gtk/a11y/atkcomponent.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkcomponent.cxx 15 Feb 2006 10:58:57 -0000 1.1.2.8
-@@ -0,0 +1,397 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include "atkwrapper.hxx"
-+
-+#include <com/sun/star/accessibility/XAccessibleComponent.hpp>
-+
-+#ifdef ENABLE_TRACING
-+#include <stdio.h>
-+#endif
-+
-+using namespace ::com::sun::star;
-+
-+static accessibility::XAccessibleComponent*
-+ getComponent( AtkComponent *pComponent ) throw (uno::RuntimeException)
-+{
-+ AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pComponent );
-+ if( pWrap )
-+ {
-+ if( !pWrap->mpComponent && pWrap->mpContext )
-+ {
-+ uno::Any any = pWrap->mpContext->queryInterface( accessibility::XAccessibleComponent::static_type(NULL) );
-+ pWrap->mpComponent = reinterpret_cast< accessibility::XAccessibleComponent * > (any.pReserved);
-+ pWrap->mpComponent->acquire();
-+ }
-+
-+ return pWrap->mpComponent;
-+ }
-+
-+ return NULL;
-+}
-+
-+/*****************************************************************************/
-+
-+static awt::Point
-+translatePoint( accessibility::XAccessibleComponent *pComponent,
-+ gint x, gint y, AtkCoordType t)
-+{
-+ awt::Point aOrigin( 0, 0 );
-+ if( t == ATK_XY_SCREEN )
-+ awt::Point aOrigin = pComponent->getLocationOnScreen();
-+
-+#ifdef ENABLE_TRACING
-+ fprintf(stderr, "coordinates ( %u, %u ) translated to: ( %u, %u )\n",
-+ x, y, x - aOrigin.X, y - aOrigin.Y);
-+#endif
-+
-+ return awt::Point( x - aOrigin.X, y - aOrigin.Y );
-+}
-+
-+/*****************************************************************************/
-+
-+extern "C" {
-+
-+static gboolean
-+component_wrapper_grab_focus (AtkComponent *component)
-+{
-+ try
-+ {
-+ accessibility::XAccessibleComponent* pComponent = getComponent( component );
-+ if( pComponent )
-+ {
-+ pComponent->grabFocus();
-+ return TRUE;
-+ }
-+ }
-+ catch( const uno::Exception &e )
-+ {
-+ g_warning( "Exception in grabFocus()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+/*****************************************************************************/
-+
-+static gboolean
-+component_wrapper_contains (AtkComponent *component,
-+ gint x,
-+ gint y,
-+ AtkCoordType coord_type)
-+{
-+ try
-+ {
-+ accessibility::XAccessibleComponent* pComponent = getComponent( component );
-+ if( pComponent )
-+ return pComponent->containsPoint( translatePoint( pComponent, x, y, coord_type ) );
-+ }
-+ catch( const uno::Exception &e )
-+ {
-+ g_warning( "Exception in containsPoint()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+/*****************************************************************************/
-+
-+static AtkObject *
-+component_wrapper_ref_accessible_at_point (AtkComponent *component,
-+ gint x,
-+ gint y,
-+ AtkCoordType coord_type)
-+{
-+ try
-+ {
-+ accessibility::XAccessibleComponent* pComponent = getComponent( component );
-+
-+ if( pComponent )
-+ {
-+ uno::Reference< accessibility::XAccessible > xAccessible;
-+ xAccessible = pComponent->getAccessibleAtPoint(
-+ translatePoint( pComponent, x, y, coord_type ) );
-+
-+#ifdef ENABLE_TRACING
-+ fprintf(stderr, "getAccessibleAtPoint( %u, %u ) returned %p\n",
-+ x, y, xAccessible.get());
-+
-+ uno::Reference< accessibility::XAccessibleComponent > xComponent(
-+ xAccessible->getAccessibleContext(), uno::UNO_QUERY );
-+
-+ if( xComponent.is() )
-+ {
-+ awt::Rectangle rect = xComponent->getBounds();
-+ fprintf(stderr, "%p->getBounds() returned: ( %u, %u, %u, %u )\n",
-+ xAccessible.get(), rect.X, rect.Y, rect.Width, rect.Height );
-+ }
-+#endif
-+
-+ return atk_object_wrapper_ref( xAccessible );
-+ }
-+ }
-+ catch( const uno::Exception &e )
-+ {
-+ g_warning( "Exception in getAccessibleAtPoint()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+/*****************************************************************************/
-+
-+static void
-+component_wrapper_get_position (AtkComponent *component,
-+ gint *x,
-+ gint *y,
-+ AtkCoordType coord_type)
-+{
-+ try
-+ {
-+ accessibility::XAccessibleComponent* pComponent = getComponent( component );
-+ if( pComponent )
-+ {
-+ awt::Point aPos;
-+
-+ if( coord_type == ATK_XY_SCREEN )
-+ aPos = pComponent->getLocationOnScreen();
-+ else
-+ aPos = pComponent->getLocation();
-+
-+ *x = aPos.X;
-+ *y = aPos.Y;
-+
-+#ifdef ENABLE_TRACING
-+ fprintf(stderr, "getLocation[OnScreen]() returned: ( %u, %u )\n", *x, *y );
-+#endif
-+ }
-+ }
-+ catch( const uno::Exception &e )
-+ {
-+ g_warning( "Exception in getLocation[OnScreen]()" );
-+ }
-+}
-+
-+/*****************************************************************************/
-+
-+static void
-+component_wrapper_get_size (AtkComponent *component,
-+ gint *width,
-+ gint *height)
-+{
-+ try
-+ {
-+ accessibility::XAccessibleComponent* pComponent = getComponent( component );
-+ if( pComponent )
-+ {
-+ awt::Size aSize = pComponent->getSize();
-+ *width = aSize.Width;
-+ *height = aSize.Height;
-+
-+#ifdef ENABLE_TRACING
-+ fprintf(stderr, "getSize() returned: ( %u, %u )\n", *width, *height );
-+#endif
-+ }
-+ }
-+ catch( const uno::Exception &e )
-+ {
-+ g_warning( "Exception in getSize()" );
-+ }
-+}
-+
-+/*****************************************************************************/
-+
-+static void
-+component_wrapper_get_extents (AtkComponent *component,
-+ gint *x,
-+ gint *y,
-+ gint *width,
-+ gint *height,
-+ AtkCoordType coord_type)
-+{
-+ component_wrapper_get_position( component, x, y, coord_type );
-+ component_wrapper_get_size( component, width, height );
-+}
-+
-+/*****************************************************************************/
-+
-+static gboolean
-+component_wrapper_set_extents (AtkComponent *component,
-+ gint x,
-+ gint y,
-+ gint width,
-+ gint height,
-+ AtkCoordType coord_type)
-+{
-+ g_warning( "AtkComponent::set_extents unimplementable" );
-+ return FALSE;
-+}
-+
-+/*****************************************************************************/
-+
-+static gboolean
-+component_wrapper_set_position (AtkComponent *component,
-+ gint x,
-+ gint y,
-+ AtkCoordType coord_type)
-+{
-+ g_warning( "AtkComponent::set_position unimplementable" );
-+ return FALSE;
-+}
-+
-+/*****************************************************************************/
-+
-+static gboolean
-+component_wrapper_set_size (AtkComponent *component,
-+ gint width,
-+ gint height)
-+{
-+ g_warning( "AtkComponent::set_size unimplementable" );
-+ return FALSE;
-+}
-+
-+/*****************************************************************************/
-+
-+static AtkLayer
-+component_wrapper_get_layer (AtkComponent *component)
-+{
-+ AtkRole role = atk_object_get_role( ATK_OBJECT( component ) );
-+ AtkLayer layer = ATK_LAYER_WIDGET;
-+
-+ switch (role)
-+ {
-+ case ATK_ROLE_POPUP_MENU:
-+ case ATK_ROLE_MENU_ITEM:
-+ case ATK_ROLE_CHECK_MENU_ITEM:
-+ case ATK_ROLE_SEPARATOR:
-+ case ATK_ROLE_LIST_ITEM:
-+ layer = ATK_LAYER_POPUP;
-+ break;
-+ case ATK_ROLE_MENU:
-+ {
-+ AtkObject * parent = atk_object_get_parent( ATK_OBJECT( component ) );
-+ if( atk_object_get_role( parent ) != ATK_ROLE_MENU_BAR )
-+ layer = ATK_LAYER_POPUP;
-+ }
-+ break;
-+
-+ case ATK_ROLE_LIST:
-+ {
-+ AtkObject * parent = atk_object_get_parent( ATK_OBJECT( component ) );
-+ if( atk_object_get_role( parent ) == ATK_ROLE_COMBO_BOX )
-+ layer = ATK_LAYER_POPUP;
-+ }
-+ break;
-+
-+ default:
-+ ;
-+ }
-+
-+ return layer;
-+}
-+
-+/*****************************************************************************/
-+
-+static gint
-+component_wrapper_get_mdi_zorder (AtkComponent *component)
-+{
-+ // only needed for ATK_LAYER_MDI (not used) or ATK_LAYER_WINDOW (inherited from GAIL)
-+ return G_MININT;
-+}
-+
-+/*****************************************************************************/
-+
-+// This code is mostly stolen from libgail ..
-+
-+static guint
-+component_wrapper_add_focus_handler (AtkComponent *component,
-+ AtkFocusHandler handler)
-+{
-+ GSignalMatchType match_type;
-+ gulong ret;
-+ guint signal_id;
-+
-+ match_type = (GSignalMatchType) (G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC);
-+ signal_id = g_signal_lookup( "focus-event", ATK_TYPE_OBJECT );
-+
-+ ret = g_signal_handler_find( component, match_type, signal_id, 0, NULL,
-+ (gpointer) handler, NULL);
-+ if (!ret)
-+ {
-+ return g_signal_connect_closure_by_id (component,
-+ signal_id, 0,
-+ g_cclosure_new (
-+ G_CALLBACK (handler), NULL,
-+ (GClosureNotify) NULL),
-+ FALSE);
-+ }
-+ else
-+ {
-+ return 0;
-+ }
-+}
-+
-+/*****************************************************************************/
-+
-+static void
-+component_wrapper_remove_focus_handler (AtkComponent *component,
-+ guint handler_id)
-+{
-+ g_signal_handler_disconnect (component, handler_id);
-+}
-+
-+/*****************************************************************************/
-+
-+} // extern "C"
-+
-+void
-+componentIfaceInit (AtkComponentIface *iface)
-+{
-+ g_return_if_fail (iface != NULL);
-+
-+ iface->add_focus_handler = component_wrapper_add_focus_handler;
-+ iface->contains = component_wrapper_contains;
-+ iface->get_extents = component_wrapper_get_extents;
-+ iface->get_layer = component_wrapper_get_layer;
-+ iface->get_mdi_zorder = component_wrapper_get_mdi_zorder;
-+ iface->get_position = component_wrapper_get_position;
-+ iface->get_size = component_wrapper_get_size;
-+ iface->grab_focus = component_wrapper_grab_focus;
-+ iface->ref_accessible_at_point = component_wrapper_ref_accessible_at_point;
-+ iface->remove_focus_handler = component_wrapper_remove_focus_handler;
-+ iface->set_extents = component_wrapper_set_extents;
-+ iface->set_position = component_wrapper_set_position;
-+ iface->set_size = component_wrapper_set_size;
-+}
-Index: vcl/unx/gtk/a11y/atkeditabletext.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkeditabletext.cxx
-diff -N vcl/unx/gtk/a11y/atkeditabletext.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkeditabletext.cxx 15 Feb 2006 10:59:21 -0000 1.1.2.7
-@@ -0,0 +1,207 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include "atkwrapper.hxx"
-+#include "atktextattributes.hxx"
-+
-+#include <com/sun/star/accessibility/XAccessibleEditableText.hpp>
-+#include <com/sun/star/accessibility/TextSegment.hpp>
-+
-+// #include <functional>
-+// #include <hash_map>
-+
-+#include <stdio.h>
-+#include <string.h>
-+
-+using namespace ::com::sun::star;
-+
-+static accessibility::XAccessibleEditableText*
-+ getEditableText( AtkEditableText *pEditableText ) throw (uno::RuntimeException)
-+{
-+ AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pEditableText );
-+ if( pWrap )
-+ {
-+ if( !pWrap->mpEditableText && pWrap->mpContext )
-+ {
-+ uno::Any any = pWrap->mpContext->queryInterface( accessibility::XAccessibleEditableText::static_type(NULL) );
-+ pWrap->mpEditableText = reinterpret_cast< accessibility::XAccessibleEditableText * > (any.pReserved);
-+ pWrap->mpEditableText->acquire();
-+ }
-+
-+ return pWrap->mpEditableText;
-+ }
-+
-+ return NULL;
-+}
-+
-+
-+/*****************************************************************************/
-+
-+extern "C" {
-+
-+static gboolean
-+editable_text_wrapper_set_run_attributes( AtkEditableText *text,
-+ AtkAttributeSet *attribute_set,
-+ gint nStartOffset,
-+ gint nEndOffset)
-+{
-+ try {
-+ accessibility::XAccessibleEditableText* pEditableText = getEditableText( text );
-+ if( pEditableText )
-+ {
-+ uno::Sequence< beans::PropertyValue > aAttributeList;
-+
-+ if( attribute_set_map_to_property_values( attribute_set, aAttributeList ) )
-+ return pEditableText->setAttributes(nStartOffset, nEndOffset, aAttributeList);
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in setAttributes()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+static void
-+editable_text_wrapper_set_text_contents( AtkEditableText *text,
-+ const gchar *string )
-+{
-+ try {
-+ accessibility::XAccessibleEditableText* pEditableText = getEditableText( text );
-+ if( pEditableText )
-+ {
-+ rtl::OUString aString ( string, strlen(string), RTL_TEXTENCODING_UTF8 );
-+ pEditableText->setText( aString );
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in setText()" );
-+ }
-+}
-+
-+static void
-+editable_text_wrapper_insert_text( AtkEditableText *text,
-+ const gchar *string,
-+ gint length,
-+ gint *pos )
-+{
-+ try {
-+ accessibility::XAccessibleEditableText* pEditableText = getEditableText( text );
-+ if( pEditableText )
-+ {
-+ rtl::OUString aString ( string, length, RTL_TEXTENCODING_UTF8 );
-+ if( pEditableText->insertText( aString, *pos ) )
-+ *pos += length;
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in insertText()" );
-+ }
-+}
-+
-+static void
-+editable_text_wrapper_cut_text( AtkEditableText *text,
-+ gint start,
-+ gint end )
-+{
-+ try {
-+ accessibility::XAccessibleEditableText* pEditableText = getEditableText( text );
-+ if( pEditableText )
-+ pEditableText->cutText( start, end );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in cutText()" );
-+ }
-+}
-+
-+static void
-+editable_text_wrapper_delete_text( AtkEditableText *text,
-+ gint start,
-+ gint end )
-+{
-+ try {
-+ accessibility::XAccessibleEditableText* pEditableText = getEditableText( text );
-+ if( pEditableText )
-+ pEditableText->deleteText( start, end );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in deleteText()" );
-+ }
-+}
-+
-+static void
-+editable_text_wrapper_paste_text( AtkEditableText *text,
-+ gint pos )
-+{
-+ try {
-+ accessibility::XAccessibleEditableText* pEditableText = getEditableText( text );
-+ if( pEditableText )
-+ pEditableText->pasteText( pos );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in pasteText()" );
-+ }
-+}
-+
-+static void
-+editable_text_wrapper_copy_text( AtkEditableText *text,
-+ gint start,
-+ gint end )
-+{
-+ try {
-+ accessibility::XAccessibleEditableText* pEditableText = getEditableText( text );
-+ if( pEditableText )
-+ pEditableText->copyText( start, end );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in copyText()" );
-+ }
-+}
-+
-+} // extern "C"
-+
-+void
-+editableTextIfaceInit (AtkEditableTextIface *iface)
-+{
-+ g_return_if_fail (iface != NULL);
-+
-+ iface->set_text_contents = editable_text_wrapper_set_text_contents;
-+ iface->insert_text = editable_text_wrapper_insert_text;
-+ iface->copy_text = editable_text_wrapper_copy_text;
-+ iface->cut_text = editable_text_wrapper_cut_text;
-+ iface->delete_text = editable_text_wrapper_delete_text;
-+ iface->paste_text = editable_text_wrapper_paste_text;
-+ iface->set_run_attributes = editable_text_wrapper_set_run_attributes;
-+}
-Index: vcl/unx/gtk/a11y/atkfactory.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkfactory.cxx
-diff -N vcl/unx/gtk/a11y/atkfactory.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkfactory.cxx 15 Feb 2006 10:59:22 -0000 1.1.2.9
-@@ -0,0 +1,166 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include <plugins/gtk/gtkframe.hxx>
-+#include "atkwrapper.hxx"
-+#include "atkfactory.hxx"
-+
-+using namespace ::com::sun::star;
-+
-+extern "C" {
-+
-+/*
-+ * Instances of this dummy object class are returned whenever we have to
-+ * create an AtkObject, but can't touch the OOo object anymore since it
-+ * is already disposed.
-+ */
-+
-+static AtkStateSet *
-+noop_wrapper_ref_state_set( AtkObject *pObject )
-+{
-+ AtkStateSet *state_set = atk_state_set_new();
-+ atk_state_set_add_state( state_set, ATK_STATE_DEFUNCT );
-+ return state_set;
-+}
-+
-+static void
-+atk_noop_object_wrapper_class_init(AtkNoOpObjectClass *klass)
-+{
-+ AtkObjectClass *atk_class = ATK_OBJECT_CLASS( klass );
-+ atk_class->ref_state_set = noop_wrapper_ref_state_set;
-+}
-+
-+static GType
-+atk_noop_object_wrapper_get_type(void)
-+{
-+ static GType type = 0;
-+
-+ if (!type)
-+ {
-+ static const GTypeInfo typeInfo =
-+ {
-+ sizeof (AtkNoOpObjectClass),
-+ (GBaseInitFunc) NULL,
-+ (GBaseFinalizeFunc) NULL,
-+ (GClassInitFunc) atk_noop_object_wrapper_class_init,
-+ (GClassFinalizeFunc) NULL,
-+ NULL,
-+ sizeof (AtkObjectWrapper),
-+ 0,
-+ (GInstanceInitFunc) NULL,
-+ } ;
-+
-+ type = g_type_register_static (ATK_TYPE_OBJECT, "OOoAtkNoOpObj", &typeInfo, (GTypeFlags)0) ;
-+ }
-+ return type;
-+}
-+
-+AtkObject*
-+atk_noop_object_wrapper_new()
-+{
-+ AtkObject *accessible;
-+
-+ accessible = (AtkObject *) g_object_new (atk_noop_object_wrapper_get_type(), NULL);
-+ g_return_val_if_fail (accessible != NULL, NULL);
-+
-+ accessible->role = ATK_ROLE_INVALID;
-+ accessible->layer = ATK_LAYER_INVALID;
-+
-+ return accessible;
-+}
-+
-+/*
-+ * The wrapper factory
-+ */
-+
-+static GType
-+wrapper_factory_get_accessible_type(void)
-+{
-+ return atk_object_wrapper_get_type();
-+}
-+
-+static AtkObject*
-+wrapper_factory_create_accessible( GObject *pObj )
-+{
-+ GtkWidget* parent_widget = gtk_widget_get_parent( GTK_WIDGET( pObj ) );
-+
-+ // gail_container_real_remove_gtk tries to re-instanciate an accessible
-+ // for a widget that is about to vanish ..
-+ if( ! parent_widget )
-+ return atk_noop_object_wrapper_new();
-+
-+ GtkSalFrame* pFrame = GtkSalFrame::getFromWindow( GTK_WINDOW( parent_widget ) );
-+ g_return_val_if_fail( pFrame != NULL, NULL );
-+
-+ AtkObject* parent_accessible = gtk_widget_get_accessible(parent_widget);
-+
-+ uno::Reference< accessibility::XAccessible > xAccessible(pFrame->getAccessible( true ));
-+
-+ if( xAccessible.is() )
-+ return atk_object_wrapper_new( xAccessible, parent_accessible );
-+
-+ return NULL;
-+}
-+
-+static void
-+wrapper_factory_class_init( AtkObjectFactoryClass *klass )
-+{
-+ klass->create_accessible = wrapper_factory_create_accessible;
-+ klass->get_accessible_type = wrapper_factory_get_accessible_type;
-+}
-+
-+GType
-+wrapper_factory_get_type (void)
-+{
-+ static GType t = 0;
-+
-+ if (!t) {
-+ static const GTypeInfo tinfo =
-+ {
-+ sizeof (AtkObjectFactoryClass),
-+ NULL, NULL, (GClassInitFunc) wrapper_factory_class_init,
-+ NULL, NULL, sizeof (AtkObjectFactory), 0, NULL, NULL
-+ };
-+
-+ t = g_type_register_static (
-+ ATK_TYPE_OBJECT_FACTORY, "OOoAtkObjectWrapperFactory",
-+ &tinfo, (GTypeFlags) 0);
-+ }
-+
-+ return t;
-+}
-+
-+}; // extern C
-+
-Index: vcl/unx/gtk/a11y/atkfactory.hxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkfactory.hxx
-diff -N vcl/unx/gtk/a11y/atkfactory.hxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkfactory.hxx 5 Jan 2006 14:06:31 -0000 1.1.2.1
-@@ -0,0 +1,49 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#ifndef __ATK_FACTORY_HXX__
-+#define __ATK_FACTORY_HXX__
-+
-+#include <atk/atk.h>
-+
-+#define OOO_TYPE_WRAPPER_FACTORY wrapper_factory_get_type()
-+
-+extern "C" {
-+
-+GType wrapper_factory_get_type (void);
-+
-+} // extern "C"
-+
-+#endif
-Index: vcl/unx/gtk/a11y/atkhypertext.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkhypertext.cxx
-diff -N vcl/unx/gtk/a11y/atkhypertext.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkhypertext.cxx 15 Feb 2006 10:59:22 -0000 1.1.2.8
-@@ -0,0 +1,295 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include "atkwrapper.hxx"
-+
-+#include <com/sun/star/accessibility/XAccessibleHypertext.hpp>
-+
-+#include <stdio.h>
-+
-+using namespace ::com::sun::star;
-+
-+
-+// ---------------------- AtkHyperlink ----------------------
-+
-+typedef struct {
-+ AtkHyperlink atk_hyper_link;
-+
-+ uno::Reference< accessibility::XAccessibleHyperlink > xLink;
-+} HyperLink;
-+
-+static uno::Reference< accessibility::XAccessibleHyperlink >
-+ getHyperlink( AtkHyperlink *pHyperlink )
-+{
-+ HyperLink *pLink = (HyperLink *) pHyperlink;
-+ return pLink->xLink;
-+}
-+
-+static GObjectClass *hyper_parent_class = NULL;
-+
-+extern "C" {
-+
-+static void
-+hyper_link_finalize (GObject *obj)
-+{
-+ HyperLink *hl = (HyperLink *) obj;
-+ hl->xLink.clear();
-+ hyper_parent_class->finalize (obj);
-+}
-+
-+static gchar *
-+hyper_link_get_uri( AtkHyperlink *pLink,
-+ gint i )
-+{
-+ try {
-+ uno::Any aAny = getHyperlink( pLink )->getAccessibleActionObject( i );
-+ rtl::OUString aUri = aAny.get< rtl::OUString > ();
-+ return OUStringToGChar(aUri);
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in hyper_link_get_uri" );
-+ }
-+ return NULL;
-+}
-+
-+static AtkObject *
-+hyper_link_get_object( AtkHyperlink *pLink,
-+ gint i)
-+{
-+ try {
-+ uno::Any aAny = getHyperlink( pLink )->getAccessibleActionObject( i );
-+ uno::Reference< accessibility::XAccessible > xObj( aAny, uno::UNO_QUERY_THROW );
-+ return atk_object_wrapper_ref( xObj );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in hyper_link_get_object" );
-+ }
-+ return NULL;
-+}
-+static gint
-+hyper_link_get_end_index( AtkHyperlink *pLink )
-+{
-+ try {
-+ return getHyperlink( pLink )->getEndIndex();
-+ }
-+ catch(const uno::Exception& e) {
-+ }
-+ return -1;
-+}
-+static gint
-+hyper_link_get_start_index( AtkHyperlink *pLink )
-+{
-+ try {
-+ return getHyperlink( pLink )->getStartIndex();
-+ }
-+ catch(const uno::Exception& e) {
-+ }
-+ return -1;
-+}
-+static gboolean
-+hyper_link_is_valid( AtkHyperlink *pLink )
-+{
-+ try {
-+ return getHyperlink( pLink )->isValid();
-+ }
-+ catch(const uno::Exception& e) {
-+ }
-+ return FALSE;
-+}
-+static gint
-+hyper_link_get_n_anchors( AtkHyperlink *pLink )
-+{
-+ try {
-+ return getHyperlink( pLink )->getAccessibleActionCount();
-+ }
-+ catch(const uno::Exception& e) {
-+ }
-+ return 0;
-+}
-+static guint
-+hyper_link_link_state( AtkHyperlink *pLink )
-+{
-+ g_warning( "FIXME: hyper_link_link_state unimplemented" );
-+ return 0;
-+}
-+static gboolean
-+hyper_link_is_selected_link( AtkHyperlink *pLink )
-+{
-+ g_warning( "FIXME: hyper_link_is_selected_link unimplemented" );
-+ return FALSE;
-+}
-+
-+static void
-+hyper_link_class_init (AtkHyperlinkClass *klass)
-+{
-+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-+
-+ gobject_class->finalize = hyper_link_finalize;
-+
-+ hyper_parent_class = (GObjectClass *)g_type_class_peek_parent (klass);
-+
-+ klass->get_uri = hyper_link_get_uri;
-+ klass->get_object = hyper_link_get_object;
-+ klass->get_end_index = hyper_link_get_end_index;
-+ klass->get_start_index = hyper_link_get_start_index;
-+ klass->is_valid = hyper_link_is_valid;
-+ klass->get_n_anchors = hyper_link_get_n_anchors;
-+ klass->link_state = hyper_link_link_state;
-+ klass->is_selected_link = hyper_link_is_selected_link;
-+}
-+
-+static GType
-+hyper_link_get_type (void)
-+{
-+ static GType type = 0;
-+
-+ if (!type) {
-+ static const GTypeInfo tinfo = {
-+ sizeof (HyperLink),
-+ NULL, /* base init */
-+ NULL, /* base finalize */
-+ (GClassInitFunc) hyper_link_class_init,
-+ NULL, /* class finalize */
-+ NULL, /* class data */
-+ sizeof (HyperLink), /* instance size */
-+ 0, /* nb preallocs */
-+ NULL, /* instance init */
-+ NULL /* value table */
-+ };
-+
-+ static const GInterfaceInfo atk_action_info = {
-+ (GInterfaceInitFunc) actionIfaceInit,
-+ (GInterfaceFinalizeFunc) NULL,
-+ NULL
-+ };
-+
-+ type = g_type_register_static (ATK_TYPE_HYPERLINK,
-+ "OOoAtkObjHyperLink", &tinfo,
-+ (GTypeFlags)0);
-+ g_type_add_interface_static (type, ATK_TYPE_ACTION,
-+ &atk_action_info);
-+ }
-+
-+ return type;
-+}
-+
-+// ---------------------- AtkHyperText ----------------------
-+
-+static accessibility::XAccessibleHypertext*
-+ getHypertext( AtkHypertext *pHypertext ) throw (uno::RuntimeException)
-+{
-+ AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pHypertext );
-+ if( pWrap )
-+ {
-+ if( !pWrap->mpHypertext && pWrap->mpContext )
-+ {
-+ uno::Any any = pWrap->mpContext->queryInterface( accessibility::XAccessibleHypertext::static_type(NULL) );
-+ pWrap->mpHypertext = reinterpret_cast< accessibility::XAccessibleHypertext * > (any.pReserved);
-+ pWrap->mpHypertext->acquire();
-+ }
-+
-+ return pWrap->mpHypertext;
-+ }
-+
-+ return NULL;
-+}
-+
-+
-+static AtkHyperlink *
-+hypertext_get_link( AtkHypertext *hypertext,
-+ gint link_index)
-+{
-+ try {
-+ accessibility::XAccessibleHypertext* pHypertext = getHypertext( hypertext );
-+ if( pHypertext )
-+ {
-+ HyperLink *pLink = (HyperLink *)g_object_new( hyper_link_get_type(), NULL );
-+ pLink->xLink = pHypertext->getHyperLink( link_index );
-+ if( !pLink->xLink.is() ) {
-+ g_object_unref( G_OBJECT( pLink ) );
-+ pLink = NULL;
-+ }
-+ return ATK_HYPERLINK( pLink );
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getHyperLink()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+static gint
-+hypertext_get_n_links( AtkHypertext *hypertext )
-+{
-+ try {
-+ accessibility::XAccessibleHypertext* pHypertext = getHypertext( hypertext );
-+ if( pHypertext )
-+ return pHypertext->getHyperLinkCount();
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getHyperLinkCount()" );
-+ }
-+
-+ return 0;
-+}
-+
-+static gint
-+hypertext_get_link_index( AtkHypertext *hypertext,
-+ gint index)
-+{
-+ try {
-+ accessibility::XAccessibleHypertext* pHypertext = getHypertext( hypertext );
-+ if( pHypertext )
-+ return pHypertext->getHyperLinkIndex( index );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getHyperLinkIndex()" );
-+ }
-+
-+ return 0;
-+}
-+
-+} // extern "C"
-+
-+void
-+hypertextIfaceInit (AtkHypertextIface *iface)
-+{
-+ g_return_if_fail (iface != NULL);
-+
-+ iface->get_link = hypertext_get_link;
-+ iface->get_n_links = hypertext_get_n_links;
-+ iface->get_link_index = hypertext_get_link_index;
-+}
-Index: vcl/unx/gtk/a11y/atkimage.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkimage.cxx
-diff -N vcl/unx/gtk/a11y/atkimage.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkimage.cxx 15 Feb 2006 10:59:23 -0000 1.1.2.4
-@@ -0,0 +1,144 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include "atkwrapper.hxx"
-+
-+#include <com/sun/star/accessibility/XAccessibleImage.hpp>
-+
-+#include <stdio.h>
-+
-+using namespace ::com::sun::star;
-+
-+// FIXME
-+static G_CONST_RETURN gchar *
-+getAsConst( rtl::OUString rString )
-+{
-+ static const int nMax = 10;
-+ static rtl::OString aUgly[nMax];
-+ static int nIdx = 0;
-+ nIdx = (nIdx + 1) % nMax;
-+ aUgly[nIdx] = rtl::OUStringToOString( rString, RTL_TEXTENCODING_UTF8 );
-+ return aUgly[ nIdx ];
-+}
-+
-+static accessibility::XAccessibleImage*
-+ getImage( AtkImage *pImage ) throw (uno::RuntimeException)
-+{
-+ AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pImage );
-+ if( pWrap )
-+ {
-+ if( !pWrap->mpImage && pWrap->mpContext )
-+ {
-+ uno::Any any = pWrap->mpContext->queryInterface( accessibility::XAccessibleImage::static_type(NULL) );
-+ pWrap->mpImage = reinterpret_cast< accessibility::XAccessibleImage * > (any.pReserved);
-+ pWrap->mpImage->acquire();
-+ }
-+
-+ return pWrap->mpImage;
-+ }
-+
-+ return NULL;
-+}
-+
-+extern "C" {
-+
-+static G_CONST_RETURN gchar *
-+image_get_image_description( AtkImage *image )
-+{
-+ try {
-+ accessibility::XAccessibleImage* pImage = getImage( image );
-+ if( pImage )
-+ return getAsConst( pImage->getAccessibleImageDescription() );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleImageDescription()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+static void
-+image_get_image_position( AtkImage *image,
-+ gint *x,
-+ gint *y,
-+ AtkCoordType coord_type )
-+{
-+ *x = *y = 0;
-+ if( ATK_IS_COMPONENT( image ) )
-+ atk_component_get_position( ATK_COMPONENT( image ), x, y, coord_type );
-+ else
-+ g_warning( "FIXME: no image position information" );
-+}
-+
-+static void
-+image_get_image_size( AtkImage *image,
-+ gint *width,
-+ gint *height )
-+{
-+ *width = 0;
-+ *height = 0;
-+ try {
-+ accessibility::XAccessibleImage* pImage = getImage( image );
-+ if( pImage )
-+ {
-+ *width = pImage->getAccessibleImageWidth();
-+ *height = pImage->getAccessibleImageHeight();
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleImageHeight() or Width" );
-+ }
-+}
-+
-+static gboolean
-+image_set_image_description( AtkImage *image,
-+ const gchar *description )
-+{
-+ g_warning ("FIXME: no set image description");
-+ return FALSE;
-+}
-+
-+} // extern "C"
-+
-+void
-+imageIfaceInit (AtkImageIface *iface)
-+{
-+ g_return_if_fail (iface != NULL);
-+
-+ iface->set_image_description = image_set_image_description;
-+ iface->get_image_description = image_get_image_description;
-+ iface->get_image_position = image_get_image_position;
-+ iface->get_image_size = image_get_image_size;
-+}
-Index: vcl/unx/gtk/a11y/atklistener.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atklistener.cxx
-diff -N vcl/unx/gtk/a11y/atklistener.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atklistener.cxx 1 Mar 2006 12:00:16 -0000 1.1.2.17
-@@ -0,0 +1,474 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include <com/sun/star/accessibility/TextSegment.hpp>
-+#include <com/sun/star/accessibility/AccessibleEventId.hpp>
-+#include <com/sun/star/accessibility/AccessibleStateType.hpp>
-+#include <com/sun/star/accessibility/AccessibleTableModelChange.hpp>
-+#include <com/sun/star/accessibility/AccessibleTableModelChangeType.hpp>
-+#include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
-+
-+#include "atklistener.hxx"
-+#include "atkwrapper.hxx"
-+
-+#include <rtl/ref.hxx>
-+#include <stdio.h>
-+
-+using namespace com::sun::star;
-+
-+
-+#define CSTRING_FROM_ANY(i) rtl::OUStringToOString( i.get< rtl::OUString >(), RTL_TEXTENCODING_UTF8 ).getStr()
-+
-+AtkListener::AtkListener( AtkObjectWrapper* pWrapper )
-+{
-+ if( pWrapper )
-+ {
-+ mpAccessible = ATK_OBJECT( g_object_ref( pWrapper ) );
-+ updateChildList( pWrapper->mpContext );
-+ }
-+}
-+
-+AtkListener::~AtkListener()
-+{
-+}
-+
-+/*****************************************************************************/
-+
-+AtkStateType mapState( const uno::Any &rAny )
-+{
-+ sal_Int16 nState = accessibility::AccessibleStateType::INVALID;
-+ rAny >>= nState;
-+ return mapAtkState( nState );
-+}
-+
-+/*****************************************************************************/
-+
-+// XEventListener implementation
-+void AtkListener::disposing( const lang::EventObject& aEvent ) throw (uno::RuntimeException)
-+{
-+ if( mpAccessible )
-+ {
-+ // Release all interface references to avoid shutdown problems with
-+ // global mutex
-+ atk_object_wrapper_dispose( ATK_OBJECT_WRAPPER( mpAccessible ) );
-+
-+ // This is an equivalent to a state change to DEFUNC(T).
-+ atk_object_notify_state_change( mpAccessible, ATK_STATE_DEFUNCT, TRUE );
-+
-+ if( atk_get_focus_object() == mpAccessible )
-+ atk_focus_tracker_notify( NULL );
-+
-+ // Release the wrapper object so that it can vanish ..
-+ g_object_unref( mpAccessible );
-+ mpAccessible = NULL;
-+ }
-+}
-+
-+/*****************************************************************************/
-+
-+static AtkObject *getObjFromAny( const uno::Any &rAny )
-+{
-+ uno::Reference< accessibility::XAccessible > xAccessible;
-+ rAny >>= xAccessible;
-+ return xAccessible.is() ? atk_object_wrapper_ref( xAccessible ) : NULL;
-+}
-+
-+/*****************************************************************************/
-+
-+// Updates the child list held to provide the old IndexInParent on children_changed::remove
-+void AtkListener::updateChildList(accessibility::XAccessibleContext* pContext)
-+{
-+ m_aChildList.clear();
-+
-+ uno::Reference< accessibility::XAccessibleStateSet > xStateSet = pContext->getAccessibleStateSet();
-+ if( xStateSet.is()
-+ && !xStateSet->contains(accessibility::AccessibleStateType::DEFUNC)
-+ && !xStateSet->contains(accessibility::AccessibleStateType::MANAGES_DESCENDANTS) )
-+ {
-+ sal_Int32 nChildren = pContext->getAccessibleChildCount();
-+ m_aChildList.resize(nChildren);
-+ for(sal_Int32 n = 0; n < nChildren; n++)
-+ {
-+ m_aChildList[n] = pContext->getAccessibleChild(n);
-+ }
-+ }
-+}
-+
-+/*****************************************************************************/
-+
-+void AtkListener::handleChildAdded(
-+ const uno::Reference< accessibility::XAccessibleContext >& rxParent,
-+ const uno::Reference< accessibility::XAccessible>& rxAccessible)
-+{
-+ AtkObject * pChild = atk_object_wrapper_ref( rxAccessible );
-+
-+ if( pChild )
-+ {
-+ updateChildList(rxParent.get());
-+ g_signal_emit_by_name( mpAccessible, "children_changed::add",
-+ atk_object_get_index_in_parent( pChild ), pChild, NULL );
-+ g_object_unref( pChild );
-+ }
-+}
-+
-+/*****************************************************************************/
-+
-+void AtkListener::handleChildRemoved(
-+ const uno::Reference< accessibility::XAccessibleContext >& rxParent,
-+ const uno::Reference< accessibility::XAccessible>& rxChild)
-+{
-+ sal_Int32 nIndex = -1;
-+
-+ // Locate the child in the children list
-+ size_t n, nmax = m_aChildList.size();
-+ for( n = 0; n < nmax; ++n )
-+ {
-+ if( rxChild == m_aChildList[n] )
-+ {
-+ nIndex = n;
-+ break;
-+ }
-+ }
-+
-+ // FIXME: two problems here:
-+ // a) we get child-removed events for objects that are no real childs
-+ // in the accessibility hierarchy
-+ // b) spi_atk_bridge_signal_listener ignores the given parameters
-+ // for children_changed events and always asks the parent for the
-+ // 0. child, which breaks somehow on vanishing list boxes.
-+ // Ignoring "remove" events for objects not in the m_aChildList
-+ // for now.
-+ if( nIndex >= 0 )
-+ {
-+ updateChildList(rxParent.get());
-+
-+ AtkObject * pChild = atk_object_wrapper_ref( rxChild, false );
-+ if( pChild )
-+ {
-+ g_signal_emit_by_name( mpAccessible, "children_changed::remove", nIndex, pChild, NULL );
-+ g_object_unref( pChild );
-+ }
-+ }
-+}
-+
-+/*****************************************************************************/
-+
-+void AtkListener::handleInvalidateChildren(
-+ const uno::Reference< accessibility::XAccessibleContext >& rxParent)
-+{
-+ // Send notifications for all previous children
-+ size_t n = m_aChildList.size();
-+ while( n-- > 0 )
-+ {
-+ AtkObject * pChild = atk_object_wrapper_ref( m_aChildList[n], false );
-+ if( pChild )
-+ {
-+ g_signal_emit_by_name( mpAccessible, "children_changed::remove", n, pChild, NULL );
-+ g_object_unref( pChild );
-+ }
-+ }
-+
-+ updateChildList(rxParent.get());
-+
-+ // Send notifications for all new children
-+ size_t nmax = m_aChildList.size();
-+ for( n = 0; n < nmax; ++n )
-+ {
-+ AtkObject * pChild = atk_object_wrapper_ref( m_aChildList[n] );
-+
-+ if( pChild )
-+ {
-+ g_signal_emit_by_name( mpAccessible, "children_changed::add", n, pChild, NULL );
-+ g_object_unref( pChild );
-+ }
-+ }
-+}
-+
-+/*****************************************************************************/
-+
-+static uno::Reference< accessibility::XAccessibleContext >
-+getAccessibleContextFromSource( const uno::Reference< uno::XInterface >& rxSource )
-+{
-+ uno::Reference< accessibility::XAccessibleContext > xContext(rxSource, uno::UNO_QUERY);
-+ if( ! xContext.is() )
-+ {
-+ g_warning( "ERROR: Event source does not implement XAccessibleContext" );
-+
-+ // Second try - query for XAccessible, which should give us access to
-+ // XAccessibleContext.
-+ uno::Reference< accessibility::XAccessible > xAccessible(rxSource, uno::UNO_QUERY);
-+ if( xAccessible.is() )
-+ xContext = xAccessible->getAccessibleContext();
-+ }
-+
-+ return xContext;
-+}
-+
-+/*****************************************************************************/
-+
-+// XAccessibleEventListener
-+void AtkListener::notifyEvent( const accessibility::AccessibleEventObject& aEvent ) throw( uno::RuntimeException )
-+{
-+ AtkPropertyValues aValues = { NULL };
-+
-+ if( !mpAccessible )
-+ return;
-+
-+ switch( aEvent.EventId )
-+ {
-+ // AtkObject signals:
-+ // Hierarchy signals
-+ case accessibility::AccessibleEventId::CHILD:
-+ {
-+ uno::Reference< accessibility::XAccessibleContext > xParent;
-+ uno::Reference< accessibility::XAccessible > xChild;
-+
-+ xParent = getAccessibleContextFromSource(aEvent.Source);
-+ g_return_if_fail( xParent.is() );
-+
-+ if( aEvent.OldValue >>= xChild )
-+ handleChildRemoved(xParent, xChild);
-+
-+ if( aEvent.NewValue >>= xChild )
-+ handleChildAdded(xParent, xChild);
-+ }
-+ break;
-+
-+ case accessibility::AccessibleEventId::INVALIDATE_ALL_CHILDREN:
-+ {
-+ uno::Reference< accessibility::XAccessibleContext > xParent;
-+
-+ xParent = getAccessibleContextFromSource(aEvent.Source);
-+ g_return_if_fail( xParent.is() );
-+
-+ handleInvalidateChildren(xParent);
-+ }
-+ break;
-+
-+ case accessibility::AccessibleEventId::NAME_CHANGED:
-+ g_object_notify( G_OBJECT( mpAccessible ), "accessible-name" );
-+ break;
-+
-+ case accessibility::AccessibleEventId::DESCRIPTION_CHANGED:
-+ g_object_notify( G_OBJECT( mpAccessible ), "accessible-description" );
-+ break;
-+
-+ case accessibility::AccessibleEventId::STATE_CHANGED:
-+ {
-+ AtkStateType eOldState = mapState( aEvent.OldValue );
-+ AtkStateType eNewState = mapState( aEvent.NewValue );
-+
-+ gboolean bState = eNewState != ATK_STATE_INVALID;
-+ AtkStateType eRealState = bState ? eNewState : eOldState;
-+
-+ atk_object_notify_state_change( mpAccessible, eRealState, bState );
-+ break;
-+ }
-+
-+ case accessibility::AccessibleEventId::BOUNDRECT_CHANGED:
-+
-+ if( ATK_IS_COMPONENT( mpAccessible ) )
-+ {
-+ AtkRectangle rect;
-+
-+ atk_component_get_extents( ATK_COMPONENT( mpAccessible ),
-+ &rect.x,
-+ &rect.y,
-+ &rect.width,
-+ &rect.height,
-+ ATK_XY_SCREEN );
-+
-+ g_signal_emit_by_name( mpAccessible, "bounds_changed", &rect );
-+ }
-+ else
-+ g_warning( "bounds_changed event for object not implementing AtkComponent\n");
-+
-+ break;
-+
-+ case accessibility::AccessibleEventId::VISIBLE_DATA_CHANGED:
-+ g_signal_emit_by_name( mpAccessible, "visible-data-changed" );
-+ break;
-+
-+ case accessibility::AccessibleEventId::ACTIVE_DESCENDANT_CHANGED:
-+ {
-+ AtkObject *pChild = getObjFromAny( aEvent.NewValue );
-+ if( pChild )
-+ {
-+ g_signal_emit_by_name( mpAccessible, "active-descendant-changed", pChild );
-+ g_object_unref( pChild );
-+ }
-+ break;
-+ }
-+
-+ // AtkAction signals ...
-+ case accessibility::AccessibleEventId::ACTION_CHANGED:
-+ g_signal_emit_by_name( G_OBJECT( mpAccessible ), "property_change::accessible-actions");
-+ break;
-+
-+ // AtkText
-+ case accessibility::AccessibleEventId::CARET_CHANGED:
-+ {
-+ sal_Int32 nPos;
-+ aEvent.NewValue >>= nPos;
-+ g_signal_emit_by_name( mpAccessible, "text_caret_moved", nPos );
-+ break;
-+ }
-+ case accessibility::AccessibleEventId::TEXT_CHANGED:
-+ {
-+ // TESTME: and remove this comment:
-+ // cf. comphelper/source/misc/accessibletexthelper.cxx (implInitTextChangedEvent)
-+ accessibility::TextSegment aDeletedText;
-+ accessibility::TextSegment aInsertedText;
-+
-+ // TODO: when GNOME starts to send "update" kind of events, change
-+ // we need to re-think this implementation as well
-+ if( aEvent.OldValue >>= aDeletedText )
-+ g_signal_emit_by_name( mpAccessible, "text_changed::delete",
-+ (gint) aDeletedText.SegmentStart,
-+ (gint)( aDeletedText.SegmentEnd - aDeletedText.SegmentStart ) );
-+ if( aEvent.NewValue >>= aInsertedText )
-+ g_signal_emit_by_name( mpAccessible, "text_changed::insert",
-+ (gint) aInsertedText.SegmentStart,
-+ (gint)( aInsertedText.SegmentEnd - aInsertedText.SegmentStart ) );
-+ break;
-+ }
-+
-+ case accessibility::AccessibleEventId::TEXT_SELECTION_CHANGED:
-+ {
-+ g_signal_emit_by_name( mpAccessible, "text-selection-changed" );
-+ break;
-+ }
-+
-+ case accessibility::AccessibleEventId::TEXT_ATTRIBUTE_CHANGED:
-+ g_signal_emit_by_name( mpAccessible, "text-attributes-changed" );
-+ break;
-+
-+ // AtkValue
-+ case accessibility::AccessibleEventId::VALUE_CHANGED:
-+ g_object_notify( G_OBJECT( mpAccessible ), "accessible-value" );
-+ break;
-+
-+ case accessibility::AccessibleEventId::CONTENT_FLOWS_FROM_RELATION_CHANGED:
-+ case accessibility::AccessibleEventId::CONTENT_FLOWS_TO_RELATION_CHANGED:
-+ case accessibility::AccessibleEventId::CONTROLLED_BY_RELATION_CHANGED:
-+ case accessibility::AccessibleEventId::CONTROLLER_FOR_RELATION_CHANGED:
-+ case accessibility::AccessibleEventId::LABEL_FOR_RELATION_CHANGED:
-+ case accessibility::AccessibleEventId::LABELED_BY_RELATION_CHANGED:
-+ case accessibility::AccessibleEventId::MEMBER_OF_RELATION_CHANGED:
-+ case accessibility::AccessibleEventId::SUB_WINDOW_OF_RELATION_CHANGED:
-+ // FIXME: ask Bill how Atk copes with this little lot ...
-+ break;
-+
-+ // AtkTable
-+ case accessibility::AccessibleEventId::TABLE_MODEL_CHANGED:
-+ {
-+ accessibility::AccessibleTableModelChange aChange;
-+ aEvent.NewValue >>= aChange;
-+
-+ g_warning( "Test me: table model change event" );
-+ sal_Int32 nRowsChanged = aChange.LastRow - aChange.FirstRow + 1;
-+ sal_Int32 nColumnsChanged = aChange.LastColumn - aChange.FirstColumn + 1;
-+
-+ static const struct {
-+ const char *row;
-+ const char *col;
-+ } aSignalNames[] =
-+ {
-+ { NULL, NULL }, // dummy
-+ { "row_inserted", "column_inserted" }, // INSERT = 1
-+ { "row_deleted", "column_deleted" } // DELETE = 2
-+ };
-+ switch( aChange.Type )
-+ {
-+ case accessibility::AccessibleTableModelChangeType::INSERT:
-+ case accessibility::AccessibleTableModelChangeType::DELETE:
-+ if( nRowsChanged > 0 )
-+ g_signal_emit_by_name( G_OBJECT( mpAccessible ),
-+ aSignalNames[aChange.Type].row,
-+ aChange.FirstRow, nRowsChanged );
-+ if( nColumnsChanged > 0 )
-+ g_signal_emit_by_name( G_OBJECT( mpAccessible ),
-+ aSignalNames[aChange.Type].col,
-+ aChange.FirstColumn, nColumnsChanged );
-+ break;
-+
-+ case accessibility::AccessibleTableModelChangeType::UPDATE:
-+ // This is not really a model change, is it ?
-+ break;
-+ default:
-+ g_warning( "TESTME: unusual table model change %d\n", aChange.Type );
-+ break;
-+ }
-+ g_signal_emit_by_name( G_OBJECT( mpAccessible ), "model-changed" );
-+ break;
-+ }
-+
-+ case accessibility::AccessibleEventId::TABLE_COLUMN_HEADER_CHANGED:
-+ g_signal_emit_by_name( G_OBJECT( mpAccessible ), "property_change::accessible-table-column-header");
-+ break;
-+
-+ case accessibility::AccessibleEventId::TABLE_CAPTION_CHANGED:
-+ g_signal_emit_by_name( G_OBJECT( mpAccessible ), "property_change::accessible-table-caption");
-+ break;
-+
-+ case accessibility::AccessibleEventId::TABLE_COLUMN_DESCRIPTION_CHANGED:
-+ g_signal_emit_by_name( G_OBJECT( mpAccessible ), "property_change::accessible-table-column-description");
-+ break;
-+
-+ case accessibility::AccessibleEventId::TABLE_ROW_DESCRIPTION_CHANGED:
-+ g_signal_emit_by_name( G_OBJECT( mpAccessible ), "property_change::accessible-table-row-description");
-+ break;
-+
-+ case accessibility::AccessibleEventId::TABLE_ROW_HEADER_CHANGED:
-+ g_signal_emit_by_name( G_OBJECT( mpAccessible ), "property_change::accessible-table-row-header");
-+ break;
-+
-+ case accessibility::AccessibleEventId::TABLE_SUMMARY_CHANGED:
-+ g_signal_emit_by_name( G_OBJECT( mpAccessible ), "property_change::accessible-table-summary");
-+ break;
-+
-+ case accessibility::AccessibleEventId::SELECTION_CHANGED:
-+ g_signal_emit_by_name( G_OBJECT( mpAccessible ), "selection_changed");
-+ break;
-+
-+ case accessibility::AccessibleEventId::HYPERTEXT_CHANGED:
-+ g_signal_emit_by_name( G_OBJECT( mpAccessible ), "property_change::accessible-hypertext-offset");
-+ break;
-+
-+ default:
-+ g_warning( "Unknown event notification" );
-+ break;
-+ }
-+}
-Index: vcl/unx/gtk/a11y/atklistener.hxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atklistener.hxx
-diff -N vcl/unx/gtk/a11y/atklistener.hxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atklistener.hxx 15 Feb 2006 10:59:24 -0000 1.1.2.7
-@@ -0,0 +1,92 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#ifndef _ATK_LISTENER_HXX_
-+#define _ATK_LISTENER_HXX_
-+
-+#ifndef _COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLEEVENTLISTENER_HPP_
-+#include <com/sun/star/accessibility/XAccessibleEventListener.hpp>
-+#endif
-+
-+#ifndef _CPPUHELPER_IMPLBASE1_HXX_
-+#include <cppuhelper/implbase1.hxx>
-+#endif
-+
-+#include <vector>
-+
-+#include "atkwrapper.hxx"
-+
-+typedef std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > > AccessibleVector;
-+
-+class AtkListener : public ::cppu::WeakImplHelper1< ::com::sun::star::accessibility::XAccessibleEventListener >
-+{
-+public:
-+ AtkListener(AtkObjectWrapper * pWrapper);
-+
-+ // XEventListener
-+ virtual void disposing( const ::com::sun::star::lang::EventObject& Source )
-+ throw (::com::sun::star::uno::RuntimeException);
-+
-+ // XAccessibleEventListener
-+ virtual void notifyEvent( const ::com::sun::star::accessibility::AccessibleEventObject& aEvent )
-+ throw( ::com::sun::star::uno::RuntimeException );
-+
-+ AtkObject *mpAccessible;
-+ AccessibleVector m_aChildList;
-+
-+private:
-+
-+ virtual ~AtkListener();
-+
-+ // Updates the child list held to provide the old IndexInParent on children_changed::remove
-+ void updateChildList(::com::sun::star::accessibility::XAccessibleContext* pContext);
-+
-+ // Process CHILD_EVENT notifications with a new child added
-+ void handleChildAdded(
-+ const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext >& rxParent,
-+ const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible>& rxChild);
-+
-+ // Process CHILD_EVENT notifications with a child removed
-+ void handleChildRemoved(
-+ const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext >& rxParent,
-+ const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible>& rxChild);
-+
-+ // Process INVALIDATE_ALL_CHILDREN notification
-+ void handleInvalidateChildren(
-+ const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext >& rxParent);
-+};
-+
-+#endif /* _ATK_LISTENER_HXX_ */
-+
-Index: vcl/unx/gtk/a11y/atkselection.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkselection.cxx
-diff -N vcl/unx/gtk/a11y/atkselection.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkselection.cxx 15 Feb 2006 10:59:24 -0000 1.1.2.6
-@@ -0,0 +1,200 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include "atkwrapper.hxx"
-+
-+#include <com/sun/star/accessibility/XAccessibleSelection.hpp>
-+
-+#include <stdio.h>
-+
-+using namespace ::com::sun::star;
-+
-+static accessibility::XAccessibleSelection*
-+ getSelection( AtkSelection *pSelection ) throw (uno::RuntimeException)
-+{
-+ AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pSelection );
-+ if( pWrap )
-+ {
-+ if( !pWrap->mpSelection && pWrap->mpContext )
-+ {
-+ uno::Any any = pWrap->mpContext->queryInterface( accessibility::XAccessibleSelection::static_type(NULL) );
-+ pWrap->mpSelection = reinterpret_cast< accessibility::XAccessibleSelection * > (any.pReserved);
-+ pWrap->mpSelection->acquire();
-+ }
-+
-+ return pWrap->mpSelection;
-+ }
-+
-+ return NULL;
-+}
-+
-+extern "C" {
-+
-+static gboolean
-+selection_add_selection( AtkSelection *selection,
-+ gint i )
-+{
-+ try {
-+ accessibility::XAccessibleSelection* pSelection = getSelection( selection );
-+ if( pSelection )
-+ {
-+ pSelection->selectAccessibleChild( i );
-+ return TRUE;
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in selectAccessibleChild()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+static gboolean
-+selection_clear_selection( AtkSelection *selection )
-+{
-+ try {
-+ accessibility::XAccessibleSelection* pSelection = getSelection( selection );
-+ if( pSelection )
-+ {
-+ pSelection->clearAccessibleSelection();
-+ return TRUE;
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in selectAccessibleChild()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+static AtkObject*
-+selection_ref_selection( AtkSelection *selection,
-+ gint i )
-+{
-+ try {
-+ accessibility::XAccessibleSelection* pSelection = getSelection( selection );
-+ if( pSelection )
-+ return atk_object_wrapper_ref( pSelection->getSelectedAccessibleChild( i ) );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getSelectedAccessibleChild()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+static gint
-+selection_get_selection_count( AtkSelection *selection)
-+{
-+ try {
-+ accessibility::XAccessibleSelection* pSelection = getSelection( selection );
-+ if( pSelection )
-+ return pSelection->getSelectedAccessibleChildCount();
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getSelectedAccessibleChildCount()" );
-+ }
-+
-+ return -1;
-+}
-+
-+static gboolean
-+selection_is_child_selected( AtkSelection *selection,
-+ gint i)
-+{
-+ try {
-+ accessibility::XAccessibleSelection* pSelection = getSelection( selection );
-+ if( pSelection )
-+ return pSelection->isAccessibleChildSelected( i );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getSelectedAccessibleChildCount()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+static gboolean
-+selection_remove_selection( AtkSelection *selection,
-+ gint i )
-+{
-+ try {
-+ accessibility::XAccessibleSelection* pSelection = getSelection( selection );
-+ if( pSelection )
-+ {
-+ pSelection->deselectAccessibleChild( i );
-+ return TRUE;
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getSelectedAccessibleChildCount()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+static gboolean
-+selection_select_all_selection( AtkSelection *selection)
-+{
-+ try {
-+ accessibility::XAccessibleSelection* pSelection = getSelection( selection );
-+ if( pSelection )
-+ {
-+ pSelection->selectAllAccessibleChildren();
-+ return TRUE;
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getSelectedAccessibleChildCount()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+} // extern "C"
-+
-+void
-+selectionIfaceInit( AtkSelectionIface *iface)
-+{
-+ g_return_if_fail (iface != NULL);
-+
-+ iface->add_selection = selection_add_selection;
-+ iface->clear_selection = selection_clear_selection;
-+ iface->ref_selection = selection_ref_selection;
-+ iface->get_selection_count = selection_get_selection_count;
-+ iface->is_child_selected = selection_is_child_selected;
-+ iface->remove_selection = selection_remove_selection;
-+ iface->select_all_selection = selection_select_all_selection;
-+}
-Index: vcl/unx/gtk/a11y/atktable.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atktable.cxx
-diff -N vcl/unx/gtk/a11y/atktable.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atktable.cxx 15 Feb 2006 10:58:28 -0000 1.1.2.7
-@@ -0,0 +1,737 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include "atkwrapper.hxx"
-+
-+#include <com/sun/star/accessibility/XAccessibleTable.hpp>
-+
-+#ifdef ENABLE_TRACING
-+#include <stdio.h>
-+#endif
-+
-+using namespace ::com::sun::star;
-+
-+static inline AtkObject *
-+atk_object_wrapper_conditional_ref( const uno::Reference< accessibility::XAccessible >& rxAccessible )
-+{
-+#ifdef ENABLE_TRACING
-+ fprintf( stderr, ": %p\n", rxAccessible.get() );
-+#endif
-+
-+ if( rxAccessible.is() )
-+ return atk_object_wrapper_ref( rxAccessible );
-+
-+ return NULL;
-+}
-+
-+/*****************************************************************************/
-+
-+// FIXME
-+static G_CONST_RETURN gchar *
-+getAsConst( rtl::OUString rString )
-+{
-+ static const int nMax = 10;
-+ static rtl::OString aUgly[nMax];
-+ static int nIdx = 0;
-+ nIdx = (nIdx + 1) % nMax;
-+ aUgly[nIdx] = rtl::OUStringToOString( rString, RTL_TEXTENCODING_UTF8 );
-+ return aUgly[ nIdx ];
-+}
-+
-+/*****************************************************************************/
-+
-+static accessibility::XAccessibleTable*
-+ getTable( AtkTable *pTable ) throw (uno::RuntimeException)
-+{
-+ AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pTable );
-+ if( pWrap )
-+ {
-+ if( !pWrap->mpTable && pWrap->mpContext )
-+ {
-+ uno::Any any = pWrap->mpContext->queryInterface( accessibility::XAccessibleTable::static_type(NULL) );
-+ pWrap->mpTable = reinterpret_cast< accessibility::XAccessibleTable * > (any.pReserved);
-+ pWrap->mpTable->acquire();
-+ }
-+
-+ return pWrap->mpTable;
-+ }
-+
-+ return NULL;
-+}
-+
-+/*****************************************************************************/
-+
-+extern "C" {
-+
-+static AtkObject*
-+table_wrapper_ref_at (AtkTable *table,
-+ gint row,
-+ gint column)
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "getAccessibleCellAt( %u, %u ) returns", row, column );
-+
-+ if( column >= 255 )
-+ fprintf(stderr, "getAccessibleCellAt( %u, %u ) returns", row, column );
-+
-+#endif
-+
-+ if( pTable )
-+ return atk_object_wrapper_conditional_ref( pTable->getAccessibleCellAt( row, column ) );
-+ }
-+
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleCellAt()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+/*****************************************************************************/
-+
-+static gint
-+table_wrapper_get_index_at (AtkTable *table,
-+ gint row,
-+ gint column)
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "getAccessibleIndex( %u, %u ) returns %u\n",
-+ row, column, pTable->getAccessibleIndex( row, column ) );
-+#endif
-+
-+ if( pTable )
-+ return pTable->getAccessibleIndex( row, column );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleIndex()" );
-+ }
-+
-+ return -1;
-+}
-+
-+/*****************************************************************************/
-+
-+static gint
-+table_wrapper_get_column_at_index (AtkTable *table,
-+ gint nIndex)
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "getAccessibleColumn( %u ) returns %u\n",
-+ nIndex, pTable->getAccessibleColumn( nIndex ) );
-+#endif
-+
-+ if( pTable )
-+ return pTable->getAccessibleColumn( nIndex );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleColumn()" );
-+ }
-+
-+ return -1;
-+}
-+
-+/*****************************************************************************/
-+
-+static gint
-+table_wrapper_get_row_at_index( AtkTable *table,
-+ gint nIndex )
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "getAccessibleRow( %u ) returns %u\n",
-+ nIndex, pTable->getAccessibleRow( nIndex ) );
-+#endif
-+
-+ if( pTable )
-+ return pTable->getAccessibleRow( nIndex );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleRow()" );
-+ }
-+
-+ return -1;
-+}
-+
-+/*****************************************************************************/
-+
-+static gint
-+table_wrapper_get_n_columns( AtkTable *table )
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "XAccessibleTable::getAccessibleColumnCount returns %u\n",
-+ pTable->getAccessibleColumnCount() );
-+#endif
-+
-+ if( pTable )
-+ return pTable->getAccessibleColumnCount();
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleColumnCount()" );
-+ }
-+
-+ return -1;
-+}
-+
-+/*****************************************************************************/
-+
-+static gint
-+table_wrapper_get_n_rows( AtkTable *table )
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "getAccessibleRowCount() returns %u\n",
-+ pTable->getAccessibleRowCount() );
-+#endif
-+
-+ if( pTable )
-+ return pTable->getAccessibleRowCount();
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleRowCount()" );
-+ }
-+
-+ return -1;
-+}
-+
-+/*****************************************************************************/
-+
-+static gint
-+table_wrapper_get_column_extent_at( AtkTable *table,
-+ gint row,
-+ gint column )
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "getAccessibleColumnExtentAt( %u, %u ) returns %u\n",
-+ row, column, pTable->getAccessibleColumnExtentAt( row, column ) );
-+#endif
-+
-+ if( pTable )
-+ return pTable->getAccessibleColumnExtentAt( row, column );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleColumnExtentAt()" );
-+ }
-+
-+ return -1;
-+}
-+
-+/*****************************************************************************/
-+
-+static gint
-+table_wrapper_get_row_extent_at( AtkTable *table,
-+ gint row,
-+ gint column )
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "getAccessibleRowExtentAt( %u, %u ) returns %u\n",
-+ row, column, pTable->getAccessibleRowExtentAt( row, column ) );
-+#endif
-+
-+ if( pTable )
-+ return pTable->getAccessibleRowExtentAt( row, column );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleRowExtentAt()" );
-+ }
-+
-+ return -1;
-+}
-+
-+/*****************************************************************************/
-+
-+static AtkObject *
-+table_wrapper_get_caption( AtkTable *table )
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "getAccessibleCaption() returns" );
-+#endif
-+
-+ if( pTable )
-+ return atk_object_wrapper_conditional_ref( pTable->getAccessibleCaption() );
-+ }
-+
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleCaption()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+/*****************************************************************************/
-+
-+static G_CONST_RETURN gchar *
-+table_wrapper_get_row_description( AtkTable *table,
-+ gint row )
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "getAccessibleRowDescription( %u ) returns %s\n",
-+ row, getAsConst( pTable->getAccessibleRowDescription( row ) ) );
-+#endif
-+
-+ if( pTable )
-+ return getAsConst( pTable->getAccessibleRowDescription( row ) );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleRowDescription()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+/*****************************************************************************/
-+
-+static G_CONST_RETURN gchar *
-+table_wrapper_get_column_description( AtkTable *table,
-+ gint column )
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "getAccessibleColumnDescription( %u ) returns %s\n",
-+ column, getAsConst( pTable->getAccessibleColumnDescription( column ) ) );
-+#endif
-+
-+ if( pTable )
-+ return getAsConst( pTable->getAccessibleColumnDescription( column ) );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleColumnDescription()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+/*****************************************************************************/
-+
-+static AtkObject *
-+table_wrapper_get_row_header( AtkTable *table,
-+ gint row )
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+ if( pTable )
-+ {
-+ uno::Reference< accessibility::XAccessibleTable > xRowHeaders( pTable->getAccessibleRowHeaders() );
-+
-+#ifdef ENABLE_TRACING
-+ if( xRowHeaders.is() )
-+ fprintf(stderr, "getAccessibleRowHeader( %u )->getAccessibleCellAt( 0, %u ) returns",
-+ row, row );
-+ else
-+ fprintf(stderr, "getAccessibleRowHeader( %u ) returns %p\n", row, xRowHeaders.get() );
-+#endif
-+
-+ if( xRowHeaders.is() )
-+ return atk_object_wrapper_conditional_ref( xRowHeaders->getAccessibleCellAt( row, 0 ) );
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleRowHeaders()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+/*****************************************************************************/
-+
-+static AtkObject *
-+table_wrapper_get_column_header( AtkTable *table,
-+ gint column )
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+ if( pTable )
-+ {
-+ uno::Reference< accessibility::XAccessibleTable > xColumnHeaders( pTable->getAccessibleColumnHeaders() );
-+
-+#ifdef ENABLE_TRACING
-+ if( xColumnHeaders.is() )
-+ fprintf(stderr, "getAccessibleColumnHeader( %u )->getAccessibleCellAt( 0, %u ) returns",
-+ column, column );
-+ else
-+ fprintf(stderr, "getAccessibleColumnHeader( %u ) returns %p\n", column, xColumnHeaders.get() );
-+#endif
-+
-+ if( xColumnHeaders.is() )
-+ return atk_object_wrapper_conditional_ref( xColumnHeaders->getAccessibleCellAt( 0, column ) );
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleColumnHeaders()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+/*****************************************************************************/
-+
-+static AtkObject *
-+table_wrapper_get_summary( AtkTable *table )
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "getAccessibleSummary() returns" );
-+#endif
-+
-+ if( pTable )
-+ {
-+ // FIXME: Summary ??
-+ AtkObject* summary;
-+ return atk_object_wrapper_conditional_ref( pTable->getAccessibleSummary() );
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleSummary()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+/*****************************************************************************/
-+
-+static gint
-+convertToGIntArray( const uno::Sequence< ::sal_Int32 >& aSequence, gint **pSelected )
-+{
-+ if( aSequence.getLength() )
-+ {
-+ *pSelected = g_new( gint, aSequence.getLength() );
-+
-+ for( sal_Int32 i = 0; i < aSequence.getLength(); i++ )
-+ (*pSelected) [i] = aSequence[i];
-+ }
-+
-+ return aSequence.getLength();
-+}
-+
-+/*****************************************************************************/
-+
-+static gint
-+table_wrapper_get_selected_columns( AtkTable *table,
-+ gint **pSelected )
-+{
-+ *pSelected = NULL;
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "getSelectedAccessibleColumns() \n" );
-+#endif
-+
-+ if( pTable )
-+ return convertToGIntArray( pTable->getSelectedAccessibleColumns(), pSelected );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getSelectedAccessibleColumns()" );
-+ }
-+
-+ return 0;
-+}
-+
-+/*****************************************************************************/
-+
-+static gint
-+table_wrapper_get_selected_rows( AtkTable *table,
-+ gint **pSelected )
-+{
-+ *pSelected = NULL;
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "getSelectedAccessibleRows() \n" );
-+#endif
-+
-+ if( pTable )
-+ return convertToGIntArray( pTable->getSelectedAccessibleRows(), pSelected );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getSelectedAccessibleRows()" );
-+ }
-+
-+ return 0;
-+}
-+
-+/*****************************************************************************/
-+
-+static gboolean
-+table_wrapper_is_column_selected( AtkTable *table,
-+ gint column )
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "isAccessibleColumnSelected( %u ) returns %s\n",
-+ column, pTable->isAccessibleColumnSelected( column ) ? "true" : "false" );
-+#endif
-+
-+ if( pTable )
-+ return pTable->isAccessibleColumnSelected( column );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in isAccessibleColumnSelected()" );
-+ }
-+
-+ return 0;
-+}
-+
-+/*****************************************************************************/
-+
-+static gboolean
-+table_wrapper_is_row_selected( AtkTable *table,
-+ gint row )
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "isAccessibleRowSelected( %u ) returns %s\n",
-+ row, pTable->isAccessibleRowSelected( row ) ? "true" : "false" );
-+#endif
-+
-+ if( pTable )
-+ return pTable->isAccessibleRowSelected( row );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in isAccessibleRowSelected()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+/*****************************************************************************/
-+
-+static gboolean
-+table_wrapper_is_selected( AtkTable *table,
-+ gint row,
-+ gint column )
-+{
-+ try {
-+ accessibility::XAccessibleTable* pTable = getTable( table );
-+
-+#ifdef ENABLE_TRACING
-+ if( pTable )
-+ fprintf(stderr, "isAccessibleSelected( %u, %u ) returns %s\n",
-+ row, column, pTable->isAccessibleSelected( row , column ) ? "true" : "false" );
-+#endif
-+
-+ if( pTable )
-+ return pTable->isAccessibleSelected( row, column );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in isAccessibleSelected()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+/*****************************************************************************/
-+
-+static gboolean
-+table_wrapper_add_row_selection( AtkTable *table,
-+ gint row )
-+{
-+ g_warning( "FIXME: no simple analogue for add_row_selection" );
-+ return 0;
-+}
-+
-+
-+/*****************************************************************************/
-+
-+static gboolean
-+table_wrapper_remove_row_selection( AtkTable *table,
-+ gint row )
-+{
-+ g_warning( "FIXME: no simple analogue for remove_row_selection" );
-+ return 0;
-+}
-+
-+/*****************************************************************************/
-+
-+static gboolean
-+table_wrapper_add_column_table( AtkTable *table,
-+ gint column )
-+{
-+ g_warning( "FIXME: no simple analogue for add_column_table" );
-+ return 0;
-+}
-+
-+/*****************************************************************************/
-+
-+static gboolean
-+table_wrapper_remove_column_table( AtkTable *table,
-+ gint column)
-+{
-+ g_warning( "FIXME: no simple analogue for remove_column_table" );
-+ return 0;
-+}
-+
-+/*****************************************************************************/
-+
-+static void
-+table_wrapper_set_caption( AtkTable *table,
-+ AtkObject *caption )
-+{ // meaningless helper
-+}
-+
-+/*****************************************************************************/
-+
-+static void
-+table_wrapper_set_column_description( AtkTable *table,
-+ gint column,
-+ const gchar *description )
-+{ // meaningless helper
-+}
-+
-+
-+/*****************************************************************************/
-+
-+static void
-+table_wrapper_set_column_header( AtkTable *table,
-+ gint column,
-+ AtkObject *header )
-+{ // meaningless helper
-+}
-+
-+
-+/*****************************************************************************/
-+
-+static void
-+table_wrapper_set_row_description( AtkTable *table,
-+ gint row,
-+ const gchar *description )
-+{ // meaningless helper
-+}
-+
-+/*****************************************************************************/
-+
-+static void
-+table_wrapper_set_row_header( AtkTable *table,
-+ gint row,
-+ AtkObject *header )
-+{ // meaningless helper
-+}
-+
-+/*****************************************************************************/
-+
-+static void
-+table_wrapper_set_summary( AtkTable *table,
-+ AtkObject *accessible )
-+{ // meaningless helper
-+}
-+
-+/*****************************************************************************/
-+
-+} // extern "C"
-+
-+void
-+tableIfaceInit (AtkTableIface *iface)
-+{
-+ g_return_if_fail (iface != NULL);
-+
-+ iface->ref_at = table_wrapper_ref_at;
-+ iface->get_n_rows = table_wrapper_get_n_rows;
-+ iface->get_n_columns = table_wrapper_get_n_columns;
-+ iface->get_index_at = table_wrapper_get_index_at;
-+ iface->get_column_at_index = table_wrapper_get_column_at_index;
-+ iface->get_row_at_index = table_wrapper_get_row_at_index;
-+ iface->is_row_selected = table_wrapper_is_row_selected;
-+ iface->is_selected = table_wrapper_is_selected;
-+ iface->get_selected_rows = table_wrapper_get_selected_rows;
-+ iface->add_row_selection = table_wrapper_add_row_selection;
-+ iface->remove_row_selection = table_wrapper_remove_row_selection;
-+ iface->get_column_extent_at = table_wrapper_get_column_extent_at;
-+ iface->get_row_extent_at = table_wrapper_get_row_extent_at;
-+ iface->get_row_header = table_wrapper_get_row_header;
-+ iface->set_row_header = table_wrapper_set_row_header;
-+ iface->get_column_header = table_wrapper_get_column_header;
-+ iface->set_column_header = table_wrapper_set_column_header;
-+ iface->get_caption = table_wrapper_get_caption;
-+ iface->set_caption = table_wrapper_set_caption;
-+ iface->get_summary = table_wrapper_get_summary;
-+ iface->set_summary = table_wrapper_set_summary;
-+ iface->get_row_description = table_wrapper_get_row_description;
-+ iface->set_row_description = table_wrapper_set_row_description;
-+ iface->get_column_description = table_wrapper_get_column_description;
-+ iface->set_column_description = table_wrapper_set_column_description;
-+}
-Index: vcl/unx/gtk/a11y/atktext.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atktext.cxx
-diff -N vcl/unx/gtk/a11y/atktext.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atktext.cxx 15 Feb 2006 10:59:25 -0000 1.1.2.12
-@@ -0,0 +1,547 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include "atkwrapper.hxx"
-+#include "atktextattributes.hxx"
-+
-+#include <com/sun/star/accessibility/AccessibleTextType.hpp>
-+#include <com/sun/star/accessibility/TextSegment.hpp>
-+#include <com/sun/star/accessibility/XAccessibleText.hpp>
-+
-+using namespace ::com::sun::star;
-+
-+static sal_Int16
-+text_type_from_boundary(AtkTextBoundary boundary_type)
-+{
-+ switch(boundary_type)
-+ {
-+ case ATK_TEXT_BOUNDARY_CHAR:
-+ return accessibility::AccessibleTextType::CHARACTER;
-+ case ATK_TEXT_BOUNDARY_WORD_START:
-+ case ATK_TEXT_BOUNDARY_WORD_END:
-+ return accessibility::AccessibleTextType::WORD;
-+ case ATK_TEXT_BOUNDARY_SENTENCE_START:
-+ case ATK_TEXT_BOUNDARY_SENTENCE_END:
-+ return accessibility::AccessibleTextType::SENTENCE;
-+ case ATK_TEXT_BOUNDARY_LINE_START:
-+ case ATK_TEXT_BOUNDARY_LINE_END:
-+ return accessibility::AccessibleTextType::LINE;
-+ default:
-+ return -1;
-+ }
-+}
-+
-+/*****************************************************************************/
-+
-+static gchar *
-+adjust_boundaries( accessibility::XAccessibleText* pText,
-+ accessibility::TextSegment& rTextSegment,
-+ AtkTextBoundary boundary_type,
-+ gint * start_offset, gint * end_offset )
-+{
-+ accessibility::TextSegment aTextSegment;
-+ rtl::OUString aString;
-+ gint start = 0, end = 0;
-+
-+ if( rTextSegment.SegmentText.getLength() > 0 )
-+ {
-+ switch(boundary_type)
-+ {
-+ case ATK_TEXT_BOUNDARY_CHAR:
-+ start = rTextSegment.SegmentStart;
-+ end = rTextSegment.SegmentEnd;
-+ aString = rTextSegment.SegmentText;
-+ break;
-+
-+ case ATK_TEXT_BOUNDARY_WORD_START:
-+ case ATK_TEXT_BOUNDARY_SENTENCE_START:
-+ case ATK_TEXT_BOUNDARY_LINE_START:
-+ start = rTextSegment.SegmentStart;
-+
-+ // Determine the start index of the next segment
-+ aTextSegment = pText->getTextBehindIndex(rTextSegment.SegmentEnd,
-+ text_type_from_boundary(boundary_type));
-+ if( aTextSegment.SegmentText.getLength() > 0 )
-+ end = aTextSegment.SegmentStart - 1;
-+ else
-+ end = pText->getCharacterCount();
-+
-+ aString = pText->getTextRange(start, end);
-+ break;
-+
-+ case ATK_TEXT_BOUNDARY_WORD_END:
-+ case ATK_TEXT_BOUNDARY_SENTENCE_END:
-+ case ATK_TEXT_BOUNDARY_LINE_END:
-+ end = rTextSegment.SegmentEnd;
-+
-+ // Determine the end index of the previous segment
-+ aTextSegment = pText->getTextBeforeIndex(rTextSegment.SegmentStart,
-+ text_type_from_boundary(boundary_type));
-+ if( aTextSegment.SegmentText.getLength() > 0 )
-+ start = aTextSegment.SegmentEnd + 1;
-+ else
-+ start = 0;
-+
-+ aString = pText->getTextRange(start, end);
-+ break;
-+
-+ default:
-+ return NULL;
-+ }
-+ }
-+
-+ *start_offset = start;
-+ *end_offset = end;
-+ return OUStringToGChar(aString);
-+}
-+
-+/*****************************************************************************/
-+
-+static accessibility::XAccessibleText*
-+ getText( AtkText *pText ) throw (uno::RuntimeException)
-+{
-+ AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pText );
-+ if( pWrap )
-+ {
-+ if( !pWrap->mpText && pWrap->mpContext )
-+ {
-+ uno::Any any = pWrap->mpContext->queryInterface( accessibility::XAccessibleText::static_type(NULL) );
-+ pWrap->mpText = reinterpret_cast< accessibility::XAccessibleText * > (any.pReserved);
-+ pWrap->mpText->acquire();
-+ }
-+
-+ return pWrap->mpText;
-+ }
-+
-+ return NULL;
-+}
-+
-+/*****************************************************************************/
-+
-+extern "C" {
-+
-+static gchar *
-+text_wrapper_get_text (AtkText *text,
-+ gint start_offset,
-+ gint end_offset)
-+{
-+ gchar * ret = NULL;
-+
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ {
-+ rtl::OString aUtf8 = rtl::OUStringToOString( pText->getText(), RTL_TEXTENCODING_UTF8 );
-+ if( -1 == end_offset )
-+ ret = g_strdup( aUtf8.getStr() );
-+ else
-+ ret = g_strndup( aUtf8.getStr() + start_offset, end_offset - start_offset );
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getText()" );
-+ }
-+
-+ return ret;
-+}
-+
-+static gchar *
-+text_wrapper_get_text_after_offset (AtkText *text,
-+ gint offset,
-+ AtkTextBoundary boundary_type,
-+ gint *start_offset,
-+ gint *end_offset)
-+{
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ {
-+ accessibility::TextSegment aTextSegment = pText->getTextBehindIndex(offset, text_type_from_boundary(boundary_type));
-+ return adjust_boundaries(pText, aTextSegment, boundary_type, start_offset, end_offset);
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in get_text_after_offset()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+static gchar *
-+text_wrapper_get_text_at_offset (AtkText *text,
-+ gint offset,
-+ AtkTextBoundary boundary_type,
-+ gint *start_offset,
-+ gint *end_offset)
-+{
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ {
-+ accessibility::TextSegment aTextSegment = pText->getTextAtIndex(offset, text_type_from_boundary(boundary_type));
-+ return adjust_boundaries(pText, aTextSegment, boundary_type, start_offset, end_offset);
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in get_text_at_offset()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+static gunichar
-+text_wrapper_get_character_at_offset (AtkText *text,
-+ gint offset)
-+{
-+ gint start, end;
-+ gunichar uc = 0;
-+
-+ gchar * char_as_string =
-+ text_wrapper_get_text_at_offset(text, offset, ATK_TEXT_BOUNDARY_CHAR,
-+ &start, &end);
-+ if( char_as_string )
-+ {
-+ uc = g_utf8_get_char( char_as_string );
-+ g_free( char_as_string );
-+ }
-+
-+ return uc;
-+}
-+
-+static gchar *
-+text_wrapper_get_text_before_offset (AtkText *text,
-+ gint offset,
-+ AtkTextBoundary boundary_type,
-+ gint *start_offset,
-+ gint *end_offset)
-+{
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ {
-+ accessibility::TextSegment aTextSegment = pText->getTextBeforeIndex(offset, text_type_from_boundary(boundary_type));
-+ return adjust_boundaries(pText, aTextSegment, boundary_type, start_offset, end_offset);
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in text_before_offset()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+static gint
-+text_wrapper_get_caret_offset (AtkText *text)
-+{
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ return pText->getCaretPosition();
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getCaretPosition()" );
-+ }
-+
-+ return -1;
-+}
-+
-+static gboolean
-+text_wrapper_set_caret_offset (AtkText *text,
-+ gint offset)
-+{
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ return pText->setCaretPosition( offset );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in setCaretPosition()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+static AtkAttributeSet *
-+text_wrapper_get_run_attributes( AtkText *text,
-+ gint offset,
-+ gint *start_offset,
-+ gint *end_offset)
-+{
-+ AtkAttributeSet *pSet = NULL;
-+
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ {
-+ uno::Sequence< beans::PropertyValue > aAttributeList =
-+ pText->getCharacterAttributes( offset, uno::Sequence< rtl::OUString > () );
-+
-+ pSet = attribute_set_new_from_property_values( aAttributeList, beans::PropertyState_DIRECT_VALUE );
-+
-+ accessibility::TextSegment aTextSegment =
-+ pText->getTextAtIndex(offset, accessibility::AccessibleTextType::ATTRIBUTE_RUN);
-+
-+ *start_offset = aTextSegment.SegmentStart;
-+ *end_offset = aTextSegment.SegmentEnd + 1; // FIXME: TESTME
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+
-+ g_warning( "Exception in get_run_attributes()" );
-+
-+ if( pSet )
-+ {
-+ atk_attribute_set_free( pSet );
-+ pSet = NULL;
-+ }
-+ }
-+
-+ return pSet;
-+}
-+
-+static AtkAttributeSet *
-+text_wrapper_get_default_attributes( AtkText *text )
-+{
-+ // currently there is no way to determine the default values. Maybe getCharacterAttributes
-+ // should return default and direct values ??
-+ g_warning( "FIXME: get_default_attributes unimplemented - needs new UNO API semantic" );
-+ return NULL;
-+}
-+
-+static void
-+text_wrapper_get_character_extents( AtkText *text,
-+ gint offset,
-+ gint *x,
-+ gint *y,
-+ gint *width,
-+ gint *height,
-+ AtkCoordType coords )
-+{
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ {
-+ *x = *y = *width = *height = 0;
-+ awt::Rectangle aRect = pText->getCharacterBounds( offset );
-+
-+ gint origin_x = 0;
-+ gint origin_y = 0;
-+
-+ if( coords == ATK_XY_SCREEN )
-+ {
-+ g_return_if_fail( ATK_IS_COMPONENT( text ) );
-+ atk_component_get_position( ATK_COMPONENT( text ), &origin_x, &origin_y, coords);
-+ }
-+
-+ *x = aRect.X + origin_x;
-+ *y = aRect.Y + origin_y;
-+ *width = aRect.Width;
-+ *height = aRect.Height;
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getCharacterBounds" );
-+ }
-+}
-+
-+static gint
-+text_wrapper_get_character_count (AtkText *text)
-+{
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ return pText->getCharacterCount();
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getCharacterCount" );
-+ }
-+
-+ return 0;
-+}
-+
-+static gint
-+text_wrapper_get_offset_at_point (AtkText *text,
-+ gint x,
-+ gint y,
-+ AtkCoordType coords)
-+{
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ {
-+ gint origin_x = 0;
-+ gint origin_y = 0;
-+
-+ if( coords == ATK_XY_SCREEN )
-+ {
-+ g_return_val_if_fail( ATK_IS_COMPONENT( text ), -1 );
-+ atk_component_get_position( ATK_COMPONENT( text ), &origin_x, &origin_y, coords);
-+ }
-+
-+ return pText->getIndexAtPoint( awt::Point(x - origin_x, y - origin_y) );
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getIndexAtPoint" );
-+ }
-+
-+ return -1;
-+}
-+
-+// FIXME: the whole series of selections API is problematic ...
-+
-+static gint
-+text_wrapper_get_n_selections (AtkText *text)
-+{
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ return ( pText->getSelectionEnd() > pText->getSelectionStart() ) ? 1 : 0;
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getSelectionEnd() or getSelectionStart()" );
-+ }
-+
-+ return 0;
-+}
-+
-+static gchar *
-+text_wrapper_get_selection (AtkText *text,
-+ gint selection_num,
-+ gint *start_offset,
-+ gint *end_offset)
-+{
-+ g_return_val_if_fail( selection_num == 0, FALSE );
-+
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ {
-+ *start_offset = pText->getSelectionStart();
-+ *end_offset = pText->getSelectionEnd();
-+
-+ return OUStringToGChar( pText->getSelectedText() );
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getSelectionEnd(), getSelectionStart() or getSelectedText()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+static gboolean
-+text_wrapper_add_selection (AtkText *text,
-+ gint start_offset,
-+ gint end_offset)
-+{
-+ // FIXME: can we try to be more compatible by expanding an
-+ // existing adjacent selection ?
-+
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ return pText->setSelection( start_offset, end_offset ); // ?
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in setSelection()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+static gboolean
-+text_wrapper_remove_selection (AtkText *text,
-+ gint selection_num)
-+{
-+ g_return_val_if_fail( selection_num == 0, FALSE );
-+
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ return pText->setSelection( 0, 0 ); // ?
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in setSelection()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+static gboolean
-+text_wrapper_set_selection (AtkText *text,
-+ gint selection_num,
-+ gint start_offset,
-+ gint end_offset)
-+{
-+ g_return_val_if_fail( selection_num == 0, FALSE );
-+
-+ try {
-+ accessibility::XAccessibleText* pText = getText( text );
-+ if( pText )
-+ return pText->setSelection( 0, 0 ); // ?
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in setSelection()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+} // extern "C"
-+
-+void
-+textIfaceInit (AtkTextIface *iface)
-+{
-+ g_return_if_fail (iface != NULL);
-+
-+ iface->get_text = text_wrapper_get_text;
-+ iface->get_character_at_offset = text_wrapper_get_character_at_offset;
-+ iface->get_text_before_offset = text_wrapper_get_text_before_offset;
-+ iface->get_text_at_offset = text_wrapper_get_text_at_offset;
-+ iface->get_text_after_offset = text_wrapper_get_text_after_offset;
-+ iface->get_caret_offset = text_wrapper_get_caret_offset;
-+ iface->set_caret_offset = text_wrapper_set_caret_offset;
-+ iface->get_character_count = text_wrapper_get_character_count;
-+ iface->get_n_selections = text_wrapper_get_n_selections;
-+ iface->get_selection = text_wrapper_get_selection;
-+ iface->add_selection = text_wrapper_add_selection;
-+ iface->remove_selection = text_wrapper_remove_selection;
-+ iface->set_selection = text_wrapper_set_selection;
-+ iface->get_run_attributes = text_wrapper_get_run_attributes;
-+ iface->get_default_attributes = text_wrapper_get_default_attributes;
-+ iface->get_character_extents = text_wrapper_get_character_extents;
-+ iface->get_offset_at_point = text_wrapper_get_offset_at_point;
-+}
-Index: vcl/unx/gtk/a11y/atktextattributes.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atktextattributes.cxx
-diff -N vcl/unx/gtk/a11y/atktextattributes.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atktextattributes.cxx 14 Feb 2006 12:42:40 -0000 1.1.2.2
-@@ -0,0 +1,572 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include "atktextattributes.hxx"
-+
-+#include <com/sun/star/awt/FontSlant.hpp>
-+#include <com/sun/star/awt/FontStrikeout.hpp>
-+#include <com/sun/star/awt/FontUnderline.hpp>
-+
-+#include <com/sun/star/style/ParagraphAdjust.hpp>
-+
-+#include <svapp.hxx>
-+#include <outdev.hxx>
-+
-+#include <stdio.h>
-+#include <string.h>
-+
-+using namespace ::com::sun::star;
-+
-+typedef gchar* (* AtkTextAttrFunc) ( const uno::Any& rAny );
-+typedef bool (* TextPropertyValueFunc) ( uno::Any& rAny, const gchar * value );
-+
-+#define STRNCMP_PARAM( s ) s,sizeof( s )-1
-+
-+/*****************************************************************************/
-+
-+static gchar*
-+NullString(const uno::Any& rAny)
-+{
-+ return NULL;
-+}
-+
-+static bool
-+InvalidValue( uno::Any& rAny, const gchar * value )
-+{
-+ return false;
-+}
-+
-+/*****************************************************************************/
-+
-+static gchar*
-+Float2String(const uno::Any& rAny)
-+{
-+ return g_strdup_printf( "%.0f", rAny.get<float>() );
-+}
-+
-+static bool
-+String2Float( uno::Any& rAny, const gchar * value )
-+{
-+ float fval;
-+
-+ if( 1 != sscanf( value, "%f", &fval ) )
-+ return false;
-+
-+ rAny = uno::makeAny( fval );
-+ return true;
-+}
-+
-+/*****************************************************************************/
-+
-+static gchar*
-+Long2String(const uno::Any& rAny)
-+{
-+ return g_strdup_printf( "%d", rAny.get<sal_Int32>() );
-+}
-+
-+static bool
-+String2Long( uno::Any& rAny, const gchar * value )
-+{
-+ sal_Int32 lval;
-+
-+ if( 1 != sscanf( value, "%d", &lval ) )
-+ return false;
-+
-+ rAny = uno::makeAny( lval );
-+ return true;
-+}
-+
-+/*****************************************************************************/
-+
-+static gchar*
-+Color2String(const uno::Any& rAny)
-+{
-+ sal_Int32 nColor = rAny.get<sal_Int32>();
-+
-+ if( nColor != 0xFFFFFFFF ) // AUTOMATIC
-+ {
-+ sal_uInt8 blue = nColor & 0xFF;
-+ sal_uInt8 green = (nColor >> 8) & 0xFF;
-+ sal_uInt8 red = (nColor >> 16) & 0xFF;
-+
-+ return g_strdup_printf( "%u,%u,%u", red, green, blue );
-+ }
-+
-+ return NULL;
-+}
-+
-+static bool
-+String2Color( uno::Any& rAny, const gchar * value )
-+{
-+ sal_uInt8 red, green, blue;
-+
-+ if( 3 != sscanf( value, "%u,%u,%u", &red, &green, &blue ) )
-+ return false;
-+
-+ sal_Int32 nColor = (sal_Int32) blue | ( (sal_Int32) green << 8 ) | ( ( sal_Int32 ) red << 16 );
-+ rAny = uno::makeAny( nColor );
-+ return true;
-+}
-+
-+/*****************************************************************************/
-+
-+static gchar*
-+FontSlant2Style(const uno::Any& rAny)
-+{
-+ const gchar * value = NULL;
-+
-+ switch( rAny.get<awt::FontSlant>() )
-+ {
-+ case awt::FontSlant_NONE:
-+ value = "normal";
-+ break;
-+
-+ case awt::FontSlant_OBLIQUE:
-+ value = "oblique";
-+ break;
-+
-+ case awt::FontSlant_ITALIC:
-+ value = "italic";
-+ break;
-+
-+ case awt::FontSlant_REVERSE_OBLIQUE:
-+ value = "reverse oblique";
-+ break;
-+
-+ case awt::FontSlant_REVERSE_ITALIC:
-+ value = "reverse italic";
-+ break;
-+
-+ default:
-+ break;
-+ }
-+
-+ if( value )
-+ return g_strdup( value );
-+
-+ return NULL;
-+}
-+
-+static bool
-+Style2FontSlant( uno::Any& rAny, const gchar * value )
-+{
-+ awt::FontSlant aFontSlant;
-+
-+ if( strncmp( value, STRNCMP_PARAM( "normal" ) ) )
-+ aFontSlant = awt::FontSlant_NONE;
-+ else if( strncmp( value, STRNCMP_PARAM( "oblique" ) ) )
-+ aFontSlant = awt::FontSlant_OBLIQUE;
-+ else if( strncmp( value, STRNCMP_PARAM( "italic" ) ) )
-+ aFontSlant = awt::FontSlant_ITALIC;
-+ else if( strncmp( value, STRNCMP_PARAM( "reverse oblique" ) ) )
-+ aFontSlant = awt::FontSlant_REVERSE_OBLIQUE;
-+ else if( strncmp( value, STRNCMP_PARAM( "reverse italic" ) ) )
-+ aFontSlant = awt::FontSlant_REVERSE_ITALIC;
-+ else
-+ return false;
-+
-+ rAny = uno::makeAny( aFontSlant );
-+ return true;
-+}
-+
-+/*****************************************************************************/
-+
-+static gchar*
-+Weight2String(const uno::Any& rAny)
-+{
-+ return g_strdup_printf( "%.0f", rAny.get<float>() * 4 );
-+}
-+
-+static bool
-+String2Weight( uno::Any& rAny, const gchar * value )
-+{
-+ float weight;
-+
-+ if( 1 != sscanf( value, "%f", &weight ) )
-+ return false;
-+
-+ rAny = uno::makeAny( weight / 4 );
-+ return true;
-+}
-+
-+
-+/*****************************************************************************/
-+
-+static gchar*
-+Adjust2Justification(const uno::Any& rAny)
-+{
-+ const gchar * value = NULL;
-+
-+ switch( rAny.get<short>() )
-+ {
-+ case style::ParagraphAdjust_LEFT:
-+ value = "left";
-+ break;
-+
-+ case style::ParagraphAdjust_RIGHT:
-+ value = "right";
-+ break;
-+
-+ case style::ParagraphAdjust_BLOCK:
-+ case style::ParagraphAdjust_STRETCH:
-+ value = "fill";
-+ break;
-+
-+ case style::ParagraphAdjust_CENTER:
-+ value = "center";
-+ break;
-+
-+ default:
-+ break;
-+ }
-+
-+ if( value )
-+ return g_strdup( value );
-+
-+ return NULL;
-+}
-+
-+static bool
-+Justification2Adjust( uno::Any& rAny, const gchar * value )
-+{
-+ short nParagraphAdjust;
-+
-+ if( strncmp( value, STRNCMP_PARAM( "left" ) ) )
-+ nParagraphAdjust = style::ParagraphAdjust_LEFT;
-+ else if( strncmp( value, STRNCMP_PARAM( "right" ) ) )
-+ nParagraphAdjust = style::ParagraphAdjust_RIGHT;
-+ else if( strncmp( value, STRNCMP_PARAM( "fill" ) ) )
-+ nParagraphAdjust = style::ParagraphAdjust_BLOCK;
-+ else if( strncmp( value, STRNCMP_PARAM( "center" ) ) )
-+ nParagraphAdjust = style::ParagraphAdjust_CENTER;
-+ else
-+ return false;
-+
-+ rAny = uno::makeAny( nParagraphAdjust );
-+ return true;
-+}
-+
-+/*****************************************************************************/
-+
-+static gchar*
-+Strikeout2String(const uno::Any& rAny)
-+{
-+ sal_Int16 nStrikeout = rAny.get<sal_Int16>();
-+
-+ if( nStrikeout != 3 ) // DONTKNOW
-+ return g_strdup( nStrikeout ? "true" : "false" );
-+
-+ return NULL;
-+}
-+
-+static bool
-+String2Strikeout( uno::Any& rAny, const gchar * value )
-+{
-+ sal_Int16 nStrikeout;
-+
-+ if( strncmp( value, STRNCMP_PARAM( "true" ) ) )
-+ nStrikeout = awt::FontStrikeout::SINGLE;
-+ else if( strncmp( value, STRNCMP_PARAM( "false" ) ) )
-+ nStrikeout = awt::FontStrikeout::NONE;
-+ else
-+ return false;
-+
-+ rAny = uno::makeAny( nStrikeout );
-+ return true;
-+}
-+
-+/*****************************************************************************/
-+
-+static gchar*
-+Underline2String(const uno::Any& rAny)
-+{
-+ const gchar * value = NULL;
-+
-+ switch( rAny.get<short>() )
-+ {
-+ case awt::FontUnderline::NONE:
-+ value = "none";
-+ break;
-+
-+ case awt::FontUnderline::SINGLE:
-+ value = "single";
-+ break;
-+
-+ case awt::FontUnderline::DOUBLE:
-+ value = "double";
-+ break;
-+
-+ default:
-+ break;
-+ }
-+
-+ if( value )
-+ return g_strdup( value );
-+
-+ return NULL;
-+}
-+
-+static bool
-+String2Underline( uno::Any& rAny, const gchar * value )
-+{
-+ short nUnderline;
-+
-+ if( strncmp( value, STRNCMP_PARAM( "none" ) ) )
-+ nUnderline = awt::FontUnderline::NONE;
-+ else if( strncmp( value, STRNCMP_PARAM( "single" ) ) )
-+ nUnderline = awt::FontUnderline::SINGLE;
-+ else if( strncmp( value, STRNCMP_PARAM( "double" ) ) )
-+ nUnderline = awt::FontUnderline::DOUBLE;
-+ else
-+ return false;
-+
-+ rAny = uno::makeAny( nUnderline );
-+ return true;
-+}
-+
-+/*****************************************************************************/
-+
-+static inline Size
-+LogicToPixel( long margin_x, long margin_y )
-+{
-+ OutputDevice * pOutputDevice = Application::GetDefaultDevice();
-+ return pOutputDevice->LogicToPixel( Size( margin_x, margin_y ), MapMode( MAP_100TH_MM ) );
-+}
-+
-+static inline Size
-+PixelToLogic( long margin_x, long margin_y )
-+{
-+ OutputDevice * pOutputDevice = Application::GetDefaultDevice();
-+ return pOutputDevice->PixelToLogic( Size( margin_x, margin_y ), MapMode( MAP_100TH_MM ) );
-+}
-+
-+static gchar*
-+MarginHeight2Pixel(const uno::Any& rAny)
-+{
-+ Size aMargin = LogicToPixel( 0, rAny.get<sal_Int32>() );
-+ return g_strdup_printf( "%d", aMargin.getHeight() );
-+}
-+
-+static bool
-+Pixel2MarginHeight( uno::Any& rAny, const gchar * value )
-+{
-+ sal_Int32 nHeight;
-+
-+ if( 1 != sscanf( value, "%d", &nHeight ) )
-+ return false;
-+
-+ Size aMargin = PixelToLogic( 0, nHeight );
-+ rAny = uno::makeAny( (sal_Int32) aMargin.getHeight() );
-+ return true;
-+}
-+
-+static gchar*
-+MarginWidth2Pixel(const uno::Any& rAny)
-+{
-+ Size aMargin = LogicToPixel( rAny.get<sal_Int32>(), 0 );
-+ return g_strdup_printf( "%d", aMargin.getWidth() );
-+}
-+
-+static bool
-+Pixel2MarginWidth( uno::Any& rAny, const gchar * value )
-+{
-+ sal_Int32 nWidth;
-+
-+ if( 1 != sscanf( value, "%d", &nWidth ) )
-+ return false;
-+
-+ Size aMargin = PixelToLogic( nWidth, 0 );
-+ rAny = uno::makeAny( (sal_Int32) aMargin.getWidth() );
-+ return true;
-+}
-+
-+/*****************************************************************************/
-+
-+struct AtkTextAttrMapping
-+{
-+ const char * name;
-+ AtkTextAttrFunc toAtkTextAttr;
-+ TextPropertyValueFunc toPropertyValue;
-+};
-+
-+const AtkTextAttrMapping g_TextAttrMap[] =
-+{
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_INVALID = 0
-+ { "ParaLeftMargin", MarginWidth2Pixel, Pixel2MarginWidth }, // ATK_TEXT_ATTR_LEFT_MARGIN
-+ { "ParaRightMargin", MarginWidth2Pixel, Pixel2MarginWidth }, // ATK_TEXT_ATTR_RIGHT_MARGIN
-+ { "ParaFirstLineIndent", Long2String, String2Long }, // ATK_TEXT_ATTR_INDENT
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_INVISIBLE
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_EDITABLE
-+ { "ParaTopMargin", MarginHeight2Pixel, Pixel2MarginHeight }, // ATK_TEXT_ATTR_PIXELS_ABOVE_LINES
-+ { "ParaBottomMargin", MarginHeight2Pixel, Pixel2MarginHeight }, // ATK_TEXT_ATTR_PIXELS_BELOW_LINES
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_PIXELS_INSIDE_WRAP
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_BG_FULL_HEIGHT
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_RISE
-+ { "CharUnderline", Underline2String, String2Underline }, // ATK_TEXT_ATTR_UNDERLINE
-+ { "CharStrikeout", Strikeout2String, String2Strikeout }, // ATK_TEXT_ATTR_STRIKETHROUGH
-+ { "CharHeight", Float2String, String2Float }, // ATK_TEXT_ATTR_SIZE
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_SCALE
-+ { "CharWeight", Weight2String, String2Weight }, // ATK_TEXT_ATTR_WEIGHT
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_LANGUAGE
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_FAMILY_NAME
-+ { "CharBackColor", Color2String, String2Color }, // ATK_TEXT_ATTR_BG_COLOR
-+ { "CharColor", Color2String, String2Color }, // ATK_TEXT_ATTR_FG_COLOR
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_BG_STIPPLE
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_FG_STIPPLE
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_WRAP_MODE
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_DIRECTION
-+ { "ParaAdjust", Adjust2Justification, Justification2Adjust }, // ATK_TEXT_ATTR_JUSTIFICATION
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_STRETCH
-+ { "", NullString, InvalidValue }, // ATK_TEXT_ATTR_VARIANT
-+ { "CharPosture", FontSlant2Style, Style2FontSlant } // ATK_TEXT_ATTR_STYLE
-+};
-+
-+//
-+// FIXME !!
-+// "ParaLineSpacing" => ATK_TEXT_ATTR_PIXELS_INSIDE_WRAP ?
-+
-+static const sal_Int32 g_TextAttrMapSize = sizeof( g_TextAttrMap ) / sizeof( AtkTextAttrMapping );
-+
-+/*****************************************************************************/
-+
-+static AtkAttributeSet*
-+attribute_set_prepend( AtkAttributeSet* attribute_set,
-+ AtkTextAttribute attribute,
-+ gchar * value )
-+{
-+ AtkAttribute *at = (AtkAttribute *) g_malloc( sizeof (AtkAttribute) );
-+ at->name = g_strdup( atk_text_attribute_get_name( attribute ) );
-+ at->value = value;
-+
-+ return g_slist_prepend(attribute_set, at);
-+}
-+
-+/*****************************************************************************/
-+
-+AtkAttributeSet*
-+attribute_set_new_from_property_values(
-+ const uno::Sequence< beans::PropertyValue >& rAttributeList,
-+ const beans::PropertyState ePropertyState )
-+{
-+ AtkAttributeSet* attribute_set = NULL;
-+
-+ for( sal_Int32 i = 0; i < rAttributeList.getLength(); i++ )
-+ {
-+ if( rAttributeList[i].State != ePropertyState )
-+ continue;
-+
-+ gint j = 0;
-+ for( ; j < g_TextAttrMapSize; ++j )
-+ {
-+ if( 0 == rAttributeList[i].Name.compareToAscii( g_TextAttrMap[j].name ) )
-+ {
-+ gchar * value = g_TextAttrMap[j].toAtkTextAttr(rAttributeList[i].Value);
-+ if( value )
-+ attribute_set = attribute_set_prepend( attribute_set, static_cast < AtkTextAttribute > (j), value );
-+
-+ break;
-+ }
-+ }
-+
-+/*
-+ if( j == g_TextAttrMapSize )
-+ {
-+ const char * state = "unknown";
-+ switch( rAttributeList[i].State )
-+ {
-+ case beans::PropertyState_DIRECT_VALUE:
-+ state = "direct value";
-+ break;
-+
-+ case beans::PropertyState_DEFAULT_VALUE:
-+ state = "default value";
-+ break;
-+
-+ case beans::PropertyState_AMBIGUOUS_VALUE:
-+ state = "ambigues value";
-+ break;
-+
-+ default:
-+ break;
-+ }
-+
-+ fprintf(stderr, "Property %s (%s)\n", OUStringToOString( rAttributeList[i].Name, RTL_TEXTENCODING_UTF8 ).getStr(), state);
-+ }
-+*/
-+ }
-+
-+ return attribute_set;
-+}
-+
-+/*****************************************************************************/
-+
-+bool
-+attribute_set_map_to_property_values(
-+ AtkAttributeSet* attribute_set,
-+ uno::Sequence< beans::PropertyValue >& rValueList )
-+{
-+ // Ensure enough space ..
-+ uno::Sequence< beans::PropertyValue > aAttributeList (g_TextAttrMapSize);
-+
-+ sal_Int32 nIndex = 0;
-+ for( GSList * item = attribute_set; item != NULL; item = g_slist_next( item ) )
-+ {
-+ AtkAttribute* attribute = (AtkAttribute *) item;
-+
-+ AtkTextAttribute text_attr = atk_text_attribute_for_name( attribute->name );
-+ if( text_attr < g_TextAttrMapSize )
-+ {
-+ if( g_TextAttrMap[text_attr].name[0] != '\0' )
-+ {
-+ if( ! g_TextAttrMap[text_attr].toPropertyValue( aAttributeList[nIndex].Value, attribute->value) )
-+ return false;
-+
-+ aAttributeList[nIndex].Name = rtl::OUString::createFromAscii( g_TextAttrMap[text_attr].name );
-+ aAttributeList[nIndex].State = beans::PropertyState_DIRECT_VALUE;
-+ ++nIndex;
-+ }
-+ }
-+ else
-+ {
-+ // Unsupported text attribute
-+ return false;
-+ }
-+ }
-+
-+ aAttributeList.realloc( nIndex );
-+ rValueList = aAttributeList;
-+ return true;
-+}
-+
-Index: vcl/unx/gtk/a11y/atktextattributes.hxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atktextattributes.hxx
-diff -N vcl/unx/gtk/a11y/atktextattributes.hxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atktextattributes.hxx 22 Dec 2005 08:24:30 -0000 1.1.2.1
-@@ -0,0 +1,60 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#ifndef __ATK_ATKTEXTATTRIBUTES_HXX__
-+#define __ATK_ATKTEXTATTRIBUTES_HXX__
-+
-+#ifndef _COM_SUN_STAR_UNO_SEQUENCE_HXX_
-+#include <com/sun/star/uno/Sequence.hxx>
-+#endif
-+
-+#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_
-+#include <com/sun/star/beans/PropertyValue.hpp>
-+#endif
-+
-+#include <atk/atk.h>
-+
-+AtkAttributeSet*
-+attribute_set_new_from_property_values(
-+ const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& rAttributeList,
-+ const com::sun::star::beans::PropertyState ePropertyState );
-+
-+bool
-+attribute_set_map_to_property_values(
-+ AtkAttributeSet* attribute_set,
-+ com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& rValueList );
-+
-+
-+#endif
-Index: vcl/unx/gtk/a11y/atkutil.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkutil.cxx
-diff -N vcl/unx/gtk/a11y/atkutil.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkutil.cxx 3 Mar 2006 11:07:09 -0000 1.1.2.14
-@@ -0,0 +1,625 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#ifndef _COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLECONTEXT_HPP_
-+#include <com/sun/star/accessibility/XAccessibleContext.hpp>
-+#endif
-+
-+#ifndef _COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLEEVENTBROADCASTER_HPP_
-+#include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
-+#endif
-+
-+#ifndef _COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLESELECTION_HPP_
-+#include <com/sun/star/accessibility/XAccessibleSelection.hpp>
-+#endif
-+
-+#ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEEVENTID_HPP_
-+#include <com/sun/star/accessibility/AccessibleEventId.hpp>
-+#endif
-+
-+#ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLESTATETYPE_HPP_
-+#include <com/sun/star/accessibility/AccessibleStateType.hpp>
-+#endif
-+
-+#ifndef _CPPUHELPER_IMPLBASE1_HXX_
-+#include <cppuhelper/implbase1.hxx>
-+#endif
-+
-+#ifndef _VOS_MUTEX_HXX_
-+#include <vos/mutex.hxx>
-+#endif
-+
-+#ifndef _RTL_REF_HXX_
-+#include <rtl/ref.hxx>
-+#endif
-+
-+#ifndef _SV_SVAPP_HXX
-+#include "svapp.hxx"
-+#endif
-+
-+#include <window.hxx>
-+#include <menu.hxx>
-+
-+#include "atkwrapper.hxx"
-+#include "atkutil.hxx"
-+
-+#include <set>
-+#include <stdio.h>
-+
-+using namespace ::com::sun::star;
-+
-+static AtkObject *last_focused_object = NULL;
-+
-+/*****************************************************************************/
-+
-+extern "C" {
-+
-+static gint
-+atk_wrapper_focus_idle_handler (gpointer data)
-+{
-+ vos::OGuard aGuard( Application::GetSolarMutex() );
-+
-+ if( data == last_focused_object )
-+ atk_focus_tracker_notify( ATK_OBJECT( data ) );
-+
-+ if( data )
-+ g_object_unref( G_OBJECT(data) );
-+
-+ return FALSE;
-+}
-+
-+} // extern "C"
-+
-+/*****************************************************************************/
-+
-+static void
-+atk_wrapper_focus_tracker_notify_when_idle( const uno::Reference< accessibility::XAccessible > &rAccessible )
-+{
-+ AtkObject *accessible = NULL;
-+
-+ if( rAccessible.is() )
-+ accessible = atk_object_wrapper_ref( rAccessible );
-+
-+ last_focused_object = accessible;
-+ g_idle_add (atk_wrapper_focus_idle_handler, accessible);
-+}
-+
-+/*****************************************************************************/
-+
-+class DocumentFocusListener :
-+ public ::cppu::WeakImplHelper1< accessibility::XAccessibleEventListener >
-+{
-+
-+ std::set< uno::Reference< uno::XInterface > > m_aRefList;
-+
-+public:
-+ void attachRecursive(
-+ const uno::Reference< accessibility::XAccessible >& xAccessible
-+ ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException);
-+
-+ void attachRecursive(
-+ const uno::Reference< accessibility::XAccessible >& xAccessible,
-+ const uno::Reference< accessibility::XAccessibleContext >& xContext
-+ ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException);
-+
-+ void attachRecursive(
-+ const uno::Reference< accessibility::XAccessible >& xAccessible,
-+ const uno::Reference< accessibility::XAccessibleContext >& xContext,
-+ const uno::Reference< accessibility::XAccessibleStateSet >& xStateSet
-+ ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException);
-+
-+ void detachRecursive(
-+ const uno::Reference< accessibility::XAccessible >& xAccessible
-+ ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException);
-+
-+ void detachRecursive(
-+ const uno::Reference< accessibility::XAccessible >& xAccessible,
-+ const uno::Reference< accessibility::XAccessibleContext >& xContext
-+ ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException);
-+
-+ void detachRecursive(
-+ const uno::Reference< accessibility::XAccessible >& xAccessible,
-+ const uno::Reference< accessibility::XAccessibleContext >& xContext,
-+ const uno::Reference< accessibility::XAccessibleStateSet >& xStateSet
-+ ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException);
-+
-+ static uno::Reference< accessibility::XAccessible > getAccessible(const lang::EventObject& aEvent )
-+ throw (lang::IndexOutOfBoundsException, uno::RuntimeException);
-+
-+ // XEventListener
-+ virtual void disposing( const lang::EventObject& Source ) throw (uno::RuntimeException);
-+
-+ // XAccessibleEventListener
-+ virtual void notifyEvent( const accessibility::AccessibleEventObject& aEvent ) throw( uno::RuntimeException );
-+};
-+
-+/*****************************************************************************/
-+
-+void DocumentFocusListener::disposing( const lang::EventObject& aEvent )
-+ throw (uno::RuntimeException)
-+{
-+// fprintf(stderr, "In DocumentFocusListener::disposing (%p)\n", this);
-+// fprintf(stderr, "m_aRefList has %d entries\n", m_aRefList.size());
-+
-+ // Unref the object here, but do not remove as listener since the object
-+ // might no longer be in a state that safely allows this.
-+ if( aEvent.Source.is() )
-+ m_aRefList.erase(aEvent.Source);
-+
-+// fprintf(stderr, "m_aRefList has %d entries\n", m_aRefList.size());
-+
-+}
-+
-+/*****************************************************************************/
-+
-+void DocumentFocusListener::notifyEvent( const accessibility::AccessibleEventObject& aEvent )
-+ throw( uno::RuntimeException )
-+{
-+ switch( aEvent.EventId )
-+ {
-+ case accessibility::AccessibleEventId::STATE_CHANGED:
-+ try
-+ {
-+ sal_Int16 nState = accessibility::AccessibleStateType::INVALID;
-+ aEvent.NewValue >>= nState;
-+
-+ if( accessibility::AccessibleStateType::FOCUSED == nState )
-+ atk_wrapper_focus_tracker_notify_when_idle( getAccessible(aEvent) );
-+ }
-+ catch(lang::IndexOutOfBoundsException e)
-+ {
-+ g_warning("Focused object has invalid index in parent");
-+ }
-+ break;
-+
-+ case accessibility::AccessibleEventId::CHILD:
-+ {
-+ uno::Reference< accessibility::XAccessible > xChild;
-+ if( (aEvent.OldValue >>= xChild) && xChild.is() )
-+ detachRecursive(xChild);
-+
-+ if( (aEvent.NewValue >>= xChild) && xChild.is() )
-+ attachRecursive(xChild);
-+ }
-+ break;
-+
-+ case accessibility::AccessibleEventId::INVALIDATE_ALL_CHILDREN:
-+/* {
-+ uno::Reference< accessibility::XAccessible > xAccessible( getAccessible(aEvent) );
-+ detachRecursive(xAccessible);
-+ attachRecursive(xAccessible);
-+ }
-+*/
-+ fprintf(stderr, "Invalidate all children called\n" );
-+ break;
-+ default:
-+ break;
-+ }
-+}
-+
-+/*****************************************************************************/
-+
-+uno::Reference< accessibility::XAccessible > DocumentFocusListener::getAccessible(const lang::EventObject& aEvent )
-+ throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
-+{
-+ uno::Reference< accessibility::XAccessible > xAccessible(aEvent.Source, uno::UNO_QUERY);
-+
-+ if( xAccessible.is() )
-+ return xAccessible;
-+
-+ uno::Reference< accessibility::XAccessibleContext > xContext(aEvent.Source, uno::UNO_QUERY);
-+
-+ if( xContext.is() )
-+ {
-+ uno::Reference< accessibility::XAccessible > xParent( xContext->getAccessibleParent() );
-+ if( xParent.is() )
-+ {
-+ uno::Reference< accessibility::XAccessibleContext > xParentContext( xParent->getAccessibleContext() );
-+ if( xParentContext.is() )
-+ {
-+ return xParentContext->getAccessibleChild( xContext->getAccessibleIndexInParent() );
-+ }
-+ }
-+ }
-+
-+ return uno::Reference< accessibility::XAccessible >();
-+}
-+
-+/*****************************************************************************/
-+
-+void DocumentFocusListener::attachRecursive(
-+ const uno::Reference< accessibility::XAccessible >& xAccessible
-+) throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
-+{
-+ uno::Reference< accessibility::XAccessibleContext > xContext =
-+ xAccessible->getAccessibleContext();
-+
-+ if( xContext.is() )
-+ attachRecursive(xAccessible, xContext);
-+}
-+
-+/*****************************************************************************/
-+
-+void DocumentFocusListener::attachRecursive(
-+ const uno::Reference< accessibility::XAccessible >& xAccessible,
-+ const uno::Reference< accessibility::XAccessibleContext >& xContext
-+) throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
-+{
-+ uno::Reference< accessibility::XAccessibleStateSet > xStateSet =
-+ xContext->getAccessibleStateSet();
-+
-+ if( xStateSet.is() )
-+ attachRecursive(xAccessible, xContext, xStateSet);
-+}
-+
-+/*****************************************************************************/
-+
-+void DocumentFocusListener::attachRecursive(
-+ const uno::Reference< accessibility::XAccessible >& xAccessible,
-+ const uno::Reference< accessibility::XAccessibleContext >& xContext,
-+ const uno::Reference< accessibility::XAccessibleStateSet >& xStateSet
-+) throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
-+{
-+ if( xStateSet->contains(accessibility::AccessibleStateType::FOCUSED ) )
-+ atk_wrapper_focus_tracker_notify_when_idle( xAccessible );
-+
-+ uno::Reference< accessibility::XAccessibleEventBroadcaster > xBroadcaster =
-+ uno::Reference< accessibility::XAccessibleEventBroadcaster >(xContext, uno::UNO_QUERY);
-+
-+ // If not already done, add the broadcaster to the list and attach as listener.
-+ if( xBroadcaster.is() && m_aRefList.insert(xBroadcaster).second )
-+ xBroadcaster->addEventListener(static_cast< accessibility::XAccessibleEventListener *>(this));
-+
-+ if( ! xStateSet->contains(accessibility::AccessibleStateType::MANAGES_DESCENDANTS ) )
-+ {
-+ sal_Int32 n, nmax = xContext->getAccessibleChildCount();
-+ for( n = 0; n < nmax; n++ )
-+ {
-+ uno::Reference< accessibility::XAccessible > xChild( xContext->getAccessibleChild( n ) );
-+
-+ if( xChild.is() )
-+ attachRecursive(xChild);
-+ }
-+ }
-+}
-+
-+/*****************************************************************************/
-+
-+void DocumentFocusListener::detachRecursive(
-+ const uno::Reference< accessibility::XAccessible >& xAccessible
-+) throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
-+{
-+ uno::Reference< accessibility::XAccessibleContext > xContext =
-+ xAccessible->getAccessibleContext();
-+
-+ if( xContext.is() )
-+ detachRecursive(xAccessible, xContext);
-+}
-+
-+/*****************************************************************************/
-+
-+void DocumentFocusListener::detachRecursive(
-+ const uno::Reference< accessibility::XAccessible >& xAccessible,
-+ const uno::Reference< accessibility::XAccessibleContext >& xContext
-+) throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
-+{
-+ uno::Reference< accessibility::XAccessibleStateSet > xStateSet =
-+ xContext->getAccessibleStateSet();
-+
-+ if( xStateSet.is() )
-+ detachRecursive(xAccessible, xContext, xStateSet);
-+}
-+
-+/*****************************************************************************/
-+
-+void DocumentFocusListener::detachRecursive(
-+ const uno::Reference< accessibility::XAccessible >& xAccessible,
-+ const uno::Reference< accessibility::XAccessibleContext >& xContext,
-+ const uno::Reference< accessibility::XAccessibleStateSet >& xStateSet
-+) throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
-+{
-+ if( ! xStateSet->contains(accessibility::AccessibleStateType::MANAGES_DESCENDANTS ) )
-+ {
-+ sal_Int32 n, nmax = xContext->getAccessibleChildCount();
-+ for( n = 0; n < nmax; n++ )
-+ {
-+ uno::Reference< accessibility::XAccessible > xChild( xContext->getAccessibleChild( n ) );
-+
-+ if( xChild.is() )
-+ detachRecursive(xChild);
-+ }
-+ }
-+
-+ uno::Reference< accessibility::XAccessibleEventBroadcaster > xBroadcaster =
-+ uno::Reference< accessibility::XAccessibleEventBroadcaster >(xContext, uno::UNO_QUERY);
-+
-+ if( xBroadcaster.is() && 0 < m_aRefList.erase(xBroadcaster) )
-+ xBroadcaster->removeEventListener(static_cast< accessibility::XAccessibleEventListener *>(this));
-+}
-+
-+/*****************************************************************************/
-+
-+/*
-+ * page tabs in gtk are widgets, so we need to simulate focus events for those
-+ */
-+
-+static void handle_tabpage_activated(Window *pWindow)
-+{
-+ uno::Reference< accessibility::XAccessible > xAccessible =
-+ pWindow->GetAccessible();
-+
-+ if( ! xAccessible.is() )
-+ return;
-+
-+ uno::Reference< accessibility::XAccessibleSelection > xSelection(
-+ xAccessible->getAccessibleContext(), uno::UNO_QUERY);
-+
-+ if( xSelection.is() )
-+ atk_wrapper_focus_tracker_notify_when_idle( xSelection->getSelectedAccessibleChild(0) );
-+}
-+
-+/*****************************************************************************/
-+
-+static std::set< Window * > g_aWindowList;
-+
-+static void handle_get_focus(::VclWindowEvent const * pEvent)
-+{
-+ static rtl::Reference< DocumentFocusListener > aDocumentFocusListener =
-+ new DocumentFocusListener();
-+
-+ Window *pWindow = pEvent->GetWindow();
-+
-+ // The menu bar is handled through VCLEVENT_MENU_HIGHLIGHTED
-+ if( ! pWindow || !pWindow->IsVisible() || pWindow->GetType() == WINDOW_MENUBARWINDOW )
-+ return;
-+
-+ if( pWindow->GetType() == WINDOW_TABCONTROL )
-+ {
-+ handle_tabpage_activated( pWindow );
-+ return;
-+ }
-+
-+ uno::Reference< accessibility::XAccessible > xAccessible =
-+ pWindow->GetAccessible();
-+
-+ if( ! xAccessible.is() )
-+ return;
-+
-+ uno::Reference< accessibility::XAccessibleContext > xContext =
-+ xAccessible->getAccessibleContext();
-+
-+ if( ! xContext.is() )
-+ return;
-+
-+ uno::Reference< accessibility::XAccessibleStateSet > xStateSet =
-+ xContext->getAccessibleStateSet();
-+
-+ if( ! xStateSet.is() )
-+ return;
-+
-+ if( xStateSet->contains(accessibility::AccessibleStateType::FOCUSED) &&
-+ ( pWindow->GetType() != WINDOW_TREELISTBOX ) )
-+ {
-+ atk_wrapper_focus_tracker_notify_when_idle( xAccessible );
-+ }
-+ else
-+ {
-+ if( g_aWindowList.find(pWindow) == g_aWindowList.end() )
-+ {
-+ g_aWindowList.insert(pWindow);
-+ aDocumentFocusListener->attachRecursive(xAccessible, xContext, xStateSet);
-+ }
-+ }
-+}
-+
-+/*****************************************************************************/
-+
-+static void handle_menu_highlighted(::VclMenuEvent const * pEvent)
-+{
-+ try
-+ {
-+ Menu* pMenu = pEvent->GetMenu();
-+ USHORT nPos = pEvent->GetItemPos();
-+
-+ if( pMenu && nPos != 0xFFFF)
-+ {
-+ uno::Reference< accessibility::XAccessible > xAccessible ( pMenu->GetAccessible() );
-+
-+ if( xAccessible.is() )
-+ {
-+ uno::Reference< accessibility::XAccessibleContext > xContext ( xAccessible->getAccessibleContext() );
-+
-+ if( xContext.is() )
-+ atk_wrapper_focus_tracker_notify_when_idle( xContext->getAccessibleChild( nPos ) );
-+ }
-+ }
-+ }
-+ catch( uno::Exception e )
-+ {
-+ g_warning( "Exception caught processing menu highlight events" );
-+ }
-+}
-+
-+/*****************************************************************************/
-+
-+long WindowEventHandler(void * not_used, ::VclSimpleEvent const * pEvent)
-+{
-+ switch (pEvent->GetId())
-+ {
-+ case VCLEVENT_OBJECT_DYING:
-+// fprintf(stderr, "got VCLEVENT_OBJECT_DYING for %p\n",
-+// static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow());
-+ break;
-+ case VCLEVENT_WINDOW_SHOW:
-+// fprintf(stderr, "got VCLEVENT_WINDOW_SHOW for %p\n",
-+// static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow());
-+ break;
-+ case VCLEVENT_WINDOW_HIDE:
-+// fprintf(stderr, "got VCLEVENT_WINDOW_HIDE for %p\n",
-+// static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow());
-+ break;
-+ case VCLEVENT_WINDOW_CLOSE:
-+// fprintf(stderr, "got VCLEVENT_WINDOW_CLOSE for %p\n",
-+// static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow());
-+ break;
-+ case VCLEVENT_WINDOW_GETFOCUS:
-+ handle_get_focus(static_cast< ::VclWindowEvent const * >(pEvent));
-+ break;
-+ case VCLEVENT_WINDOW_DEACTIVATE:
-+ atk_wrapper_focus_tracker_notify_when_idle(NULL);
-+ break;
-+ case VCLEVENT_WINDOW_LOSEFOCUS:
-+// fprintf(stderr, "got VCLEVENT_WINDOW_LOSEFOCUS for %p\n",
-+// static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow());
-+ break;
-+ case VCLEVENT_WINDOW_MINIMIZE:
-+// fprintf(stderr, "got VCLEVENT_WINDOW_MINIMIZE for %p\n",
-+// static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow());
-+ break;
-+ case VCLEVENT_WINDOW_NORMALIZE:
-+// fprintf(stderr, "got VCLEVENT_WINDOW_NORMALIZE for %p\n",
-+// static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow());
-+ break;
-+ case VCLEVENT_WINDOW_KEYINPUT:
-+ case VCLEVENT_WINDOW_KEYUP:
-+ case VCLEVENT_WINDOW_COMMAND:
-+ break;
-+ /*
-+ fprintf(stderr, "got VCLEVENT_WINDOW_COMMAND (%d) for %p\n",
-+ static_cast< ::CommandEvent const * > (
-+ static_cast< ::VclWindowEvent const * >(pEvent)->GetData())->GetCommand(),
-+ static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow());
-+ */
-+ case VCLEVENT_MENU_HIGHLIGHT:
-+ handle_menu_highlighted(static_cast< ::VclMenuEvent const * >(pEvent));
-+ break;
-+
-+ case VCLEVENT_TABPAGE_ACTIVATE:
-+ handle_tabpage_activated(static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow());
-+ break;
-+ default:
-+ //fprintf(stderr, "got event %d \n", pEvent->GetId());
-+ break;
-+ }
-+ return 0;
-+}
-+
-+static Link g_aEventListenerLink( NULL, (PSTUB) WindowEventHandler );
-+
-+/*****************************************************************************/
-+
-+extern "C" {
-+
-+static G_CONST_RETURN gchar *
-+ooo_atk_util_get_toolkit_name (void)
-+{
-+ return "VCL";
-+}
-+
-+/*****************************************************************************/
-+
-+static G_CONST_RETURN gchar *
-+ooo_atk_util_get_toolkit_version (void)
-+{
-+ /*
-+ * Version is passed in as a -D flag when this file is
-+ * compiled.
-+ */
-+
-+ return VERSION;
-+}
-+
-+/*****************************************************************************/
-+
-+/*
-+ * GObject inheritance
-+ */
-+
-+static void
-+ooo_atk_util_class_init (AtkUtilClass *klass)
-+{
-+ AtkUtilClass *atk_class;
-+ gpointer data;
-+
-+ data = g_type_class_peek (ATK_TYPE_UTIL);
-+ atk_class = ATK_UTIL_CLASS (data);
-+
-+ atk_class->get_toolkit_name = ooo_atk_util_get_toolkit_name;
-+ atk_class->get_toolkit_version = ooo_atk_util_get_toolkit_version;
-+
-+ Application::AddEventListener( g_aEventListenerLink );
-+}
-+
-+} // extern "C"
-+
-+/*****************************************************************************/
-+
-+GType
-+ooo_atk_util_get_type (void)
-+{
-+ static GType type = 0;
-+
-+ if (!type)
-+ {
-+ GType parent_type = g_type_from_name( "GailUtil" );
-+
-+ if( ! parent_type )
-+ {
-+ g_warning( "Unknown type: GailUtil" );
-+ parent_type = ATK_TYPE_UTIL;
-+ }
-+
-+ GTypeQuery type_query;
-+ g_type_query( parent_type, &type_query );
-+
-+ static const GTypeInfo typeInfo =
-+ {
-+ type_query.class_size,
-+ (GBaseInitFunc) NULL,
-+ (GBaseFinalizeFunc) NULL,
-+ (GClassInitFunc) ooo_atk_util_class_init,
-+ (GClassFinalizeFunc) NULL,
-+ NULL,
-+ type_query.instance_size,
-+ 0,
-+ (GInstanceInitFunc) NULL,
-+ } ;
-+
-+ type = g_type_register_static (parent_type, "OOoUtil", &typeInfo, (GTypeFlags)0) ;
-+ }
-+
-+ return type;
-+}
-+
-Index: vcl/unx/gtk/a11y/atkutil.hxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkutil.hxx
-diff -N vcl/unx/gtk/a11y/atkutil.hxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkutil.hxx 5 Jan 2006 14:06:32 -0000 1.1.2.4
-@@ -0,0 +1,45 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#ifndef __ATK_UTIL_HXX__
-+#define __ATK_UTIL_HXX__
-+
-+#include <atk/atk.h>
-+
-+#define OOO_TYPE_ATK_UTIL ooo_atk_util_get_type()
-+
-+GType ooo_atk_util_get_type (void);
-+
-+#endif
-Index: vcl/unx/gtk/a11y/atkvalue.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkvalue.cxx
-diff -N vcl/unx/gtk/a11y/atkvalue.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkvalue.cxx 15 Feb 2006 10:59:25 -0000 1.1.2.4
-@@ -0,0 +1,152 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include "atkwrapper.hxx"
-+
-+#include <com/sun/star/accessibility/XAccessibleValue.hpp>
-+
-+#include <stdio.h>
-+#include <string.h>
-+
-+using namespace ::com::sun::star;
-+
-+static accessibility::XAccessibleValue*
-+ getValue( AtkValue *pValue ) throw (uno::RuntimeException)
-+{
-+ AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pValue );
-+ if( pWrap )
-+ {
-+ if( !pWrap->mpValue && pWrap->mpContext )
-+ {
-+ uno::Any any = pWrap->mpContext->queryInterface( accessibility::XAccessibleValue::static_type(NULL) );
-+ pWrap->mpValue = reinterpret_cast< accessibility::XAccessibleValue * > (any.pReserved);
-+ pWrap->mpValue->acquire();
-+ }
-+
-+ return pWrap->mpValue;
-+ }
-+
-+ return NULL;
-+}
-+
-+static void anyToGValue( uno::Any aAny, GValue *pValue )
-+{
-+ // FIXME: expand to lots of types etc.
-+ double aDouble;
-+ aAny >>= aDouble;
-+
-+ memset( pValue, 0, sizeof( GValue ) );
-+ g_value_init( pValue, G_TYPE_DOUBLE );
-+ g_value_set_double( pValue, aDouble );
-+}
-+
-+extern "C" {
-+
-+static void
-+value_wrapper_get_current_value( AtkValue *value,
-+ GValue *gval )
-+{
-+ try {
-+ accessibility::XAccessibleValue* pValue = getValue( value );
-+ if( pValue )
-+ anyToGValue( pValue->getCurrentValue(), gval );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getCurrentValue()" );
-+ }
-+}
-+
-+static void
-+value_wrapper_get_maximum_value( AtkValue *value,
-+ GValue *gval )
-+{
-+ try {
-+ accessibility::XAccessibleValue* pValue = getValue( value );
-+ if( pValue )
-+ anyToGValue( pValue->getMaximumValue(), gval );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getCurrentValue()" );
-+ }
-+}
-+
-+static void
-+value_wrapper_get_minimum_value( AtkValue *value,
-+ GValue *gval )
-+{
-+ try {
-+ accessibility::XAccessibleValue* pValue = getValue( value );
-+ if( pValue )
-+ anyToGValue( pValue->getMinimumValue(), gval );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getCurrentValue()" );
-+ }
-+}
-+
-+static gboolean
-+value_wrapper_set_current_value( AtkValue *value,
-+ const GValue *gval )
-+{
-+ try {
-+ accessibility::XAccessibleValue* pValue = getValue( value );
-+ if( pValue )
-+ {
-+ // FIXME - this needs expanding
-+ double aDouble = g_value_get_double( gval );
-+ uno::Any aAny;
-+ aAny <<= aDouble;
-+ return pValue->setCurrentValue( aAny );
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getCurrentValue()" );
-+ }
-+
-+ return FALSE;
-+}
-+
-+} // extern "C"
-+
-+void
-+valueIfaceInit (AtkValueIface *iface)
-+{
-+ g_return_if_fail (iface != NULL);
-+
-+ iface->get_current_value = value_wrapper_get_current_value;
-+ iface->get_maximum_value = value_wrapper_get_maximum_value;
-+ iface->get_minimum_value = value_wrapper_get_minimum_value;
-+ iface->set_current_value = value_wrapper_set_current_value;
-+}
-Index: vcl/unx/gtk/a11y/atkwindow.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkwindow.cxx
-diff -N vcl/unx/gtk/a11y/atkwindow.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkwindow.cxx 17 Feb 2006 11:10:56 -0000 1.1.2.3
-@@ -0,0 +1,138 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include "atkwindow.hxx"
-+
-+#include <plugins/gtk/gtkframe.hxx>
-+
-+extern "C" {
-+
-+static void (* window_real_initialize) (AtkObject *obj, gpointer data);
-+static G_CONST_RETURN gchar* (* window_real_get_name) (AtkObject *accessible);
-+
-+/*****************************************************************************/
-+
-+static void
-+ooo_window_wrapper_real_initialize(AtkObject *obj, gpointer data)
-+{
-+ window_real_initialize(obj, data);
-+ obj->role = GtkSalFrame::GetAtkRole( GTK_WINDOW( data ) );
-+}
-+
-+/*****************************************************************************/
-+
-+static G_CONST_RETURN gchar*
-+ooo_window_wrapper_real_get_name(AtkObject *accessible)
-+{
-+ G_CONST_RETURN gchar* name = NULL;
-+
-+ if( accessible->role == ATK_ROLE_TOOL_TIP )
-+ {
-+ AtkObject *child = atk_object_ref_accessible_child(accessible, 0);
-+ if( child )
-+ {
-+ name = atk_object_get_name(child);
-+ g_object_unref(child);
-+ }
-+
-+ return name;
-+ }
-+
-+ return window_real_get_name(accessible);
-+}
-+
-+/*****************************************************************************/
-+
-+static void
-+ooo_window_wrapper_class_init (AtkObjectClass *klass)
-+{
-+ AtkObjectClass *atk_class;
-+ gpointer data;
-+
-+ /*
-+ * Patch the gobject vtable of GailWindow to refer to our instance of
-+ * "initialize" and "get_name".
-+ */
-+
-+ data = g_type_class_peek_parent( klass );
-+ atk_class = ATK_OBJECT_CLASS (data);
-+
-+ window_real_initialize = atk_class->initialize;
-+ atk_class->initialize = ooo_window_wrapper_real_initialize;
-+
-+ window_real_get_name = atk_class->get_name;
-+ atk_class->get_name = ooo_window_wrapper_real_get_name;
-+}
-+
-+} // extern "C"
-+
-+/*****************************************************************************/
-+
-+GType
-+ooo_window_wrapper_get_type (void)
-+{
-+ static GType type = 0;
-+
-+ if (!type)
-+ {
-+ GType parent_type = g_type_from_name( "GailWindow" );
-+
-+ if( ! parent_type )
-+ {
-+ g_warning( "Unknown type: GailWindow" );
-+ parent_type = ATK_TYPE_OBJECT;
-+ }
-+
-+ GTypeQuery type_query;
-+ g_type_query( parent_type, &type_query );
-+
-+ static const GTypeInfo typeInfo =
-+ {
-+ type_query.class_size,
-+ (GBaseInitFunc) NULL,
-+ (GBaseFinalizeFunc) NULL,
-+ (GClassInitFunc) ooo_window_wrapper_class_init,
-+ (GClassFinalizeFunc) NULL,
-+ NULL,
-+ type_query.instance_size,
-+ 0,
-+ (GInstanceInitFunc) NULL,
-+ } ;
-+
-+ type = g_type_register_static (parent_type, "OOoWindowAtkObject", &typeInfo, (GTypeFlags)0) ;
-+ }
-+
-+ return type;
-+}
-Index: vcl/unx/gtk/a11y/atkwindow.hxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkwindow.hxx
-diff -N vcl/unx/gtk/a11y/atkwindow.hxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkwindow.hxx 5 Jan 2006 14:06:34 -0000 1.1.2.1
-@@ -0,0 +1,45 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#ifndef __ATK_WINDOW_HXX__
-+#define __ATK_WINDOW_HXX__
-+
-+#include <atk/atk.h>
-+
-+#define OOO_TYPE_WINDOW_WRAPPER ooo_window_wrapper_get_type()
-+
-+GType ooo_window_wrapper_get_type (void);
-+
-+#endif
-Index: vcl/unx/gtk/a11y/atkwrapper.cxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkwrapper.cxx
-diff -N vcl/unx/gtk/a11y/atkwrapper.cxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkwrapper.cxx 15 Feb 2006 10:58:57 -0000 1.1.2.21
-@@ -0,0 +1,819 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include <com/sun/star/uno/Any.hxx>
-+#include <com/sun/star/uno/Type.hxx>
-+#include <com/sun/star/uno/Sequence.hxx>
-+#include <com/sun/star/accessibility/AccessibleRole.hpp>
-+#include <com/sun/star/accessibility/AccessibleRelation.hpp>
-+#include <com/sun/star/accessibility/AccessibleRelationType.hpp>
-+#include <com/sun/star/accessibility/AccessibleStateType.hpp>
-+#include <com/sun/star/accessibility/XAccessible.hpp>
-+#include <com/sun/star/accessibility/XAccessibleText.hpp>
-+#include <com/sun/star/accessibility/XAccessibleValue.hpp>
-+#include <com/sun/star/accessibility/XAccessibleAction.hpp>
-+#include <com/sun/star/accessibility/XAccessibleContext.hpp>
-+#include <com/sun/star/accessibility/XAccessibleComponent.hpp>
-+#include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
-+#include <com/sun/star/accessibility/XAccessibleStateSet.hpp>
-+#include <com/sun/star/accessibility/XAccessibleRelationSet.hpp>
-+#include <com/sun/star/accessibility/XAccessibleTable.hpp>
-+#include <com/sun/star/accessibility/XAccessibleEditableText.hpp>
-+#include <com/sun/star/accessibility/XAccessibleImage.hpp>
-+#include <com/sun/star/accessibility/XAccessibleHyperlink.hpp>
-+#include <com/sun/star/accessibility/XAccessibleHypertext.hpp>
-+#include <com/sun/star/accessibility/XAccessibleSelection.hpp>
-+#include <com/sun/star/awt/XExtendedToolkit.hpp>
-+#include <com/sun/star/awt/XTopWindow.hpp>
-+#include <com/sun/star/awt/XTopWindowListener.hpp>
-+#include <com/sun/star/awt/XWindow.hpp>
-+#include <com/sun/star/lang/XComponent.hpp>
-+#include <com/sun/star/lang/XServiceInfo.hpp>
-+#include <com/sun/star/lang/XInitialization.hpp>
-+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-+#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-+#include <com/sun/star/beans/Property.hpp>
-+
-+#include <rtl/ref.hxx>
-+#include <cppuhelper/factory.hxx>
-+#include <cppuhelper/queryinterface.hxx>
-+
-+#include "atkwrapper.hxx"
-+#include "atklistener.hxx"
-+
-+#ifdef ENABLE_TRACING
-+#include <stdio.h>
-+#endif
-+
-+#include <string.h>
-+
-+using namespace ::com::sun::star;
-+
-+static GObjectClass *parent_class = NULL;
-+static GHashTable *uno_to_gobject = NULL;
-+
-+static G_CONST_RETURN gchar *
-+getAsConst( rtl::OUString rString )
-+{
-+ static const int nMax = 10;
-+ static rtl::OString aUgly[nMax];
-+ static int nIdx = 0;
-+ nIdx = (nIdx + 1) % nMax;
-+ aUgly[nIdx] = rtl::OUStringToOString( rString, RTL_TEXTENCODING_UTF8 );
-+ return aUgly[ nIdx ];
-+}
-+
-+static AtkRelationType mapRelationType( sal_Int16 nRelation )
-+{
-+ AtkRelationType type = ATK_RELATION_NULL;
-+
-+ switch( nRelation )
-+ {
-+ case accessibility::AccessibleRelationType::CONTENT_FLOWS_FROM:
-+ type = ATK_RELATION_FLOWS_FROM;
-+ break;
-+
-+ case accessibility::AccessibleRelationType::CONTENT_FLOWS_TO:
-+ type = ATK_RELATION_FLOWS_TO;
-+ break;
-+
-+ case accessibility::AccessibleRelationType::CONTROLLED_BY:
-+ type = ATK_RELATION_CONTROLLED_BY;
-+ break;
-+
-+ case accessibility::AccessibleRelationType::CONTROLLER_FOR:
-+ type = ATK_RELATION_CONTROLLER_FOR;
-+ break;
-+
-+ case accessibility::AccessibleRelationType::LABEL_FOR:
-+ type = ATK_RELATION_LABEL_FOR;
-+ break;
-+
-+ case accessibility::AccessibleRelationType::LABELED_BY:
-+ type = ATK_RELATION_LABELLED_BY;
-+ break;
-+
-+ case accessibility::AccessibleRelationType::MEMBER_OF:
-+ type = ATK_RELATION_MEMBER_OF;
-+ break;
-+
-+ case accessibility::AccessibleRelationType::SUB_WINDOW_OF:
-+ type = ATK_RELATION_SUBWINDOW_OF;
-+ break;
-+
-+ default:
-+ break;
-+ }
-+#if 0
-+ ATK_RELATION_NODE_CHILD_OF,
-+ ATK_RELATION_EMBEDS,
-+ ATK_RELATION_EMBEDDED_BY,
-+ ATK_RELATION_POPUP_FOR,
-+#endif
-+ return type;
-+}
-+
-+AtkStateType mapAtkState( sal_Int16 nState )
-+{
-+ // A perfect / complete mapping ...
-+ switch( nState )
-+ {
-+#define MAP_DIRECT( a ) \
-+ case accessibility::AccessibleStateType::a: \
-+ return ATK_STATE_##a; break
-+
-+ MAP_DIRECT( INVALID );
-+ MAP_DIRECT( ACTIVE );
-+ MAP_DIRECT( ARMED );
-+ MAP_DIRECT( BUSY );
-+ MAP_DIRECT( CHECKED );
-+ MAP_DIRECT( EDITABLE );
-+ MAP_DIRECT( ENABLED );
-+ MAP_DIRECT( EXPANDABLE );
-+ MAP_DIRECT( EXPANDED );
-+ MAP_DIRECT( FOCUSABLE );
-+ MAP_DIRECT( FOCUSED );
-+ MAP_DIRECT( HORIZONTAL );
-+ MAP_DIRECT( ICONIFIED );
-+ MAP_DIRECT( INDETERMINATE );
-+ MAP_DIRECT( MANAGES_DESCENDANTS );
-+ MAP_DIRECT( MODAL );
-+ MAP_DIRECT( MULTI_LINE );
-+ MAP_DIRECT( OPAQUE );
-+ MAP_DIRECT( PRESSED );
-+ MAP_DIRECT( RESIZABLE );
-+ MAP_DIRECT( SELECTABLE );
-+ MAP_DIRECT( SELECTED );
-+ MAP_DIRECT( SENSITIVE );
-+ MAP_DIRECT( SHOWING );
-+ MAP_DIRECT( SINGLE_LINE );
-+ MAP_DIRECT( STALE );
-+ MAP_DIRECT( TRANSIENT );
-+ MAP_DIRECT( VERTICAL );
-+ MAP_DIRECT( VISIBLE );
-+ // a spelling error ...
-+ case accessibility::AccessibleStateType::DEFUNC:
-+ return ATK_STATE_DEFUNCT; break;
-+ case accessibility::AccessibleStateType::MULTI_SELECTABLE:
-+ return ATK_STATE_MULTISELECTABLE; break;
-+ default:
-+ return ATK_STATE_INVALID;
-+ break;
-+ }
-+}
-+
-+static AtkRole mapToAtkRole( sal_Int16 nRole )
-+{
-+ switch( nRole )
-+ {
-+#define MAP(a,b) \
-+ case a: return b; break
-+
-+ MAP( ::accessibility::AccessibleRole::UNKNOWN, ATK_ROLE_UNKNOWN );
-+ MAP( ::accessibility::AccessibleRole::ALERT, ATK_ROLE_ALERT );
-+ MAP( ::accessibility::AccessibleRole::COLUMN_HEADER, ATK_ROLE_COLUMN_HEADER );
-+ MAP( ::accessibility::AccessibleRole::CANVAS, ATK_ROLE_CANVAS );
-+ MAP( ::accessibility::AccessibleRole::CHECK_BOX, ATK_ROLE_CHECK_BOX );
-+ MAP( ::accessibility::AccessibleRole::CHECK_MENU_ITEM, ATK_ROLE_CHECK_MENU_ITEM );
-+ MAP( ::accessibility::AccessibleRole::COLOR_CHOOSER, ATK_ROLE_COLOR_CHOOSER );
-+ MAP( ::accessibility::AccessibleRole::COMBO_BOX, ATK_ROLE_COMBO_BOX );
-+ MAP( ::accessibility::AccessibleRole::DATE_EDITOR, ATK_ROLE_DATE_EDITOR );
-+ MAP( ::accessibility::AccessibleRole::DESKTOP_ICON, ATK_ROLE_DESKTOP_ICON );
-+ MAP( ::accessibility::AccessibleRole::DESKTOP_PANE, ATK_ROLE_DESKTOP_FRAME ); // ? pane
-+ MAP( ::accessibility::AccessibleRole::DIRECTORY_PANE, ATK_ROLE_DIRECTORY_PANE );
-+ MAP( ::accessibility::AccessibleRole::DIALOG, ATK_ROLE_DIALOG );
-+ MAP( ::accessibility::AccessibleRole::DOCUMENT, ATK_ROLE_UNKNOWN ); // - FIXME -
-+ MAP( ::accessibility::AccessibleRole::EMBEDDED_OBJECT, ATK_ROLE_UNKNOWN ); // - FIXME -
-+ MAP( ::accessibility::AccessibleRole::END_NOTE, ATK_ROLE_UNKNOWN ); // - FIXME -
-+ MAP( ::accessibility::AccessibleRole::FILE_CHOOSER, ATK_ROLE_FILE_CHOOSER );
-+ MAP( ::accessibility::AccessibleRole::FILLER, ATK_ROLE_FILLER );
-+ MAP( ::accessibility::AccessibleRole::FONT_CHOOSER, ATK_ROLE_FONT_CHOOSER );
-+ MAP( ::accessibility::AccessibleRole::FOOTER, ATK_ROLE_FOOTER );
-+ MAP( ::accessibility::AccessibleRole::FOOTNOTE, ATK_ROLE_TEXT ); // - FIXME -
-+ MAP( ::accessibility::AccessibleRole::FRAME, ATK_ROLE_FRAME );
-+ MAP( ::accessibility::AccessibleRole::GLASS_PANE, ATK_ROLE_GLASS_PANE );
-+ MAP( ::accessibility::AccessibleRole::GRAPHIC, ATK_ROLE_UNKNOWN ); // - FIXME -
-+ MAP( ::accessibility::AccessibleRole::GROUP_BOX, ATK_ROLE_UNKNOWN ); // - FIXME -
-+ MAP( ::accessibility::AccessibleRole::HEADER, ATK_ROLE_HEADER );
-+ MAP( ::accessibility::AccessibleRole::HEADING, ATK_ROLE_HEADER ); // - FIXME -
-+ MAP( ::accessibility::AccessibleRole::HYPER_LINK, ATK_ROLE_TEXT ); // - FIXME -
-+ MAP( ::accessibility::AccessibleRole::ICON, ATK_ROLE_ICON );
-+ MAP( ::accessibility::AccessibleRole::INTERNAL_FRAME, ATK_ROLE_INTERNAL_FRAME );
-+ MAP( ::accessibility::AccessibleRole::LABEL, ATK_ROLE_LABEL );
-+ MAP( ::accessibility::AccessibleRole::LAYERED_PANE, ATK_ROLE_LAYERED_PANE );
-+ MAP( ::accessibility::AccessibleRole::LIST, ATK_ROLE_LIST );
-+ MAP( ::accessibility::AccessibleRole::LIST_ITEM, ATK_ROLE_LIST_ITEM );
-+ MAP( ::accessibility::AccessibleRole::MENU, ATK_ROLE_MENU );
-+ MAP( ::accessibility::AccessibleRole::MENU_BAR, ATK_ROLE_MENU_BAR );
-+ MAP( ::accessibility::AccessibleRole::MENU_ITEM, ATK_ROLE_MENU_ITEM );
-+ MAP( ::accessibility::AccessibleRole::OPTION_PANE, ATK_ROLE_OPTION_PANE );
-+ MAP( ::accessibility::AccessibleRole::PAGE_TAB, ATK_ROLE_PAGE_TAB );
-+ MAP( ::accessibility::AccessibleRole::PAGE_TAB_LIST, ATK_ROLE_PAGE_TAB_LIST );
-+ MAP( ::accessibility::AccessibleRole::PANEL, ATK_ROLE_PANEL );
-+ MAP( ::accessibility::AccessibleRole::PARAGRAPH, ATK_ROLE_PARAGRAPH );
-+ MAP( ::accessibility::AccessibleRole::PASSWORD_TEXT, ATK_ROLE_PASSWORD_TEXT );
-+ MAP( ::accessibility::AccessibleRole::POPUP_MENU, ATK_ROLE_POPUP_MENU );
-+ MAP( ::accessibility::AccessibleRole::PUSH_BUTTON, ATK_ROLE_PUSH_BUTTON );
-+ MAP( ::accessibility::AccessibleRole::PROGRESS_BAR, ATK_ROLE_PROGRESS_BAR );
-+ MAP( ::accessibility::AccessibleRole::RADIO_BUTTON, ATK_ROLE_RADIO_BUTTON );
-+ MAP( ::accessibility::AccessibleRole::RADIO_MENU_ITEM, ATK_ROLE_RADIO_MENU_ITEM );
-+ MAP( ::accessibility::AccessibleRole::ROW_HEADER, ATK_ROLE_ROW_HEADER );
-+ MAP( ::accessibility::AccessibleRole::ROOT_PANE, ATK_ROLE_ROOT_PANE );
-+ MAP( ::accessibility::AccessibleRole::SCROLL_BAR, ATK_ROLE_SCROLL_BAR );
-+ MAP( ::accessibility::AccessibleRole::SCROLL_PANE, ATK_ROLE_SCROLL_PANE );
-+ MAP( ::accessibility::AccessibleRole::SHAPE, ATK_ROLE_UNKNOWN ); // - FIXME -
-+ MAP( ::accessibility::AccessibleRole::SEPARATOR, ATK_ROLE_SEPARATOR );
-+ MAP( ::accessibility::AccessibleRole::SLIDER, ATK_ROLE_SLIDER );
-+ MAP( ::accessibility::AccessibleRole::SPIN_BOX, ATK_ROLE_SPIN_BUTTON ); // ?
-+ MAP( ::accessibility::AccessibleRole::SPLIT_PANE, ATK_ROLE_SPLIT_PANE );
-+ MAP( ::accessibility::AccessibleRole::STATUS_BAR, ATK_ROLE_STATUSBAR );
-+ MAP( ::accessibility::AccessibleRole::TABLE, ATK_ROLE_TABLE );
-+ MAP( ::accessibility::AccessibleRole::TABLE_CELL, ATK_ROLE_TABLE_CELL );
-+ MAP( ::accessibility::AccessibleRole::TEXT, ATK_ROLE_TEXT );
-+ MAP( ::accessibility::AccessibleRole::TEXT_FRAME, ATK_ROLE_UNKNOWN ); // - FIXME -
-+ MAP( ::accessibility::AccessibleRole::TOGGLE_BUTTON, ATK_ROLE_TOGGLE_BUTTON );
-+ MAP( ::accessibility::AccessibleRole::TOOL_BAR, ATK_ROLE_TOOL_BAR );
-+ MAP( ::accessibility::AccessibleRole::TOOL_TIP, ATK_ROLE_TOOL_TIP );
-+ MAP( ::accessibility::AccessibleRole::TREE, ATK_ROLE_TREE );
-+ MAP( ::accessibility::AccessibleRole::VIEW_PORT, ATK_ROLE_VIEWPORT );
-+ MAP( ::accessibility::AccessibleRole::WINDOW, ATK_ROLE_WINDOW );
-+#undef MAP
-+ }
-+/* Roles unimplemented by OO.o / a11y:
-+ ATK_ROLE_INVALID, ATK_ROLE_ACCEL_LABEL, ATK_ROLE_ANIMATION,
-+ ATK_ROLE_ARROW, ATK_ROLE_CALENDAR, ATK_ROLE_DIAL,
-+ ATK_ROLE_DRAWING_AREA, ATK_ROLE_HTML_CONTAINER, ATK_ROLE_IMAGE,
-+ ATK_ROLE_TABLE_COLUMN_HEADER, ATK_ROLE_TABLE_ROW_HEADER, ATK_ROLE_TEAR_OFF_MENU_ITEM,
-+ ATK_ROLE_TERMINAL, ATK_ROLE_TREE_TABLE, ATK_ROLE_RULER,
-+ ATK_ROLE_APPLICATION, ATK_ROLE_AUTOCOMPLETE, ATK_ROLE_EDITBAR */
-+
-+ return ATK_ROLE_UNKNOWN;
-+}
-+
-+static gchar *
-+mapToGChar( rtl::OUString aString )
-+{
-+ rtl::OString aUtf8 = rtl::OUStringToOString( aString, RTL_TEXTENCODING_UTF8 );
-+ return g_strdup( aUtf8 );
-+}
-+
-+static accessibility::XAccessibleContext*
-+ getContext( AtkObject* obj ) throw (uno::RuntimeException)
-+{
-+ AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( obj );
-+
-+ if( pWrap )
-+ {
-+ if( !pWrap->mpContext && pWrap->mpContext )
-+ {
-+ uno::Any any = pWrap->mpContext->queryInterface( accessibility::XAccessibleContext::static_type(NULL) );
-+ pWrap->mpContext = reinterpret_cast< accessibility::XAccessibleContext * > (any.pReserved);
-+ pWrap->mpContext->acquire();
-+ }
-+
-+ return pWrap->mpContext;
-+ }
-+
-+ return NULL;
-+}
-+
-+/*****************************************************************************/
-+
-+extern "C" {
-+
-+/*****************************************************************************/
-+
-+static G_CONST_RETURN gchar*
-+wrapper_get_name( AtkObject *pObject )
-+{
-+ G_CONST_RETURN gchar* name;
-+
-+ name = ATK_OBJECT_CLASS (parent_class)->get_name( pObject );
-+ if (name == NULL)
-+ {
-+ try {
-+ accessibility::XAccessibleContext* pContext = getContext( pObject );
-+ if( pContext )
-+ name = getAsConst( pContext->getAccessibleName() );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleName()" );
-+ }
-+ }
-+
-+ return name;
-+}
-+
-+/*****************************************************************************/
-+
-+static G_CONST_RETURN gchar*
-+wrapper_get_description( AtkObject *pObject )
-+{
-+ G_CONST_RETURN gchar* desc;
-+
-+ desc = ATK_OBJECT_CLASS (parent_class)->get_description( pObject );
-+ if (desc == NULL)
-+ {
-+ try {
-+ accessibility::XAccessibleContext* pContext = getContext( pObject );
-+ if( pContext )
-+ desc = getAsConst( pContext->getAccessibleDescription() );
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleDescription()" );
-+ }
-+ }
-+
-+ return desc;
-+}
-+
-+/*****************************************************************************/
-+
-+static gint
-+wrapper_get_n_children( AtkObject *pObject )
-+{
-+ try {
-+ accessibility::XAccessibleContext* pContext = getContext( pObject );
-+ if( pContext )
-+ return pContext->getAccessibleChildCount();
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleChildCount()" );
-+ }
-+
-+ return 0;
-+}
-+
-+/*****************************************************************************/
-+
-+static AtkObject *
-+wrapper_ref_child( AtkObject *pObject,
-+ gint i )
-+{
-+ try {
-+ accessibility::XAccessibleContext* pContext = getContext( pObject );
-+ if( pContext )
-+ {
-+// fprintf(stderr, "wrapper_ref_child %d of (%d)\n", i,
-+// getContext( pObject )->getAccessibleChildCount());
-+ if( i >= 0 && i < getContext( pObject )->getAccessibleChildCount())
-+ {
-+ uno::Reference< accessibility::XAccessible > xAccessible =
-+ pContext->getAccessibleChild( i );
-+
-+ AtkObject* child = atk_object_wrapper_ref( xAccessible );
-+ return child;
-+ }
-+ }
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleChildCount()" );
-+ }
-+
-+ return NULL;
-+}
-+
-+static gint
-+wrapper_get_index_in_parent( AtkObject *pObject )
-+{
-+ try {
-+ accessibility::XAccessibleContext* pContext = getContext( pObject );
-+
-+#ifdef ENABLE_TRACING
-+ if( pContext )
-+ fprintf(stderr, "%p->getAccessibleIndexInParent() returned: %u\n",
-+ ATK_OBJECT_WRAPPER( pObject )->mpAccessible,
-+ pContext->getAccessibleIndexInParent());
-+#endif
-+ if( pContext )
-+ return pContext->getAccessibleIndexInParent();
-+ }
-+ catch(const uno::Exception& e) {
-+ g_warning( "Exception in getAccessibleIndexInParent()" );
-+ }
-+ return -1;
-+}
-+
-+static AtkRelationSet *
-+wrapper_ref_relation_set( AtkObject *pObject )
-+{
-+ AtkRelationSet *pSet = atk_relation_set_new();
-+ try {
-+ accessibility::XAccessibleContext* pContext = getContext( pObject );
-+ if( pContext )
-+ {
-+ uno::Reference< accessibility::XAccessibleRelationSet > xRelationSet;
-+
-+ xRelationSet = pContext->getAccessibleRelationSet();
-+
-+ sal_Int32 nRelations = xRelationSet.is() ? xRelationSet->getRelationCount() : 0;
-+ for( sal_Int32 n = 0; n < nRelations; n++ )
-+ {
-+ accessibility::AccessibleRelation aRelation = xRelationSet->getRelation( n );
-+ sal_uInt32 nTargetCount = aRelation.TargetSet.getLength();
-+ AtkObject **pTargets = (AtkObject **) alloca( nTargetCount * sizeof(AtkObject *) );
-+
-+ for( sal_uInt32 n = 0; n < nTargetCount; n++ )
-+ {
-+ uno::Reference< accessibility::XAccessible > xAccessible(
-+ aRelation.TargetSet[n], uno::UNO_QUERY );
-+ pTargets[n] = atk_object_wrapper_ref( xAccessible );
-+ }
-+
-+ AtkRelation *pRel = atk_relation_new
-+ ( pTargets, nTargetCount,
-+ mapRelationType( aRelation.RelationType ) );
-+ atk_relation_set_add( pSet, pRel );
-+ g_object_unref( G_OBJECT( pRel ) );
-+ }
-+ }
-+ }
-+ catch(const uno::Exception &e)
-+ {
-+ g_object_unref( G_OBJECT( pSet ) );
-+ pSet = NULL;
-+ }
-+
-+ return pSet;
-+}
-+
-+static AtkStateSet *
-+wrapper_ref_state_set( AtkObject *pObject )
-+{
-+ AtkStateSet *pSet = atk_state_set_new();
-+ try {
-+ accessibility::XAccessibleContext* pContext = getContext( pObject );
-+ if( pContext )
-+ {
-+ uno::Reference< accessibility::XAccessibleStateSet > xStateSet =
-+ pContext->getAccessibleStateSet();
-+
-+ uno::Sequence< sal_Int16 > aStates;
-+
-+ if( xStateSet.is() )
-+ {
-+ uno::Sequence< sal_Int16 > aStates = xStateSet->getStates();
-+
-+ for( sal_uInt32 n = 0; n < aStates.getLength(); n++ )
-+ atk_state_set_add_state( pSet, mapAtkState( aStates[n] ) );
-+
-+ // We need to emulate FOCUS state for menus, menu-items etc.
-+ if( pObject == atk_get_focus_object() )
-+ atk_state_set_add_state( pSet, ATK_STATE_FOCUSED );
-+/* FIXME - should we do this ?
-+ else
-+ atk_state_set_remove_state( pSet, ATK_STATE_FOCUSED );
-+*/
-+ }
-+ }
-+ }
-+
-+ catch(const uno::Exception &e)
-+ {
-+ g_warning( "Exception in wrapper_ref_state_set" );
-+
-+ g_object_unref( G_OBJECT( pSet ) );
-+ pSet = NULL;
-+ }
-+
-+ return pSet;
-+}
-+
-+static void
-+atk_object_wrapper_finalize (GObject *obj)
-+{
-+ AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER (obj);
-+
-+ if( pWrap->mpAccessible )
-+ {
-+ g_hash_table_remove( uno_to_gobject, pWrap->mpAccessible );
-+ pWrap->mpAccessible->release();
-+ pWrap->mpAccessible = NULL;
-+ }
-+
-+ atk_object_wrapper_dispose( pWrap );
-+
-+ parent_class->finalize( obj );
-+}
-+
-+static void
-+atk_object_wrapper_class_init (AtkObjectWrapperClass *klass)
-+{
-+ GObjectClass *gobject_class = G_OBJECT_CLASS( klass );
-+ AtkObjectClass *atk_class = ATK_OBJECT_CLASS( klass );
-+
-+ parent_class = (GObjectClass *) g_type_class_peek_parent (klass);
-+
-+ // GObject methods
-+ gobject_class->finalize = atk_object_wrapper_finalize;
-+
-+ // AtkObject methods
-+ atk_class->get_name = wrapper_get_name;
-+ atk_class->get_description = wrapper_get_description;
-+ atk_class->get_n_children = wrapper_get_n_children;
-+ atk_class->ref_child = wrapper_ref_child;
-+ atk_class->get_index_in_parent = wrapper_get_index_in_parent;
-+ atk_class->ref_relation_set = wrapper_ref_relation_set;
-+ atk_class->ref_state_set = wrapper_ref_state_set;
-+}
-+
-+static void
-+atk_object_wrapper_init (AtkObjectWrapper *wrapper,
-+ AtkObjectWrapperClass *klass)
-+{
-+ wrapper->mpAction = NULL;
-+ wrapper->mpComponent = NULL;
-+ wrapper->mpEditableText = NULL;
-+ wrapper->mpHypertext = NULL;
-+ wrapper->mpImage = NULL;
-+ wrapper->mpSelection = NULL;
-+ wrapper->mpTable = NULL;
-+ wrapper->mpText = NULL;
-+ wrapper->mpValue = NULL;
-+}
-+
-+} // extern "C"
-+
-+GType
-+atk_object_wrapper_get_type (void)
-+{
-+ static GType type = 0;
-+
-+ if (!type)
-+ {
-+ static const GTypeInfo typeInfo =
-+ {
-+ sizeof (AtkObjectWrapperClass),
-+ (GBaseInitFunc) NULL,
-+ (GBaseFinalizeFunc) NULL,
-+ (GClassInitFunc) atk_object_wrapper_class_init,
-+ (GClassFinalizeFunc) NULL,
-+ NULL,
-+ sizeof (AtkObjectWrapper),
-+ 0,
-+ (GInstanceInitFunc) atk_object_wrapper_init,
-+ } ;
-+ type = g_type_register_static (ATK_TYPE_OBJECT,
-+ "OOoAtkObj",
-+ &typeInfo, (GTypeFlags)0) ;
-+ }
-+ return type;
-+}
-+
-+static bool
-+isOfType( uno::XInterface *pInterface, const uno::Type & rType )
-+{
-+ g_return_val_if_fail( pInterface != NULL, false );
-+
-+ bool bIs = false;
-+ try {
-+ uno::Any aRet = pInterface->queryInterface( rType );
-+
-+ bIs = ( ( typelib_TypeClass_INTERFACE == aRet.pType->eTypeClass ) &&
-+ ( aRet.pReserved != NULL ) );
-+ } catch( const uno::Exception &e) { }
-+
-+ return bIs;
-+}
-+
-+extern "C" {
-+typedef GType (* GetGIfaceType ) (void);
-+}
-+const struct {
-+ const char *name;
-+ GInterfaceInitFunc aInit;
-+ GetGIfaceType aGetGIfaceType;
-+ const uno::Type & (*aGetUnoType) (void *);
-+} aTypeTable[] = {
-+// re-location heaven:
-+ {
-+ "Comp", (GInterfaceInitFunc) componentIfaceInit,
-+ atk_component_get_type,
-+ accessibility::XAccessibleComponent::static_type
-+ },
-+ {
-+ "Act", (GInterfaceInitFunc) actionIfaceInit,
-+ atk_action_get_type,
-+ accessibility::XAccessibleAction::static_type
-+ },
-+ {
-+ "Txt", (GInterfaceInitFunc) textIfaceInit,
-+ atk_text_get_type,
-+ accessibility::XAccessibleText::static_type
-+ },
-+ {
-+ "Val", (GInterfaceInitFunc) valueIfaceInit,
-+ atk_value_get_type,
-+ accessibility::XAccessibleValue::static_type
-+ },
-+ {
-+ "Tab", (GInterfaceInitFunc) tableIfaceInit,
-+ atk_table_get_type,
-+ accessibility::XAccessibleTable::static_type
-+ },
-+ {
-+ "Edt", (GInterfaceInitFunc) editableTextIfaceInit,
-+ atk_editable_text_get_type,
-+ accessibility::XAccessibleEditableText::static_type
-+ },
-+ {
-+ "Img", (GInterfaceInitFunc) imageIfaceInit,
-+ atk_image_get_type,
-+ accessibility::XAccessibleImage::static_type
-+ },
-+ {
-+ "Hyp", (GInterfaceInitFunc) hypertextIfaceInit,
-+ atk_hypertext_get_type,
-+ accessibility::XAccessibleHypertext::static_type
-+ },
-+ {
-+ "Sel", (GInterfaceInitFunc) selectionIfaceInit,
-+ atk_selection_get_type,
-+ accessibility::XAccessibleSelection::static_type
-+ }
-+ // AtkDocument is a nastily broken interface (so far)
-+ // we could impl. get_document_type perhaps though.
-+};
-+
-+const int aTypeTableSize = G_N_ELEMENTS( aTypeTable );
-+
-+static GType
-+ensureTypeFor( uno::XInterface *pAccessible )
-+{
-+ int i;
-+ int bTypes[ aTypeTableSize ] = { 0, };
-+ rtl::OString aTypeName( "OOoAtkObj" );
-+
-+ for( i = 0; i < aTypeTableSize; i++ )
-+ {
-+ if( isOfType( pAccessible, aTypeTable[i].aGetUnoType(0) ) )
-+ {
-+ aTypeName += aTypeTable[i].name;
-+ bTypes[i] = TRUE;
-+ }
-+// g_message( "Accessible %p has type '%s' (%d)",
-+// pAccessible, aTypeTable[i].name, bTypes[i] );
-+ }
-+
-+ GType nType = g_type_from_name( aTypeName );
-+ if( nType == G_TYPE_INVALID )
-+ {
-+ GTypeInfo aTypeInfo = {
-+ sizeof( AtkObjectWrapperClass ),
-+ NULL, NULL, NULL, NULL, NULL,
-+ sizeof( AtkObjectWrapper ),
-+ 0, NULL
-+ } ;
-+ nType = g_type_register_static( ATK_TYPE_OBJECT_WRAPPER,
-+ aTypeName, &aTypeInfo, (GTypeFlags)0 ) ;
-+
-+ for( int i = 0; i < aTypeTableSize; i++ )
-+ if( bTypes[i] )
-+ {
-+ GInterfaceInfo aIfaceInfo = { NULL, NULL, NULL };
-+ aIfaceInfo.interface_init = aTypeTable[i].aInit;
-+ g_type_add_interface_static (nType, aTypeTable[i].aGetGIfaceType(),
-+ &aIfaceInfo);
-+ }
-+ }
-+ return nType;
-+}
-+
-+AtkObject *
-+atk_object_wrapper_ref( const uno::Reference< accessibility::XAccessible > &rxAccessible, bool create )
-+{
-+ g_return_val_if_fail( rxAccessible.get() != NULL, NULL );
-+
-+ if( uno_to_gobject )
-+ {
-+ gpointer cached =
-+ g_hash_table_lookup(uno_to_gobject, (gpointer) rxAccessible.get());
-+
-+ if( cached )
-+ return ATK_OBJECT( g_object_ref( cached ) );
-+ }
-+
-+ if( create )
-+ return atk_object_wrapper_new( rxAccessible );
-+
-+ return NULL;
-+}
-+
-+
-+AtkObject *
-+atk_object_wrapper_new( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >& rxAccessible,
-+ AtkObject* parent )
-+{
-+ g_return_val_if_fail( rxAccessible.get() != NULL, NULL );
-+
-+ AtkObjectWrapper *pWrap = NULL;
-+
-+ try {
-+ uno::Reference< accessibility::XAccessibleContext > xContext(rxAccessible->getAccessibleContext());
-+
-+ g_return_val_if_fail( xContext.get() != NULL, NULL );
-+
-+ GType nType = ensureTypeFor( xContext.get() );
-+ gpointer obj = g_object_new( nType, NULL);
-+
-+ if( !uno_to_gobject )
-+ uno_to_gobject = g_hash_table_new (NULL, NULL);
-+
-+ // We assume direct pointer comparison is sufficient...
-+ g_hash_table_insert( uno_to_gobject, (gpointer) rxAccessible.get(), obj );
-+ rxAccessible->acquire();
-+
-+ pWrap = ATK_OBJECT_WRAPPER( obj );
-+ pWrap->mpAccessible = rxAccessible.get();
-+
-+ xContext->acquire();
-+ pWrap->mpContext = xContext.get();
-+
-+ AtkObject* atk_obj = ATK_OBJECT(pWrap);
-+ atk_obj->role = mapToAtkRole( xContext->getAccessibleRole() );
-+
-+ if( parent )
-+ {
-+ atk_obj->accessible_parent = parent;
-+ g_object_ref( atk_obj->accessible_parent );
-+ }
-+ else
-+ {
-+ uno::Reference< accessibility::XAccessible > xParent(xContext->getAccessibleParent());
-+ if( xParent.is() )
-+ {
-+ atk_obj->accessible_parent = atk_object_wrapper_ref( xParent );
-+ }
-+ else
-+ {
-+ atk_object_set_parent( atk_obj, atk_get_root() );
-+ g_object_ref( atk_obj->accessible_parent );
-+ }
-+ }
-+
-+ // Attach a listener to the UNO object if it's not TRANSIENT
-+ uno::Reference< accessibility::XAccessibleStateSet > xStateSet( xContext->getAccessibleStateSet() );
-+ if( xStateSet.is() && ! xStateSet->contains( accessibility::AccessibleStateType::TRANSIENT ) )
-+ {
-+ uno::Reference< accessibility::XAccessibleEventBroadcaster > xBroadcaster( xContext, uno::UNO_QUERY_THROW );
-+ xBroadcaster->addEventListener( static_cast< accessibility::XAccessibleEventListener * > ( new AtkListener( pWrap ) ) );
-+ }
-+
-+ return ATK_OBJECT( pWrap );
-+ }
-+ catch (const uno::Exception &e)
-+ {
-+ if( pWrap )
-+ g_object_unref( pWrap );
-+
-+ return NULL;
-+ }
-+}
-+
-+#define RELEASE(i) if( i ) { i->release(); i = NULL; }
-+
-+void atk_object_wrapper_dispose(AtkObjectWrapper* wrapper)
-+{
-+ RELEASE( wrapper->mpContext )
-+ RELEASE( wrapper->mpAction )
-+ RELEASE( wrapper->mpComponent )
-+ RELEASE( wrapper->mpEditableText )
-+ RELEASE( wrapper->mpHypertext )
-+ RELEASE( wrapper->mpImage )
-+ RELEASE( wrapper->mpSelection )
-+ RELEASE( wrapper->mpTable )
-+ RELEASE( wrapper->mpText )
-+ RELEASE( wrapper->mpValue )
-+}
-Index: vcl/unx/gtk/a11y/atkwrapper.hxx
-===================================================================
-RCS file: vcl/unx/gtk/a11y/atkwrapper.hxx
-diff -N vcl/unx/gtk/a11y/atkwrapper.hxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/atkwrapper.hxx 15 Feb 2006 10:59:26 -0000 1.1.2.8
-@@ -0,0 +1,125 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#ifndef __ATK_WRAPPER_HXX__
-+#define __ATK_WRAPPER_HXX__
-+
-+#include <atk/atk.h>
-+
-+#ifndef _COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLE_HPP_
-+#include <com/sun/star/accessibility/XAccessible.hpp>
-+#endif
-+
-+extern "C" {
-+
-+typedef struct _AtkObjectWrapper AtkObjectWrapper;
-+typedef struct _AtkObjectWrapperClass AtkObjectWrapperClass;
-+
-+namespace com { namespace sun { namespace star { namespace accessibility {
-+ class XAccessibleAction;
-+ class XAccessibleComponent;
-+ class XAccessibleEditableText;
-+ class XAccessibleHypertext;
-+ class XAccessibleImage;
-+ class XAccessibleSelection;
-+ class XAccessibleTable;
-+ class XAccessibleText;
-+ class XAccessibleValue;
-+} } } }
-+
-+
-+struct _AtkObjectWrapper
-+{
-+ AtkObject aParent;
-+
-+ ::com::sun::star::accessibility::XAccessible *mpAccessible;
-+ ::com::sun::star::accessibility::XAccessibleContext *mpContext;
-+ ::com::sun::star::accessibility::XAccessibleAction *mpAction;
-+ ::com::sun::star::accessibility::XAccessibleComponent *mpComponent;
-+ ::com::sun::star::accessibility::XAccessibleEditableText *mpEditableText;
-+ ::com::sun::star::accessibility::XAccessibleHypertext *mpHypertext;
-+ ::com::sun::star::accessibility::XAccessibleImage *mpImage;
-+ ::com::sun::star::accessibility::XAccessibleSelection *mpSelection;
-+ ::com::sun::star::accessibility::XAccessibleTable *mpTable;
-+ ::com::sun::star::accessibility::XAccessibleText *mpText;
-+ ::com::sun::star::accessibility::XAccessibleValue *mpValue;
-+
-+// ::rtl::OString * m_pKeyBindings
-+};
-+
-+struct _AtkObjectWrapperClass
-+{
-+ AtkObjectClass aParentClass;
-+};
-+
-+GType atk_object_wrapper_get_type (void) G_GNUC_CONST;
-+AtkObject * atk_object_wrapper_ref(
-+ const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >& rxAccessible,
-+ bool create = true );
-+
-+AtkObject * atk_object_wrapper_new(
-+ const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >& rxAccessible,
-+ AtkObject* parent = NULL );
-+
-+void atk_object_wrapper_dispose(AtkObjectWrapper* wrapper);
-+
-+AtkStateType mapAtkState( sal_Int16 nState );
-+
-+void actionIfaceInit(AtkActionIface *iface);
-+void componentIfaceInit(AtkComponentIface *iface);
-+void editableTextIfaceInit(AtkEditableTextIface *iface);
-+void hypertextIfaceInit(AtkHypertextIface *iface);
-+void imageIfaceInit(AtkImageIface *iface);
-+void selectionIfaceInit(AtkSelectionIface *iface);
-+void tableIfaceInit(AtkTableIface *iface);
-+void textIfaceInit(AtkTextIface *iface);
-+void valueIfaceInit(AtkValueIface *iface);
-+
-+}; // extern "C"
-+
-+#define ATK_TYPE_OBJECT_WRAPPER atk_object_wrapper_get_type()
-+#define ATK_OBJECT_WRAPPER(obj) \
-+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), ATK_TYPE_OBJECT_WRAPPER, AtkObjectWrapper))
-+
-+static inline gchar *
-+OUStringToGChar(const rtl::OUString& rString )
-+{
-+ rtl::OString aUtf8 = rtl::OUStringToOString( rString, RTL_TEXTENCODING_UTF8 );
-+ return g_strdup( aUtf8 );
-+}
-+
-+#define OUStringToConstGChar( string ) rtl::OUStringToOString( string, RTL_TEXTENCODING_UTF8 ).getStr()
-+
-+#endif /* __ATK_WRAPPER_HXX__ */
-Index: vcl/unx/gtk/a11y/makefile.mk
-===================================================================
-RCS file: vcl/unx/gtk/a11y/makefile.mk
-diff -N vcl/unx/gtk/a11y/makefile.mk
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/gtk/a11y/makefile.mk 17 Feb 2006 06:09:46 -0000 1.1.2.12
-@@ -0,0 +1,96 @@
-+#*************************************************************************
-+#
-+# OpenOffice.org - a multi-platform office productivity suite
-+#
-+# $RCSfile$
-+#
-+# $Revision$
-+#
-+# last change: $Author$ $Date$
-+#
-+# The Contents of this file are made available subject to
-+# the terms of GNU Lesser General Public License Version 2.1.
-+#
-+#
-+# GNU Lesser General Public License Version 2.1
-+# =============================================
-+# Copyright 2005 by Sun Microsystems, Inc.
-+# 901 San Antonio Road, Palo Alto, CA 94303, USA
-+#
-+# This library is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU Lesser General Public
-+# License version 2.1, as published by the Free Software Foundation.
-+#
-+# This library is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# Lesser General Public License for more details.
-+#
-+# You should have received a copy of the GNU Lesser General Public
-+# License along with this library; if not, write to the Free Software
-+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+# MA 02111-1307 USA
-+#
-+#*************************************************************************
-+
-+PRJ=..$/..$/..
-+
-+PRJNAME=vcl
-+TARGET=gtka11y
-+ENABLE_EXCEPTIONS=TRUE
-+
-+# workaround for makedepend hang
-+MKDEPENDSOLVER=
-+LIBTARGET=NO
-+NO_DEFAULT_STL=YES
-+
-+# --- Settings -----------------------------------------------------
-+
-+.INCLUDE : settings.mk
-+
-+# --- Files --------------------------------------------------------
-+
-+.IF "$(GUIBASE)"!="unx"
-+
-+dummy:
-+ @echo "Nothing to build for GUIBASE $(GUIBASE)"
-+
-+.ELSE # "$(GUIBASE)"!="unx"
-+
-+.IF "$(ENABLE_GTK)" != ""
-+
-+PKGCONFIG_MODULES=gtk+-2.0
-+.INCLUDE : pkg_config.mk
-+
-+CFLAGS+=-DVERSION=\"$(UPD)$(LAST_MINOR)\"
-+
-+LIB1TARGET=$(SLB)$/$(TARGET).lib
-+LIB1OBJFILES=\
-+ $(SLO)$/atkaction.obj \
-+ $(SLO)$/atkbridge.obj \
-+ $(SLO)$/atkcomponent.obj \
-+ $(SLO)$/atkeditabletext.obj \
-+ $(SLO)$/atkfactory.obj \
-+ $(SLO)$/atkhypertext.obj \
-+ $(SLO)$/atkimage.obj \
-+ $(SLO)$/atklistener.obj \
-+ $(SLO)$/atkselection.obj \
-+ $(SLO)$/atktable.obj \
-+ $(SLO)$/atktext.obj \
-+ $(SLO)$/atktextattributes.obj \
-+ $(SLO)$/atkutil.obj \
-+ $(SLO)$/atkvalue.obj \
-+ $(SLO)$/atkwindow.obj \
-+ $(SLO)$/atkwrapper.obj
-+
-+.ELSE # "$(ENABLE_GTK)" != ""
-+
-+dummy:
-+ @echo GTK disabled - nothing to build
-+.ENDIF
-+.ENDIF # "$(GUIBASE)"!="unx"
-+
-+# --- Targets ------------------------------------------------------
-+
-+.INCLUDE : target.mk
-+
-cvs diff: Diffing vcl/unx/gtk/app
-Index: vcl/unx/gtk/app/gtkinst.cxx
-===================================================================
-RCS file: /cvs/gsl/vcl/unx/gtk/app/gtkinst.cxx,v
-retrieving revision 1.11
-retrieving revision 1.9.6.9
-diff -u -p -r1.11 -r1.9.6.9
---- vcl/unx/gtk/app/gtkinst.cxx 2 Nov 2005 13:32:37 -0000 1.11
-+++ vcl/unx/gtk/app/gtkinst.cxx 16 Feb 2006 11:08:15 -0000 1.9.6.9
-@@ -40,6 +40,7 @@
- #include <salobj.h>
- #include <plugins/gtk/gtkframe.hxx>
- #include <plugins/gtk/gtkobject.hxx>
-+#include <plugins/gtk/atkbridge.hxx>
-
- #include <rtl/strbuf.hxx>
-
-@@ -47,6 +48,8 @@
- #include <stdio.h>
- #endif
-
-+#include <dlfcn.h>
-+
- GtkHookedYieldMutex::GtkHookedYieldMutex()
- {
- }
-@@ -140,29 +143,6 @@ extern "C"
- #endif
- return NULL;
- }
-- /* #i47797# as long as we do not have a working atk bridge
-- * prevent atk from interfering with the java accessibility bridge
-- */
-- #if ! defined HAVE_ATK_ACCESSIBILITY_BRIDGE
-- const char* pGtkModules = getenv( "GTK_MODULES" );
-- if( pGtkModules )
-- {
-- rtl::OString aModules( pGtkModules );
-- rtl::OStringBuffer aModulesOut( aModules.getLength() + 11 );
-- aModulesOut.append( "GTK_MODULES=" );
-- sal_Int32 nIndex = 0;
-- while( nIndex >= 0 )
-- {
-- rtl::OString aToken = aModules.getToken( 0, ':', nIndex );
-- if( aToken.equals( "gail" ) ||
-- aToken.equals( "atk-bridge" ) )
-- continue;
-- aModulesOut.append( ':' );
-- aModulesOut.append( aToken );
-- }
-- putenv( strdup( aModulesOut.getStr() ) );
-- }
-- #endif
-
- GtkYieldMutex *pYieldMutex;
-
-@@ -189,6 +169,22 @@ extern "C"
- pSalData->Init();
- pSalData->initNWF();
-
-+ const char* pGtkModules = getenv( "GTK_MODULES" );
-+ if( pGtkModules )
-+ {
-+ rtl::OString aModules( pGtkModules );
-+ sal_Int32 nIndex = 0;
-+ while( nIndex >= 0 )
-+ {
-+ rtl::OString aToken = aModules.getToken( 0, ':', nIndex );
-+ if( aToken.equals( "gail" ) || aToken.equals( "atk-bridge" ) )
-+ {
-+ InitAtkBridge();
-+ break;
-+ }
-+ }
-+ }
-+
- return pInstance;
- }
- }
-cvs diff: Diffing vcl/unx/gtk/gdi
-cvs diff: Diffing vcl/unx/gtk/window
-Index: vcl/unx/gtk/window/gtkframe.cxx
-===================================================================
-RCS file: /cvs/gsl/vcl/unx/gtk/window/gtkframe.cxx,v
-retrieving revision 1.42
-retrieving revision 1.28.6.19
-diff -u -p -r1.42 -r1.28.6.19
---- vcl/unx/gtk/window/gtkframe.cxx 25 Jan 2006 11:40:22 -0000 1.42
-+++ vcl/unx/gtk/window/gtkframe.cxx 17 Feb 2006 11:10:57 -0000 1.28.6.19
-@@ -45,6 +45,7 @@
- #include <floatwin.hxx>
- #include <salprn.h>
- #include <svapp.hxx>
-+#include <window.hxx>
-
- #include <prex.h>
- #include <X11/Xatom.h>
-@@ -60,6 +61,11 @@
- #include <cstdio>
- #endif
-
-+#include <com/sun/star/accessibility/XAccessibleContext.hpp>
-+#include <com/sun/star/accessibility/AccessibleRole.hpp>
-+
-+using namespace com::sun::star;
-+
- int GtkSalFrame::m_nFloats = 0;
-
- static USHORT GetKeyModCode( guint state )
-@@ -405,13 +411,49 @@ GtkSalFrame::~GtkSalFrame()
- if( m_pFixedContainer )
- gtk_widget_destroy( GTK_WIDGET(m_pFixedContainer) );
- if( m_pWindow )
-+ {
-+ g_object_set_data( G_OBJECT( m_pWindow ), "SalFrame", NULL );
- gtk_widget_destroy( GTK_WIDGET(m_pWindow) );
-+ }
- if( m_pForeignParent )
- g_object_unref( G_OBJECT(m_pForeignParent) );
- if( m_pForeignTopLevel )
- g_object_unref(G_OBJECT( m_pForeignTopLevel) );
- }
-
-+/*
-+ * Always use a sub-class of GtkFixed we can tag for a11y. This allows us to
-+ * utilize GAIL for the toplevel window and toolkit implementation incl.
-+ * key event listener support ..
-+ */
-+
-+GType
-+ooo_fixed_get_type()
-+{
-+ static GType type = 0;
-+
-+ if (!type) {
-+ static const GTypeInfo tinfo =
-+ {
-+ sizeof (GtkFixedClass),
-+ (GBaseInitFunc) NULL, /* base init */
-+ (GBaseFinalizeFunc) NULL, /* base finalize */
-+ (GClassInitFunc) NULL, /* class init */
-+ (GClassFinalizeFunc) NULL, /* class finalize */
-+ NULL, /* class data */
-+ sizeof (GtkFixed), /* instance size */
-+ 0, /* nb preallocs */
-+ (GInstanceInitFunc) NULL, /* instance init */
-+ NULL /* value table */
-+ };
-+
-+ type = g_type_register_static( GTK_TYPE_FIXED, "OOoFixed",
-+ &tinfo, (GTypeFlags) 0);
-+ }
-+
-+ return type;
-+}
-+
- void GtkSalFrame::InitCommon()
- {
- // connect signals
-@@ -459,7 +501,7 @@ void GtkSalFrame::InitCommon()
-
- // add the fixed container child,
- // fixed is needed since we have to position plugin windows
-- m_pFixedContainer = GTK_FIXED(gtk_fixed_new());
-+ m_pFixedContainer = GTK_FIXED(g_object_new( ooo_fixed_get_type(), NULL ));
- gtk_container_add( GTK_CONTAINER(m_pWindow), GTK_WIDGET(m_pFixedContainer) );
- gtk_widget_show( GTK_WIDGET(m_pFixedContainer) );
-
-@@ -581,6 +623,102 @@ static void lcl_set_accept_focus( GtkWin
- }
- }
-
-+GtkSalFrame *GtkSalFrame::getFromWindow( GtkWindow *pWindow )
-+{
-+ return (GtkSalFrame *) g_object_get_data( G_OBJECT( pWindow ), "SalFrame" );
-+}
-+
-+AtkRole
-+GtkSalFrame::GetAtkRole( GtkWindow* window )
-+{
-+ static AtkRole aDefaultRole = ATK_ROLE_INVALID;
-+
-+ // Special role for sub-menu and combo-box popups that are exposed directly
-+ // by their parents already.
-+ if( aDefaultRole == ATK_ROLE_INVALID )
-+ aDefaultRole = atk_role_register( "redundant object" );
-+
-+ AtkRole role = aDefaultRole;
-+
-+ GtkSalFrame * pFrame = getFromWindow( window );
-+ if( pFrame )
-+ {
-+ Window *pWindow = static_cast <Window *> (pFrame->GetInstance());
-+ if( pWindow )
-+ {
-+ // Determine the appropriate role for the GtkWindow
-+ switch( pWindow->GetAccessibleRole() )
-+ {
-+ case accessibility::AccessibleRole::ALERT:
-+ role = ATK_ROLE_ALERT;
-+ break;
-+
-+ case accessibility::AccessibleRole::DIALOG:
-+ role = ATK_ROLE_DIALOG;
-+ break;
-+
-+ case accessibility::AccessibleRole::FRAME:
-+ role = ATK_ROLE_FRAME;
-+ break;
-+
-+ // Ignore window objects for sub-menus, which are exposed
-+ // as children of their parent menu
-+ case accessibility::AccessibleRole::WINDOW:
-+ {
-+ Window *pChild = pWindow->GetChild( 0 );
-+ if( pChild )
-+ {
-+ uno::Reference< accessibility::XAccessible > xAccessible( pChild->GetAccessible( true ) );
-+ if( xAccessible.is() )
-+ role = ATK_ROLE_WINDOW;
-+ }
-+ }
-+ break;
-+
-+ default:
-+ {
-+ Window *pChild = pWindow->GetChild( 0 );
-+ if( pChild )
-+ {
-+ if( WINDOW_HELPTEXTWINDOW == pChild->GetType() )
-+ {
-+ role = ATK_ROLE_TOOL_TIP;
-+ pChild->SetAccessibleRole( accessibility::AccessibleRole::LABEL );
-+ }
-+ }
-+ break;
-+ }
-+ }
-+ }
-+ }
-+
-+ return role;
-+}
-+
-+
-+// FIXME: rename as appropriate
-+uno::Reference< accessibility::XAccessible >
-+GtkSalFrame::getAccessible( bool bCreate )
-+{
-+ // Yes - this is a hack - but: this abstraction seems totally useless to me
-+ Window *pWindow = static_cast<Window *>(GetInstance());
-+
-+ g_return_val_if_fail( pWindow != NULL, NULL );
-+
-+ // skip the border window accessible
-+ if( pWindow->GetType() == WINDOW_BORDERWINDOW )
-+ {
-+ pWindow = pWindow->GetAccessibleChildWindow( 0 );
-+ g_return_val_if_fail( pWindow != NULL, NULL );
-+ }
-+ // replace the top-level role Dialog with something more appropriate ..
-+ else if( pWindow->GetAccessibleRole() == accessibility::AccessibleRole::ALERT ||
-+ pWindow->GetAccessibleRole() == accessibility::AccessibleRole::DIALOG )
-+ pWindow->SetAccessibleRole(accessibility::AccessibleRole::OPTION_PANE);
-+
-+ return pWindow->GetAccessible( bCreate );
-+}
-+
- void GtkSalFrame::Init( SalFrame* pParent, ULONG nStyle )
- {
- if( nStyle & SAL_FRAME_STYLE_DEFAULT ) // ensure default style
-@@ -590,6 +728,8 @@ void GtkSalFrame::Init( SalFrame* pParen
- }
-
- m_pWindow = GTK_WINDOW( gtk_widget_new( GTK_TYPE_WINDOW, "type", ((nStyle & SAL_FRAME_STYLE_FLOAT) && ! (nStyle & SAL_FRAME_STYLE_OWNERDRAWDECORATION)) ? GTK_WINDOW_POPUP : GTK_WINDOW_TOPLEVEL, "visible", FALSE, NULL ) );
-+ g_object_set_data( G_OBJECT( m_pWindow ), "SalFrame", this );
-+
- m_pParent = static_cast<GtkSalFrame*>(pParent);
- m_pForeignParent = NULL;
- m_aForeignParentWindow = None;
-cvs diff: Diffing vcl/unx/inc
-cvs diff: Diffing vcl/unx/inc/plugins
-cvs diff: Diffing vcl/unx/inc/plugins/gtk
-Index: vcl/unx/inc/plugins/gtk/atkbridge.hxx
-===================================================================
-RCS file: vcl/unx/inc/plugins/gtk/atkbridge.hxx
-diff -N vcl/unx/inc/plugins/gtk/atkbridge.hxx
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ vcl/unx/inc/plugins/gtk/atkbridge.hxx 12 Jan 2006 13:57:32 -0000 1.1.2.3
-@@ -0,0 +1,45 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile$
-+ *
-+ * $Revision$
-+ *
-+ * last change: $Author$ $Date$
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#ifndef __ATK_BRIDGE_HXX__
-+#define __ATK_BRIDGE_HXX__
-+
-+#ifndef _VCL_DLLAPI_H
-+#include <dllapi.h>
-+#endif
-+
-+void VCL_DLLPUBLIC InitAtkBridge(void);
-+
-+#endif
-Index: vcl/unx/inc/plugins/gtk/gtkframe.hxx
-===================================================================
-RCS file: /cvs/gsl/vcl/unx/inc/plugins/gtk/gtkframe.hxx,v
-retrieving revision 1.21
-retrieving revision 1.14.22.11
-diff -u -p -r1.21 -r1.14.22.11
---- vcl/unx/inc/plugins/gtk/gtkframe.hxx 19 Jan 2006 18:27:42 -0000 1.21
-+++ vcl/unx/inc/plugins/gtk/gtkframe.hxx 16 Feb 2006 11:08:18 -0000 1.14.22.11
-@@ -43,6 +43,9 @@
- #include <gdk/gdkkeysyms.h>
- #include <postx.h>
-
-+#include <com/sun/star/uno/Reference.hxx>
-+#include <com/sun/star/accessibility/XAccessible.hdl>
-+
- #ifndef _SV_SALFRAME_HXX
- #include <salframe.hxx>
- #endif
-@@ -355,7 +358,20 @@ public:
- virtual bool SetPluginParent( SystemParentData* pNewParent );
-
- virtual void SetBackgroundBitmap( SalBitmap* );
-+
-+ static GtkSalFrame *getFromWindow( GtkWindow *pWindow );
-+ ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > getAccessible( bool bCreate = true );
-+
-+ static AtkRole GetAtkRole( GtkWindow* window );
- };
-
-
-+#define OOO_TYPE_FIXED ooo_fixed_get_type()
-+
-+extern "C" {
-+
-+GType ooo_fixed_get_type( void );
-+
-+} // extern "C"
-+
- #endif //_VCL_GTKFRAME_HXX
-cvs diff: Diffing vcl/unx/inc/plugins/kde
-cvs diff: Diffing vcl/unx/kde
-cvs diff: Diffing vcl/unx/source
-cvs diff: Diffing vcl/unx/source/app
-cvs diff: Diffing vcl/unx/source/gdi
-cvs diff: Diffing vcl/unx/source/inc
-cvs diff: Diffing vcl/unx/source/plugadapt
-cvs diff: Diffing vcl/unx/source/src
-cvs diff: Diffing vcl/unx/source/window
-cvs diff: Diffing vcl/util
-Index: vcl/util/makefile.mk
-===================================================================
-RCS file: /cvs/gsl/vcl/util/makefile.mk,v
-retrieving revision 1.77
-retrieving revision 1.65.110.11
-diff -u -p -r1.77 -r1.65.110.11
---- vcl/util/makefile.mk 19 Dec 2005 17:21:56 -0000 1.77
-+++ vcl/util/makefile.mk 16 Feb 2006 11:08:19 -0000 1.65.110.11
-@@ -357,8 +357,10 @@ PKGCONFIG_MODULES=gtk+-2.0 gthread-2.0
- LIB4TARGET=$(SLB)$/igtk_plug_
- LIB4FILES=\
- $(SLB)$/gtkapp.lib\
-+ $(SLB)$/gtka11y.lib \
- $(SLB)$/gtkgdi.lib\
- $(SLB)$/gtkwin.lib
-+
- SHL4TARGET=vclplug_gtk$(UPD)$(DLLPOSTFIX)
- SHL4IMPLIB=igtk_plug_
- SHL4LIBS=$(LIB4TARGET)
diff --git a/patches/src680/cws-jl34.diff b/patches/src680/cws-jl34.diff
new file mode 100644
index 000000000..f12227f20
--- /dev/null
+++ b/patches/src680/cws-jl34.diff
@@ -0,0 +1,838 @@
+Index: xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx
+===================================================================
+RCS file: /cvs/xml/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx,v
+retrieving revision 1.11
+retrieving revision 1.11.34.1
+diff -u -p -u -p -r1.11 -r1.11.34.1
+--- xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx 11 Nov 2005 09:19:51 -0000 1.11
++++ xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx 9 May 2006 13:59:36 -0000 1.11.34.1
+@@ -1090,77 +1090,6 @@ sal_Int32 SecurityEnvironment_MSCryptImp
+ characters &= ~ ::com::sun::star::security::CertificateCharacters::HAS_PRIVATE_KEY ;
+ }
+ }
+-
+- //Thirdly, make sentence whether or not the cert is trusted.
+- {
+- HCERTSTORE hCollectionStore ;
+- PCCERT_CONTEXT pTempCert ;
+-
+- hCollectionStore = CertOpenStore(
+- CERT_STORE_PROV_COLLECTION ,
+- 0 ,
+- NULL ,
+- 0 ,
+- NULL
+- ) ;
+-
+- if( hCollectionStore != NULL ) {
+- HCERTSTORE hSystemStore ;
+-
+- //Add system key store to the collection.
+- hSystemStore = CertOpenSystemStore( 0, "MY" ) ;
+- if( hSystemStore != NULL ) {
+- CertAddStoreToCollection (
+- hCollectionStore ,
+- hSystemStore ,
+- CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG ,
+- 1
+- ) ;
+- CertCloseStore( hSystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+- }
+-
+- //Add system root store to the collection.
+- hSystemStore = CertOpenSystemStore( 0, "Root" ) ;
+- if( hSystemStore != NULL ) {
+- CertAddStoreToCollection (
+- hCollectionStore ,
+- hSystemStore ,
+- CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG ,
+- 2
+- ) ;
+- CertCloseStore( hSystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+- }
+-
+- //Add system trust store to the collection.
+- hSystemStore = CertOpenSystemStore( 0, "Trust" ) ;
+- if( hSystemStore != NULL ) {
+- CertAddStoreToCollection (
+- hCollectionStore ,
+- hSystemStore ,
+- CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG ,
+- 3
+- ) ;
+- CertCloseStore( hSystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+- }
+-
+- //Find the cert in the collection store.
+- pTempCert = CertFindCertificateInStore(
+- hCollectionStore ,
+- X509_ASN_ENCODING | PKCS_7_ASN_ENCODING ,
+- 0 ,
+- CERT_FIND_SUBJECT_NAME,
+- &( pCertContext->pCertInfo->Subject ) ,
+- NULL
+- ) ;
+-
+- if( pTempCert != NULL && CertCompareCertificate( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, pCertContext->pCertInfo, pTempCert->pCertInfo ) ) {
+- characters |= ::com::sun::star::security::CertificateCharacters::TRUSTED ;
+- } else {
+- characters &= ~ ::com::sun::star::security::CertificateCharacters::TRUSTED ;
+- }
+- }
+- }
+-
+ return characters ;
+ }
+
+Index: xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx
+===================================================================
+RCS file: /cvs/xml/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx,v
+retrieving revision 1.14
+retrieving revision 1.14.34.5
+diff -u -p -u -p -r1.14 -r1.14.34.5
+--- xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx 11 Nov 2005 09:20:54 -0000 1.14
++++ xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx 12 May 2006 13:22:21 -0000 1.14.34.5
+@@ -64,16 +64,19 @@
+ #include <xmlsec/strings.h>
+
+ #include <tools/string.hxx>
+-
++#include <rtl/ustrbuf.hxx>
+ #include <comphelper/processfactory.hxx>
+ #include <cppuhelper/servicefactory.hxx>
+ #include <svtools/docpasswdrequest.hxx>
+ #include <xmlsecurity/biginteger.hxx>
++#include <rtl/logfile.h>
+
+ #ifndef _COM_SUN_STAR_TASK_XINTERACTIONHANDLER_HPP_
+ #include <com/sun/star/task/XInteractionHandler.hpp>
+ #endif
+
++#include "boost/scoped_array.hpp"
++
+ // MM : added for password exception
+ #include <com/sun/star/security/NoPasswordException.hpp>
+ namespace csss = ::com::sun::star::security;
+@@ -121,7 +124,8 @@ char* GetPasswordFunction( PK11SlotInfo*
+ return NULL;
+ }
+
+-SecurityEnvironment_NssImpl :: SecurityEnvironment_NssImpl( const Reference< XMultiServiceFactory >& aFactory ) : m_pSlot( NULL ) , m_pHandler( NULL ) , m_tSymKeyList() , m_tPubKeyList() , m_tPriKeyList() {
++SecurityEnvironment_NssImpl :: SecurityEnvironment_NssImpl( const Reference< XMultiServiceFactory >& aFactory ) :
++m_pHandler( NULL ) , m_tSymKeyList() , m_tPubKeyList() , m_tPriKeyList() {
+
+ PK11_SetPasswordFunc( GetPasswordFunction ) ;
+ }
+@@ -130,9 +134,9 @@ SecurityEnvironment_NssImpl :: ~Security
+
+ PK11_SetPasswordFunc( NULL ) ;
+
+- if( m_pSlot != NULL ) {
+- PK11_FreeSlot( m_pSlot ) ;
+- m_pSlot = NULL ;
++ for (CIT_SLOTS i = m_Slots.begin(); i != m_Slots.end(); i++)
++ {
++ PK11_FreeSlot(*i);
+ }
+
+ if( !m_tSymKeyList.empty() ) {
+@@ -240,40 +244,30 @@ SecurityEnvironment_NssImpl* SecurityEnv
+ return NULL ;
+ }
+
+-/* Native methods */
+-PK11SlotInfo* SecurityEnvironment_NssImpl :: getCryptoSlot() throw( Exception , RuntimeException ) {
+- return m_pSlot ;
+-}
+
+ ::rtl::OUString SecurityEnvironment_NssImpl::getSecurityEnvironmentInformation() throw( ::com::sun::star::uno::RuntimeException )
+ {
+ rtl::OUString result;
+-
+- if( m_pSlot != NULL ) {
+- result = rtl::OUString::createFromAscii(PK11_GetTokenName(m_pSlot));
+- }
+- else{
+- result = rtl::OUString::createFromAscii( "Unknown Token" );
++ ::rtl::OUStringBuffer buff;
++ for (CIT_SLOTS is = m_Slots.begin(); is != m_Slots.end(); is++)
++ {
++ buff.append(rtl::OUString::createFromAscii(PK11_GetTokenName(*is)));
++ buff.appendAscii("\n");
+ }
+-
+- return result;
++ return buff.makeStringAndClear();
+ }
+
+-void SecurityEnvironment_NssImpl :: setCryptoSlot( PK11SlotInfo* aSlot) throw( Exception , RuntimeException ) {
+- if( m_pSlot != NULL ) {
+- PK11_FreeSlot( m_pSlot ) ;
+- m_pSlot = NULL ;
+- }
+-
+- if( aSlot != NULL ) {
+- m_pSlot = PK11_ReferenceSlot( aSlot ) ;
+- }
++void SecurityEnvironment_NssImpl::addCryptoSlot( PK11SlotInfo* aSlot) throw( Exception , RuntimeException )
++{
++ PK11_ReferenceSlot(aSlot);
++ m_Slots.push_back(aSlot);
+ }
+
+ CERTCertDBHandle* SecurityEnvironment_NssImpl :: getCertDb() throw( Exception , RuntimeException ) {
+ return m_pHandler ;
+ }
+
++//Could we have multiple cert dbs?
+ void SecurityEnvironment_NssImpl :: setCertDb( CERTCertDBHandle* aCertDb ) throw( Exception , RuntimeException ) {
+ m_pHandler = aCertDb ;
+ }
+@@ -440,27 +434,82 @@ SECKEYPrivateKey* SecurityEnvironment_Ns
+ return prikey ;
+ }
+
+-Sequence< Reference < XCertificate > > SecurityEnvironment_NssImpl :: getPersonalCertificates() throw( SecurityException , RuntimeException )
++void SecurityEnvironment_NssImpl::updateSlots()
++{
++ //In case new tokens are present then we can obtain the corresponding slot
++ PK11SlotList * soltList = NULL;
++ PK11SlotListElement * soltEle = NULL;
++ PK11SlotInfo * pSlot = NULL;
++ PK11SymKey * pSymKey = NULL;
++
++ osl::MutexGuard guard(m_mutex);
++
++ m_Slots.clear();
++ m_tSymKeyList.clear();
++
++ soltList = PK11_GetAllTokens( CKM_INVALID_MECHANISM, PR_FALSE, PR_FALSE, NULL ) ;
++ if( soltList != NULL )
++ {
++ for( soltEle = soltList->head ; soltEle != NULL; soltEle = soltEle->next )
++ {
++ pSlot = soltEle->slot ;
++
++ if(pSlot != NULL)
++ {
++ RTL_LOGFILE_TRACE2( "XMLSEC: Found a slot: SlotName=%s, TokenName=%s", PK11_GetSlotName(pSlot), PK11_GetTokenName(pSlot) );
++ pSymKey = PK11_KeyGen( pSlot , CKM_DES3_CBC, NULL, 128, NULL ) ;
++ if( pSymKey == NULL )
++ {
++ PK11_FreeSlot( pSlot ) ;
++ RTL_LOGFILE_TRACE( "XMLSEC: Error - pSymKey is NULL" );
++ continue;
++ }
++
++ addCryptoSlot(pSlot);
++ PK11_FreeSlot( pSlot ) ;
++ pSlot = NULL;
++
++ adoptSymKey( pSymKey ) ;
++ PK11_FreeSymKey( pSymKey ) ;
++ pSymKey = NULL;
++
++ }// end of if(pSlot != NULL)
++ }// end of for
++ }// end of if( soltList != NULL )
++
++}
++
++
++Sequence< Reference < XCertificate > >
++SecurityEnvironment_NssImpl::getPersonalCertificates() throw( SecurityException , RuntimeException )
+ {
+ sal_Int32 length ;
+ X509Certificate_NssImpl* xcert ;
+ std::list< X509Certificate_NssImpl* > certsList ;
+-
++
++ updateSlots();
+ //firstly, we try to find private keys in slot
+- if( m_pSlot != NULL ) {
++ for (CIT_SLOTS is = m_Slots.begin(); is != m_Slots.end(); is++)
++ {
++ PK11SlotInfo *slot = *is;
+ SECKEYPrivateKeyList* priKeyList ;
+ SECKEYPrivateKeyListNode* curPri ;
+
+- if( PK11_NeedLogin( m_pSlot ) ) {
+- SECStatus nRet = PK11_Authenticate( m_pSlot, PR_TRUE, NULL );
+- if( nRet != SECSuccess ) {
++ if( PK11_NeedLogin(slot ) ) {
++ SECStatus nRet = PK11_Authenticate(slot, PR_TRUE, NULL);
++ //PK11_Authenticate may fail in case the a slot has not been initialized.
++ //this is the case if the user has a new profile, so that they have never
++ //added a personal certificate.
++ if( nRet != SECSuccess && PORT_GetError() != SEC_ERROR_IO) {
+ throw NoPasswordException();
+ }
+ }
+
+- priKeyList = PK11_ListPrivateKeysInSlot( m_pSlot ) ;
++ priKeyList = PK11_ListPrivateKeysInSlot(slot) ;
+ if( priKeyList != NULL ) {
+- for( curPri = PRIVKEY_LIST_HEAD( priKeyList ); !PRIVKEY_LIST_END( curPri, priKeyList ) && curPri != NULL ; curPri = PRIVKEY_LIST_NEXT( curPri ) ) {
++ for( curPri = PRIVKEY_LIST_HEAD( priKeyList );
++ !PRIVKEY_LIST_END( curPri, priKeyList ) && curPri != NULL ;
++ curPri = PRIVKEY_LIST_NEXT( curPri ) ) {
+ xcert = NssPrivKeyToXCert( curPri->key ) ;
+ if( xcert != NULL )
+ certsList.push_back( xcert ) ;
+@@ -470,39 +519,6 @@ Sequence< Reference < XCertificate > > S
+ SECKEY_DestroyPrivateKeyList( priKeyList ) ;
+ }
+
+- //Deprecated
+- /*-------
+- {
+- PK11SlotList* soltList ;
+- PK11SlotListElement* soltEle ;
+-
+- SECKEYPrivateKeyList* priKeyList ;
+- SECKEYPrivateKeyListNode* curPri ;
+-
+- soltList = PK11_GetAllTokens( CKM_INVALID_MECHANISM, PR_FALSE, PR_FALSE, NULL ) ;
+- if( soltList != NULL ) {
+- for( soltEle = soltList->head; soltEle != NULL; soltEle = soltEle->next ) {
+- if( PK11_NeedLogin( soltEle->slot ) ) {
+- if( PK11_Authenticate( soltEle->slot, PR_TRUE, NULL ) != SECSuccess ) {
+- return NULL ;
+- }
+- }
+-
+- priKeyList = PK11_ListPrivateKeysInSlot( soltEle->slot ) ;
+- if( priKeyList != NULL ) {
+- for( curPri = PRIVKEY_LIST_HEAD( priKeyList ); !PRIVKEY_LIST_END( curPri, priKeyList ) && curPri != NULL ; curPri = PRIVKEY_LIST_NEXT( curPri ) ) {
+- xcert = NssPrivKeyToXCert( curPri->key ) ;
+- if( xcert != NULL )
+- certsList.push_back( xcert ) ;
+- }
+- }
+-
+- SECKEY_DestroyPrivateKeyList( priKeyList ) ;
+- }
+- }
+- }
+- ----------*/
+-
+ //secondly, we try to find certificate from registered private keys.
+ if( !m_tPriKeyList.empty() ) {
+ std::list< SECKEYPrivateKey* >::iterator priKeyIt ;
+@@ -794,7 +810,8 @@ sal_Int32 SecurityEnvironment_NssImpl ::
+ return validity ;
+ }
+
+-sal_Int32 SecurityEnvironment_NssImpl :: getCertificateCharacters( const ::com::sun::star::uno::Reference< ::com::sun::star::security::XCertificate >& aCert ) throw( ::com::sun::star::uno::SecurityException, ::com::sun::star::uno::RuntimeException ) {
++sal_Int32 SecurityEnvironment_NssImpl::getCertificateCharacters(
++ const ::com::sun::star::uno::Reference< ::com::sun::star::security::XCertificate >& aCert ) throw( ::com::sun::star::uno::SecurityException, ::com::sun::star::uno::RuntimeException ) {
+ sal_Int32 characters ;
+ const X509Certificate_NssImpl* xcert ;
+ const CERTCertificate* cert ;
+@@ -813,82 +830,41 @@ sal_Int32 SecurityEnvironment_NssImpl ::
+
+ characters = 0x00000000 ;
+
+- //Firstly, make sentence whether or not the cert is self-signed.
++ //Firstly, find out whether or not the cert is self-signed.
+ if( SECITEM_CompareItem( &(cert->derIssuer), &(cert->derSubject) ) == SECEqual ) {
+ characters |= ::com::sun::star::security::CertificateCharacters::SELF_SIGNED ;
+ } else {
+ characters &= ~ ::com::sun::star::security::CertificateCharacters::SELF_SIGNED ;
+ }
+
+- //Secondly, make sentence whether or not the cert has a private key.
++ //Secondly, find out whether or not the cert has a private key.
+
+ /*
+ * i40394
+ *
+ * mmi : need to check whether the cert's slot is valid first
+ */
+- {
+- SECKEYPrivateKey* priKey = NULL;
++ SECKEYPrivateKey* priKey = NULL;
+
+- if (cert->slot != NULL)
+- {
+- priKey = PK11_FindPrivateKeyFromCert( cert->slot, ( CERTCertificate* )cert, NULL ) ;
+- }
+-
+- if( priKey == NULL && m_pSlot != NULL && m_pSlot != cert->slot )
+- priKey = PK11_FindPrivateKeyFromCert( m_pSlot, ( CERTCertificate* )cert, NULL ) ;
+-
+- if( priKey != NULL ) {
+- characters |= ::com::sun::star::security::CertificateCharacters::HAS_PRIVATE_KEY ;
+-
+- SECKEY_DestroyPrivateKey( priKey ) ;
+- } else {
+- characters &= ~ ::com::sun::star::security::CertificateCharacters::HAS_PRIVATE_KEY ;
+- }
++ if (cert->slot != NULL)
++ {
++ priKey = PK11_FindPrivateKeyFromCert( cert->slot, ( CERTCertificate* )cert, NULL ) ;
+ }
+-
+- //Thirdly, make sentence whether or not the cert is trusted.
+- /*
++ if(priKey == NULL)
+ {
+- CERTCertificate* tempCert ;
+- CERTIssuerAndSN issuerAndSN ;
+-
+- memset( &issuerAndSN, 0, sizeof( issuerAndSN ) ) ;
+-
+- issuerAndSN.derIssuer.data = cert->derIssuer.data;
+- issuerAndSN.derIssuer.len = cert->derIssuer.len;
+-
+- issuerAndSN.serialNumber.data = cert->serialNumber.data;
+- issuerAndSN.serialNumber.len = cert->serialNumber.len;
+-
+- if( m_pSlot != NULL )
+- tempCert = PK11_FindCertByIssuerAndSN( NULL, &issuerAndSN, NULL ) ;
+- else
+- tempCert = NULL ;
+-
+- if( tempCert != NULL ) {
+- characters |= ::com::sun::star::security::CertificateCharacters::TRUSTED ;
+- CERT_DestroyCertificate( tempCert ) ;
+- } else {
+- characters &= ~ ::com::sun::star::security::CertificateCharacters::TRUSTED ;
++ for (CIT_SLOTS is = m_Slots.begin(); is != m_Slots.end(); is++)
++ {
++ priKey = PK11_FindPrivateKeyFromCert(*is, (CERTCertificate*)cert, NULL);
++ if (priKey)
++ break;
+ }
+ }
+- */
+-
+- {
+- CERTCertificate* tempCert ;
++ if( priKey != NULL ) {
++ characters |= ::com::sun::star::security::CertificateCharacters::HAS_PRIVATE_KEY ;
+
+- if( m_pSlot != NULL )
+- tempCert = PK11_FindCertFromDERCert( m_pSlot, ( CERTCertificate* )cert, NULL ) ;
+- else
+- tempCert = NULL ;
+-
+- if( tempCert != NULL ) {
+- characters |= ::com::sun::star::security::CertificateCharacters::TRUSTED ;
+- CERT_DestroyCertificate( tempCert ) ;
+- } else {
+- characters &= ~ ::com::sun::star::security::CertificateCharacters::TRUSTED ;
+- }
++ SECKEY_DestroyPrivateKey( priKey ) ;
++ } else {
++ characters &= ~ ::com::sun::star::security::CertificateCharacters::HAS_PRIVATE_KEY ;
+ }
+
+ return characters ;
+@@ -946,14 +922,20 @@ xmlSecKeysMngrPtr SecurityEnvironment_Ns
+ SECKEYPrivateKey* priKey = NULL ;
+ xmlSecKeysMngrPtr pKeysMngr = NULL ;
+
+- slot = this->getCryptoSlot() ;
+ handler = this->getCertDb() ;
+
+ /*-
+ * The following lines is based on the private version of xmlSec-NSS
+ * crypto engine
+ */
+- pKeysMngr = xmlSecNssAppliedKeysMngrCreate( slot , handler ) ;
++ int cSlots = m_Slots.size();
++ boost::scoped_array<PK11SlotInfo*> sarSlots(new PK11SlotInfo*[cSlots]);
++ PK11SlotInfo** slots = sarSlots.get();
++ int count = 0;
++ for (CIT_SLOTS islots = m_Slots.begin();islots != m_Slots.end(); islots++, count++)
++ slots[count] = *islots;
++
++ pKeysMngr = xmlSecNssAppliedKeysMngrCreate(slots, cSlots, handler ) ;
+ if( pKeysMngr == NULL )
+ throw RuntimeException() ;
+
+Index: xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.hxx
+===================================================================
+RCS file: /cvs/xml/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.hxx,v
+retrieving revision 1.6
+retrieving revision 1.6.54.2
+diff -u -p -u -p -r1.6 -r1.6.54.2
+--- xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.hxx 9 Sep 2005 17:33:57 -0000 1.6
++++ xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.hxx 12 May 2006 13:22:22 -0000 1.6.54.2
+@@ -92,6 +92,8 @@
+ #include <com/sun/star/lang/XUnoTunnel.hpp>
+ #endif
+
++#include "osl/mutex.hxx"
++
+ #include "pk11func.h"
+ #include "keyhi.h"
+ #include "certdb.h"
+@@ -105,9 +107,13 @@ class SecurityEnvironment_NssImpl : publ
+ ::com::sun::star::lang::XServiceInfo ,
+ ::com::sun::star::lang::XUnoTunnel >
+ {
+- private :
+-
+- PK11SlotInfo* m_pSlot ;
++private :
++
++ std::list< PK11SlotInfo* > m_Slots;
++ typedef std::list< PK11SlotInfo* >::const_iterator CIT_SLOTS;
++
++ osl::Mutex m_mutex;
++
+ CERTCertDBHandle* m_pHandler ;
+ std::list< PK11SymKey* > m_tSymKeyList ;
+ std::list< SECKEYPublicKey* > m_tPubKeyList ;
+@@ -158,10 +164,6 @@ class SecurityEnvironment_NssImpl : publ
+ static SecurityEnvironment_NssImpl* getImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xObj ) ;
+
+ //Native mehtods
+- virtual PK11SlotInfo* getCryptoSlot() throw( ::com::sun::star::uno::Exception , ::com::sun::star::uno::RuntimeException ) ;
+-
+- virtual void setCryptoSlot( PK11SlotInfo* aSlot ) throw( ::com::sun::star::uno::Exception , ::com::sun::star::uno::RuntimeException ) ;
+-
+ virtual CERTCertDBHandle* getCertDb() throw( ::com::sun::star::uno::Exception , ::com::sun::star::uno::RuntimeException ) ;
+
+ virtual void setCertDb( CERTCertDBHandle* aCertDb ) throw( ::com::sun::star::uno::Exception , ::com::sun::star::uno::RuntimeException ) ;
+@@ -200,6 +202,13 @@ class SecurityEnvironment_NssImpl : publ
+ //Native mehtods
+ virtual xmlSecKeysMngrPtr createKeysManager() throw( ::com::sun::star::uno::Exception , ::com::sun::star::uno::RuntimeException ) ;
+ virtual void destroyKeysManager(xmlSecKeysMngrPtr pKeysMngr) throw( ::com::sun::star::uno::Exception , ::com::sun::star::uno::RuntimeException ) ;
++
++private:
++ void updateSlots();
++
++ virtual void addCryptoSlot( PK11SlotInfo* aSlot ) throw( ::com::sun::star::uno::Exception , ::com::sun::star::uno::RuntimeException ) ;
++
++
+ } ;
+
+ #endif // _XSECURITYENVIRONMENT_NSSIMPL_HXX_
+Index: xmlsecurity/source/xmlsec/nss/seinitializer_nssimpl.cxx
+===================================================================
+RCS file: /cvs/xml/xmlsecurity/source/xmlsec/nss/seinitializer_nssimpl.cxx,v
+retrieving revision 1.15
+retrieving revision 1.15.54.3
+diff -u -p -u -p -r1.15 -r1.15.54.3
+--- xmlsecurity/source/xmlsec/nss/seinitializer_nssimpl.cxx 9 Sep 2005 17:34:13 -0000 1.15
++++ xmlsecurity/source/xmlsec/nss/seinitializer_nssimpl.cxx 12 May 2006 13:31:16 -0000 1.15.54.3
+@@ -182,9 +182,6 @@ cssu::Reference< cssxc::XXMLSecurityCont
+ throw (cssu::RuntimeException)
+ {
+ CERTCertDBHandle *pCertHandle = NULL ;
+- PK11SlotInfo *pSlot = NULL , *pInternalSlot = NULL ;
+- PK11SymKey *pSymKey = NULL ;
+- PRBool found;
+
+ rtl::OString sCertDir;
+ if( sCertDB.getLength() )
+@@ -244,144 +241,30 @@ cssu::Reference< cssxc::XXMLSecurityCont
+
+ pCertHandle = CERT_GetDefaultCertDB() ;
+
+- /*- i39448 - we will get all slots defined in the profile
+- * ---------- and alloc them in each SecurityEnviroment .
+- * ---------- By CP/20050105
+- --------------------------*/
+- pInternalSlot = PK11_GetInternalKeySlot() ;
+- if (pInternalSlot == NULL)
+- {
+- // PK11_LogoutAll();
+- // NSS_Shutdown();
+- RTL_LOGFILE_TRACE( "XMLSEC: Error - pInternalSlot is NULL!" );
+- return NULL;
+- }
+ try
+ {
+- PK11SlotList* soltList ;
+- PK11SlotListElement* soltEle ;
+-
+ /* Build XML Security Context */
+ const rtl::OUString sSecyrutyContext ( RTL_CONSTASCII_USTRINGPARAM( SECURITY_CONTEXT ) );
+ cssu::Reference< cssxc::XXMLSecurityContext > xSecCtx( mxMSF->createInstance ( sSecyrutyContext ), cssu::UNO_QUERY );
+ if( !xSecCtx.is() )
+- {
+- // PK11_LogoutAll();
+- // NSS_Shutdown();
+ return NULL;
+- }
+-
+- soltList = PK11_GetAllTokens( CKM_INVALID_MECHANISM, PR_FALSE, PR_FALSE, NULL ) ;
+- if( soltList != NULL ) {
+- for( soltEle = soltList->head ; soltEle != NULL; soltEle = soltEle->next )
+- {
+- RTL_LOGFILE_TRACE( "XMLSEC: Trying token..." );
+- found = PR_FALSE;
+-
+- pSlot = soltEle->slot ;
+-
+- if(pSlot != NULL){
+- RTL_LOGFILE_TRACE2( "XMLSEC: Found a slot: SlotName=%s, TokenName=%s", PK11_GetSlotName(pSlot), PK11_GetTokenName(pSlot) );
+- pSymKey = PK11_KeyGen( pSlot , CKM_DES3_CBC, NULL, 128, NULL ) ;
+- if( pSymKey == NULL )
+- {
+- PK11_FreeSlot( pSlot ) ;
+- // PK11_LogoutAll();
+- // NSS_Shutdown();
+- RTL_LOGFILE_TRACE( "XMLSEC: Error - pSymKey is NULL" );
+- return NULL;
+- }
+-
+- /* Build Security Environment */
+- const rtl::OUString sSecyrutyEnvironment ( RTL_CONSTASCII_USTRINGPARAM( SECURITY_ENVIRONMENT ) );
+- cssu::Reference< cssxc::XSecurityEnvironment > xSecEnv( mxMSF->createInstance ( sSecyrutyEnvironment ), cssu::UNO_QUERY );
+- if( !xSecEnv.is() )
+- {
+- PK11_FreeSymKey( pSymKey ) ;
+- PK11_FreeSlot( pSlot ) ;
+- // PK11_LogoutAll();
+- // NSS_Shutdown();
+- return NULL;
+- }
+-
+- /* Setup key slot and certDb */
+- cssu::Reference< cssl::XUnoTunnel > xEnvTunnel( xSecEnv , cssu::UNO_QUERY ) ;
+- if( !xEnvTunnel.is() )
+- {
+- PK11_FreeSymKey( pSymKey ) ;
+- PK11_FreeSlot( pSlot ) ;
+- // PK11_LogoutAll();
+- // NSS_Shutdown();
+- return NULL;
+- }
+-
+- SecurityEnvironment_NssImpl* pSecEnv = ( SecurityEnvironment_NssImpl* )xEnvTunnel->getSomething( SecurityEnvironment_NssImpl::getUnoTunnelId() ) ;
+- if( pSecEnv == NULL )
+- {
+- PK11_FreeSymKey( pSymKey ) ;
+- PK11_FreeSlot( pSlot ) ;
+- // PK11_LogoutAll();
+- // NSS_Shutdown();
+- return NULL;
+- }
+-
+- // search the internal slot.
+- //PR_fprintf(PR_STDOUT, "Token:%s\n",PK11_GetSlotName(pSlot));
+- //found = PK11_IsInternal(pSlot) ; //This method will return two true result.
+- if((!strcmp(PK11_GetSlotName(pInternalSlot),PK11_GetSlotName(pSlot))&&(!strcmp(PK11_GetTokenName(pInternalSlot),PK11_GetTokenName(pSlot)))))
+- {
+- found = PR_TRUE;
+- }
+-
+- pSecEnv->setCryptoSlot( pSlot ) ;
+- PK11_FreeSlot( pSlot ) ;
+- pSlot = NULL;
+-
+- pSecEnv->setCertDb( pCertHandle ) ;
+-
+- pSecEnv->adoptSymKey( pSymKey ) ;
+- PK11_FreeSymKey( pSymKey ) ;
+- pSymKey = NULL;
+-
+- sal_Int32 n = xSecCtx->addSecurityEnvironment( xSecEnv ) ;
+-
+- if(found != PR_FALSE)
+- {
+- RTL_LOGFILE_TRACE( "XMLSEC: Using this slot as the Default Security Environment." );
+- xSecCtx->setDefaultSecurityEnvironmentIndex( n ) ;
+- }
+-
+-
+- }// end of if(pSlot != NULL)
+- }// end of for
+- }// end of if( soltList != NULL )
+-
+- if(pInternalSlot != NULL)
+- {
+- PK11_FreeSlot(pInternalSlot) ;
+- pInternalSlot = NULL ;
+- }
+
++ const rtl::OUString sSecyrutyEnvironment ( RTL_CONSTASCII_USTRINGPARAM( SECURITY_ENVIRONMENT ) );
++ cssu::Reference< cssxc::XSecurityEnvironment > xSecEnv( mxMSF->createInstance ( sSecyrutyEnvironment ), cssu::UNO_QUERY );
++ cssu::Reference< cssl::XUnoTunnel > xEnvTunnel( xSecEnv , cssu::UNO_QUERY ) ;
++ if( !xEnvTunnel.is() )
++ return NULL;
++ SecurityEnvironment_NssImpl* pSecEnv = ( SecurityEnvironment_NssImpl* )xEnvTunnel->getSomething(
++ SecurityEnvironment_NssImpl::getUnoTunnelId() ) ;
++ pSecEnv->setCertDb(pCertHandle);
++
++ sal_Int32 n = xSecCtx->addSecurityEnvironment(xSecEnv);
++ //originally the SecurityEnvironment with the internal slot was set as default
++ xSecCtx->setDefaultSecurityEnvironmentIndex( n );
+ return xSecCtx;
+ }
+ catch( cssu::Exception& )
+ {
+- if (pSymKey != NULL)
+- {
+- PK11_FreeSymKey( pSymKey ) ;
+- }
+-
+- if (pSlot != NULL)
+- {
+- PK11_FreeSlot( pSlot ) ;
+- }
+-
+- if(pInternalSlot != NULL)
+- {
+- PK11_FreeSlot(pInternalSlot) ;
+- pInternalSlot = NULL ;
+- }
+-
+ //PK11_LogoutAll();
+ //NSS_Shutdown();
+ return NULL;
+@@ -403,6 +286,7 @@ void SAL_CALL SEInitializer_NssImpl::fre
+ rtl::OUString SEInitializer_NssImpl_getImplementationName ()
+ throw (cssu::RuntimeException)
+ {
++
+ return rtl::OUString ( RTL_CONSTASCII_USTRINGPARAM ( IMPLEMENTATION_NAME ) );
+ }
+
+Index: xmlsecurity/source/xmlsec/nss/xmlsecuritycontext_nssimpl.cxx
+===================================================================
+RCS file: /cvs/xml/xmlsecurity/source/xmlsec/nss/xmlsecuritycontext_nssimpl.cxx,v
+retrieving revision 1.3
+retrieving revision 1.3.54.1
+diff -u -p -u -p -r1.3 -r1.3.54.1
+--- xmlsecurity/source/xmlsec/nss/xmlsecuritycontext_nssimpl.cxx 9 Sep 2005 17:35:50 -0000 1.3
++++ xmlsecurity/source/xmlsec/nss/xmlsecuritycontext_nssimpl.cxx 5 May 2006 14:29:32 -0000 1.3.54.1
+@@ -189,14 +189,15 @@ void SAL_CALL XMLSecurityContext_NssImpl
+ //Create key manager
+ Reference< XUnoTunnel > xEnvTunnel( m_xSecurityEnvironment , UNO_QUERY ) ;
+ if( !xEnvTunnel.is() ) {
+- throw RuntimeException() ;
++ throw RuntimeException() ;^1
+ }
+
+ SecurityEnvironment_NssImpl* pSecEnv = ( SecurityEnvironment_NssImpl* )xEnvTunnel->getSomething( SecurityEnvironment_NssImpl::getUnoTunnelId() ) ;
+ if( pSecEnv == NULL )
+ throw RuntimeException() ;
+
+- slot = pSecEnv->getCryptoSlot() ;
++ //todo
++// slot = pSecEnv->getCryptoSlot() ;
+ handler = pSecEnv->getCertDb() ;
+
+ /*-
+Index: libxmlsec/xmlsec1-1.2.6.patch
+===================================================================
+RCS file: /cvs/external/libxmlsec/xmlsec1-1.2.6.patch,v
+retrieving revision 1.13
+retrieving revision 1.13.4.2
+diff -u -p -u -p -r1.13 -r1.13.4.2
+--- libxmlsec/xmlsec1-1.2.6.patch 9 Mar 2006 10:18:52 -0000 1.13
++++ libxmlsec/xmlsec1-1.2.6.patch 8 May 2006 10:27:01 -0000 1.13.4.2
+@@ -298,12 +298,12 @@
+
+ #endif /* XMLSEC_NO_X509 */
+
+-*** misc/xmlsec1-1.2.6/include/xmlsec/nss/akmngr.h 2005-10-25 16:18:25.229244000 +0200
+---- misc/build/xmlsec1-1.2.6/include/xmlsec/nss/akmngr.h 2005-10-25 16:17:20.875018000 +0200
++*** misc/xmlsec1-1.2.6/include/xmlsec/nss/akmngr.h 2006-05-08 12:20:35.464923000 +0200
++--- misc/build/xmlsec1-1.2.6/include/xmlsec/nss/akmngr.h 2006-05-08 12:19:38.888548000 +0200
+ ***************
+ *** 1 ****
+ ! dummy
+---- 1,55 ----
++--- 1,56 ----
+ ! /**
+ ! * XMLSec library
+ ! *
+@@ -330,7 +330,8 @@
+ !
+ ! XMLSEC_CRYPTO_EXPORT xmlSecKeysMngrPtr
+ ! xmlSecNssAppliedKeysMngrCreate(
+-! PK11SlotInfo* slot ,
++! PK11SlotInfo** slots,
++! int cSlots,
+ ! CERTCertDBHandle* handler
+ ! ) ;
+ !
+@@ -3282,12 +3283,12 @@
+ }
+ }
+ xmlFree(cName);
+-*** misc/xmlsec1-1.2.6/src/nss/akmngr.c 2005-10-25 16:18:25.389481000 +0200
+---- misc/build/xmlsec1-1.2.6/src/nss/akmngr.c 2005-10-25 16:17:21.304210000 +0200
++*** misc/xmlsec1-1.2.6/src/nss/akmngr.c 2006-05-08 12:20:35.581067000 +0200
++--- misc/build/xmlsec1-1.2.6/src/nss/akmngr.c 2006-05-08 12:20:20.572545000 +0200
+ ***************
+ *** 1 ****
+ ! dummy
+---- 1,381 ----
++--- 1,384 ----
+ ! /**
+ ! * XMLSec library
+ ! *
+@@ -3318,7 +3319,8 @@
+ !
+ ! /**
+ ! * xmlSecNssAppliedKeysMngrCreate:
+-! * @slot: the pointer to NSS PKCS#11 slot infomation.
++! * @slot: array of pointers to NSS PKCS#11 slot infomation.
++! * @cSlots: number of slots in the array
+ ! * @handler: the pointer to NSS certificate database.
+ ! *
+ ! * Create and load NSS crypto slot and certificate database into keys manager
+@@ -3327,13 +3329,14 @@
+ ! */
+ ! xmlSecKeysMngrPtr
+ ! xmlSecNssAppliedKeysMngrCreate(
+-! PK11SlotInfo* slot ,
++! PK11SlotInfo** slots,
++! int cSlots,
+ ! CERTCertDBHandle* handler
+ ! ) {
+ ! xmlSecKeyDataStorePtr certStore = NULL ;
+ ! xmlSecKeysMngrPtr keyMngr = NULL ;
+ ! xmlSecKeyStorePtr keyStore = NULL ;
+-!
++! int islot = 0;
+ ! keyStore = xmlSecKeyStoreCreate( xmlSecNssKeysStoreId ) ;
+ ! if( keyStore == NULL ) {
+ ! xmlSecError( XMLSEC_ERRORS_HERE ,
+@@ -3344,7 +3347,8 @@
+ ! return NULL ;
+ ! }
+ !
+-! if( slot != NULL ) {
++! for (islot = 0; islot < cSlots; islot++)
++! {
+ ! xmlSecNssKeySlotPtr keySlot ;
+ !
+ ! /* Create a key slot */
+@@ -3361,7 +3365,7 @@
+ ! }
+ !
+ ! /* Set slot */
+-! if( xmlSecNssKeySlotSetSlot( keySlot , slot ) < 0 ) {
++! if( xmlSecNssKeySlotSetSlot( keySlot , slots[islot] ) < 0 ) {
+ ! xmlSecError( XMLSEC_ERRORS_HERE ,
+ ! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
+ ! "xmlSecNssKeySlotSetSlot" ,
+Index: offapi/com/sun/star/security/CertificateCharacters.idl
+===================================================================
+RCS file: /cvs/api/offapi/com/sun/star/security/CertificateCharacters.idl,v
+retrieving revision 1.4
+retrieving revision 1.4.110.1
+diff -u -p -u -p -r1.4 -r1.4.110.1
+--- offapi/com/sun/star/security/CertificateCharacters.idl 8 Sep 2005 04:09:19 -0000 1.4
++++ offapi/com/sun/star/security/CertificateCharacters.idl 9 May 2006 14:15:53 -0000 1.4.110.1
+@@ -58,11 +58,6 @@ constants CertificateCharacters
+ const long SELF_SIGNED = 0x00000001 ;
+
+ /**
+- * It is a trusted certificate.
+- */
+- const long TRUSTED = 0x00000002 ;
+-
+- /**
+ * A private key binding with the certificate is in user's profile.
+ */
+ const long HAS_PRIVATE_KEY = 0x00000004 ;
diff --git a/patches/src680/dbase-utf8.diff b/patches/src680/dbase-utf8.diff
new file mode 100644
index 000000000..c45743a2e
--- /dev/null
+++ b/patches/src680/dbase-utf8.diff
@@ -0,0 +1,98 @@
+Index: connectivity/source/drivers/dbase/DTable.cxx
+===================================================================
+RCS file: /cvs/dba/connectivity/source/drivers/dbase/DTable.cxx,v
+retrieving revision 1.91
+diff -u -p -u -r1.91 DTable.cxx
+--- connectivity/source/drivers/dbase/DTable.cxx 16 Jan 2006 15:03:59 -0000 1.91
++++ connectivity/source/drivers/dbase/DTable.cxx 22 May 2006 11:17:42 -0000
+@@ -1650,8 +1650,8 @@ BOOL ODbaseTable::UpdateBuffer(OValueRef
+
+ // convert the string, using the connection's encoding
+ ::rtl::OString sEncoded;
+- DBTypeConversion::convertUnicodeString( sStringToWrite, sEncoded, getConnection()->getTextEncoding() );
+- memcpy( pData, sEncoded.getStr(), ::std::min( nLen, sEncoded.getLength() ) );
++ DBTypeConversion::convertUnicodeStringToLength( sStringToWrite, sEncoded, nLen, getConnection()->getTextEncoding() );
++ memcpy( pData, sEncoded.getStr(), sEncoded.getLength() );
+
+ }
+ break;
+Index: connectivity/source/commontools/dbtools2.cxx
+===================================================================
+RCS file: /cvs/dba/connectivity/source/commontools/dbtools2.cxx,v
+retrieving revision 1.14
+diff -u -p -u -r1.14 dbtools2.cxx
+--- connectivity/source/commontools/dbtools2.cxx 8 Sep 2005 05:15:04 -0000 1.14
++++ connectivity/source/commontools/dbtools2.cxx 22 May 2006 11:17:42 -0000
+@@ -877,6 +877,32 @@ sal_Int32 DBTypeConversion::convertUnico
+
+ return _rDest.getLength();
+ }
++
++#include <stdio.h>
++
++sal_Int32 DBTypeConversion::convertUnicodeStringToLength(
++ const ::rtl::OUString& _rSource,
++ ::rtl::OString& _rDest,
++ sal_Int32 _nToLength,
++ rtl_TextEncoding _eEncoding
++)
++{
++ /* this could clearly be optimized several ways */
++ sal_Int32 nLen = 0, nSize;
++ for (nSize = _rSource.getLength(); nSize > 0; nSize--) {
++ if ((nLen = convertUnicodeString (_rSource.copy(0, nSize),
++ _rDest, _eEncoding)) > _nToLength)
++ _rDest = rtl::OString();
++ else
++ break;
++ }
++ if (nSize != _rSource.getLength())
++ fprintf (stderr, "Truncated string '%s' to '%s' %d %d\n",
++ rtl::OUStringToOString(_rSource, RTL_TEXTENCODING_UTF8).getStr(),
++ _rDest.getStr(), nLen, _nToLength);
++
++ return ::std::min (nLen, _nToLength);
++}
+ //.........................................................................
+ } // namespace dbtools
+ //.........................................................................
+Index: dbaccess/source/ui/dlg/detailpages.cxx
+===================================================================
+RCS file: /cvs/dba/dbaccess/source/ui/dlg/detailpages.cxx,v
+retrieving revision 1.38
+diff -u -p -u -r1.38 detailpages.cxx
+--- dbaccess/source/ui/dlg/detailpages.cxx 23 Sep 2005 12:29:50 -0000 1.38
++++ dbaccess/source/ui/dlg/detailpages.cxx 22 May 2006 11:31:08 -0000
+@@ -359,8 +359,8 @@ DBG_NAME(OCommonBehaviourTabPage)
+ if (pTypeCollection && pConnectUrl && pConnectUrl->GetValue().Len())
+ eDSType = pTypeCollection->getType(pConnectUrl->GetValue());
+
+- // the only types we're interested in is TEXT and DBASE
+- if ( ( DST_DBASE == eDSType ) || ( DST_FLAT == eDSType ) )
++ // the only type we're interested in is TEXT
++ if ( DST_FLAT == eDSType )
+ {
+ // for these types, we need to exclude all encodings which do not have a fixed character
+ // length (such as UTF-8)
+Index: connectivity/inc/connectivity/dbconversion.hxx
+===================================================================
+RCS file: /cvs/dba/connectivity/inc/connectivity/dbconversion.hxx,v
+retrieving revision 1.13
+diff -u -p -u -r1.13 dbconversion.hxx
+--- connectivity/inc/connectivity/dbconversion.hxx 8 Sep 2005 05:00:55 -0000 1.13
++++ connectivity/inc/connectivity/dbconversion.hxx 22 May 2006 18:47:39 -0000
+@@ -197,6 +197,14 @@ namespace dbtools
+ rtl_TextEncoding _eEncoding
+ )
+ SAL_THROW((::com::sun::star::sdbc::SQLException));
++
++ static sal_Int32 convertUnicodeStringToLength(
++ const ::rtl::OUString& _rSource,
++ ::rtl::OString& _rDest,
++ sal_Int32 _nToLength,
++ rtl_TextEncoding _eEncoding
++ )
++ SAL_THROW((::com::sun::star::sdbc::SQLException));
+ };
+
+ //.........................................................................
diff --git a/patches/src680/debian-dictionary.diff b/patches/src680/debian-dictionary.diff
new file mode 100644
index 000000000..9138d7db9
--- /dev/null
+++ b/patches/src680/debian-dictionary.diff
@@ -0,0 +1,22 @@
+--- extras/source/wordbook/makefile.mk~ 2006-03-13 13:44:07.259949000 +0100
++++ extras/source/wordbook/makefile.mk 2006-03-14 00:07:22.129949000 +0100
+@@ -47,7 +47,7 @@
+
+ ZIP1TARGET = $(WORDBOOK_ALL_TARGET)
+
+-ZIP1LIST = sun.dic Novell.dic
++ZIP1LIST = Debian.dic
+
+
+ ZIP2TARGET = $(WORDBOOK_USER_TARGET)
+--- officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs~ 2006-03-13 13:44:07.259949000 +0100
++++ officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs 2006-03-14 00:08:10.669949000 +0100
+@@ -118,7 +118,7 @@
+ <desc>Specifies the custom dictionaries to be used. The Ignore list (IgnoreAllList (All)) is administered in the RAM only for the current spellcheck.</desc>
+ <label>Custom dictionaries</label>
+ </info>
+- <value oor:separator=";">IgnoreAllList;soffice.dic;standard.dic;Novell.dic;sun.dic;corporate.dic</value>
++ <value oor:separator=";">IgnoreAllList;soffice.dic;standard.dic;Debian.dic;corporate.dic</value>
+ </prop>
+ <prop oor:name="IsUseDictionaryList" oor:type="xs:boolean">
+ <!-- OldLocation: NEW -->
diff --git a/patches/src680/fix-fileview-search.diff b/patches/src680/fix-fileview-search.diff
new file mode 100644
index 000000000..2af3018b9
--- /dev/null
+++ b/patches/src680/fix-fileview-search.diff
@@ -0,0 +1,20 @@
+--- svtools/source/contnr/fileview.cxx.m163 2006-04-21 00:53:00.000000000 +0800
++++ svtools/source/contnr/fileview.cxx 2006-04-21 15:08:15.000000000 +0800
+@@ -1105,10 +1105,13 @@
+ if ( bFound )
+ {
+ SvLBoxEntry* pEntry = GetEntry( mnSearchIndex );
+- SelectAll( FALSE );
+- Select( pEntry );
+- SetCurEntry( pEntry );
+- MakeVisible( pEntry );
++ if( pEntry != NULL )
++ {
++ SelectAll( FALSE );
++ Select( pEntry );
++ SetCurEntry( pEntry );
++ MakeVisible( pEntry );
++ }
+ }
+ else
+ Sound::Beep();
diff --git a/patches/src680/fix_filedlghelper.diff b/patches/src680/fix_filedlghelper.diff
new file mode 100644
index 000000000..186112ecc
--- /dev/null
+++ b/patches/src680/fix_filedlghelper.diff
@@ -0,0 +1,31 @@
+--- sfx2/source/dialog/filedlghelper.cxx.old 2006-04-14 19:21:26.000000000 +0200
++++ sfx2/source/dialog/filedlghelper.cxx 2006-04-14 19:21:43.000000000 +0200
+@@ -102,6 +102,12 @@
+ #ifndef _COM_SUN_STAR_UCB_INTERACTIVEAUGMENTEDIOEXCEPTION_HPP_
+ #include <com/sun/star/ucb/InteractiveAugmentedIOException.hpp>
+ #endif
++#ifndef _COM_SUN_STAR_UCB_INTERACTIVENETWORKGENERALEXCEPTION_HPP_
++#include <com/sun/star/ucb/InteractiveNetworkGeneralException.hpp>
++#endif
++#ifndef _COM_SUN_STAR_IO_IOEXCEPTION_HPP_
++#include <com/sun/star/io/IOException.hpp>
++#endif
+
+ #ifndef _COMPHELPER_PROCESSFACTORY_HXX_
+ #include <comphelper/processfactory.hxx>
+@@ -2404,6 +2410,15 @@ int impl_isFolder( const OUString& rPath
+ catch ( star::ucb::InteractiveAugmentedIOException const & )
+ {
+ }
++ catch ( star::uno::RuntimeException const & )
++ {
++ }
++ catch ( star::ucb::InteractiveNetworkGeneralException const & )
++ {
++ }
++ catch ( star::io::IOException const & )
++ {
++ }
+
+ return -1;
+ }
diff --git a/patches/src680/framework-check-items.diff b/patches/src680/framework-check-items.diff
new file mode 100644
index 000000000..9a2639289
--- /dev/null
+++ b/patches/src680/framework-check-items.diff
@@ -0,0 +1,16 @@
+Index: framework/source/uielement/menubarmanager.cxx
+===================================================================
+RCS file: /cvs/framework/framework/source/uielement/menubarmanager.cxx,v
+retrieving revision 1.30
+diff -u -r1.30 menubarmanager.cxx
+--- framework/source/uielement/menubarmanager.cxx 5 Jan 2006 18:11:17 -0000 1.30
++++ framework/source/uielement/menubarmanager.cxx 21 Mar 2006 13:05:54 -0000
+@@ -733,6 +733,8 @@
+ // Checkmark
+ m_pVCLMenu->ShowItem( pMenuItemHandler->nItemId, TRUE );
+ m_pVCLMenu->CheckItem( pMenuItemHandler->nItemId, bCheckmark );
++ m_pVCLMenu->SetItemBits( pMenuItemHandler->nItemId,
++ m_pVCLMenu->GetItemBits( pMenuItemHandler->nItemId ) | MIB_CHECKABLE );
+ }
+ else if ( Event.State >>= aItemText )
+ {
diff --git a/patches/src680/framework-nofocussteal.diff b/patches/src680/framework-nofocussteal.diff
index 0adb7b449..bd09d1ad9 100644
--- a/patches/src680/framework-nofocussteal.diff
+++ b/patches/src680/framework-nofocussteal.diff
@@ -1,1080 +1,61 @@
-diff -ru vcl.preconfig/inc/outdev.h vcl/inc/outdev.h
---- openoffice.org.orig/vcl/inc/outdev.h 2005-09-12 13:37:38.000000000 +0100
-+++ vcl/inc/outdev.h 2005-09-12 14:10:15.000000000 +0100
-@@ -239,7 +239,8 @@
- const Font& rFont, const Size& rSize, ImplFontSubstEntry* pDevSpecific );
- ImplFontEntry* GetFallback( ImplDevFontList* pFontList,
- const Font& rFont, const Size& rSize,
-- int nFallbackLevel );
-+ int nFallbackLevel, sal_Unicode *pMissingUnicodes,
-+ int nMissingUnicodes );
- void Release( ImplFontEntry* );
- void Invalidate();
- };
-diff -ru vcl.preconfig/inc/outfont.hxx vcl/inc/outfont.hxx
---- openoffice.org.orig/vcl/inc/outfont.hxx 2005-09-12 13:37:38.000000000 +0100
-+++ vcl/inc/outfont.hxx 2005-09-12 14:48:01.000000000 +0100
-@@ -252,6 +252,7 @@
- ImplDevFontListData* FindFontFamily( const String& rFontName ) const;
- ImplDevFontListData* ImplFindByFont( ImplFontSelectData&, bool bPrinter, ImplFontSubstEntry* pDevSpecificSubst ) const;
- ImplDevFontListData* ImplFindBySearchName( const String& ) const;
-+ ImplDevFontListData* ImplGetFontconfigSubstitute( ImplFontSelectData &rFontSelData, ImplFontSubstEntry* pDevSpecific );
-
- bool HasFallbacks() const;
- void SetFallbacks( ImplDevFontListData**, int nCount );
-@@ -354,6 +355,10 @@
- ImplFontEntry( const ImplFontSelectData& );
- virtual ~ImplFontEntry() {}
-
-+ // cache of Unicode characters and replacement font names
-+ typedef ::std::hash_map<sal_Unicode,String> UnicodeFallbackList;
-+ UnicodeFallbackList maUnicodeFallbackList;
-+
- public: // TODO: make data members private
- ImplFontSelectData maFontSelData; // FontSelectionData
- ImplFontMetricData maMetric; // Font Metric
-@@ -364,6 +369,16 @@
- short mnOwnOrientation; // text angle if lower layers don't rotate text themselves
- short mnOrientation; // text angle in 3600 system
- bool mbInit; // true if maMetric member is valid
-+
-+ void AddFallbackForUnicode( sal_Unicode ch, String fallback )
-+ { maUnicodeFallbackList[ch] = fallback; }
-+ String GetFallbackForUnicode( sal_Unicode ch )
-+ {
-+ UnicodeFallbackList::const_iterator it = maUnicodeFallbackList.find( ch );
-+ if ( it != maUnicodeFallbackList.end() )
-+ return (*it).second;
-+ return String();
-+ }
- };
-
-
-diff -ru vcl.preconfig/source/gdi/outdev3.cxx vcl/source/gdi/outdev3.cxx
---- openoffice.org.orig/vcl/source/gdi/outdev3.cxx 2005-09-12 13:37:04.000000000 +0100
-+++ vcl/source/gdi/outdev3.cxx 2005-09-12 15:26:08.000000000 +0100
-@@ -168,6 +168,9 @@
- #include <memory>
- #include <algorithm>
-
-+#include <psprint/fontmanager.hxx>
-+#include <tools/isolang.hxx>
-+
- // =======================================================================
-
- DBG_NAMEEX( OutputDevice );
-@@ -2656,6 +2659,124 @@ ImplFontCache::~ImplFontCache()
- }
- }
-
-+
-+// -----------------------------------------------------------------------
-+
-+String GetFcSubstitute(const ImplFontSelectData &rFontSelData, sal_Unicode *pMissingGlyphs=0, int nMissingGlyphs=0)
-+{
-+ std::vector<String> aNames;
-+ if( rFontSelData.GetFamilyName().Len() )
-+ {
-+ sal_uInt16 nIndex = 0;
-+ String aTempName;
-+ do
-+ {
-+ aTempName = GetNextFontToken(rFontSelData.GetFamilyName(), nIndex);
-+ aNames.push_back(aTempName);
-+ }
-+ while (nIndex != STRING_NOTFOUND);
-+ }
-+
-+ std::vector<sal_Unicode> aGlyphs;
-+ for (int i=0; i < nMissingGlyphs; ++i)
-+ aGlyphs.push_back(pMissingGlyphs[i]);
-+
-+ ByteString aLangAttrib = ConvertLanguageToIsoByteString( rFontSelData.meLanguage );
-+
-+ psp::italic::type eItalic = psp::italic::Unknown;
-+ if( rFontSelData.GetSlant() != ITALIC_DONTKNOW )
-+ {
-+ switch( rFontSelData.GetSlant() )
-+ {
-+ case ITALIC_NORMAL: eItalic = psp::italic::Italic; break;
-+ case ITALIC_OBLIQUE: eItalic = psp::italic::Oblique; break;
-+ default:
-+ break;
-+ }
-+ }
-+
-+ psp::weight::type eWeight = psp::weight::Unknown;
-+ if( rFontSelData.GetWeight() != WEIGHT_DONTKNOW )
-+ {
-+ switch( rFontSelData.GetWeight() )
-+ {
-+ case WEIGHT_THIN: eWeight = psp::weight::Thin; break;
-+ case WEIGHT_ULTRALIGHT: eWeight = psp::weight::UltraLight; break;
-+ case WEIGHT_LIGHT: eWeight = psp::weight::Light; break;
-+ case WEIGHT_SEMILIGHT: eWeight = psp::weight::SemiLight; break;
-+ case WEIGHT_NORMAL: eWeight = psp::weight::Normal; break;
-+ case WEIGHT_MEDIUM: eWeight = psp::weight::Medium; break;
-+ case WEIGHT_SEMIBOLD: eWeight = psp::weight::SemiBold; break;
-+ case WEIGHT_BOLD: eWeight = psp::weight::Bold; break;
-+ case WEIGHT_ULTRABOLD: eWeight = psp::weight::UltraBold; break;
-+ case WEIGHT_BLACK: eWeight = psp::weight::Black; break;
-+ default:
-+ break;
-+ }
-+ }
-+
-+ psp::width::type eWidth = psp::width::Unknown;
-+ if( rFontSelData.GetWidthType() != WIDTH_DONTKNOW )
-+ {
-+ switch( rFontSelData.GetWidthType() )
-+ {
-+ case WIDTH_ULTRA_CONDENSED: eWidth = psp::width::UltraCondensed; break;
-+ case WIDTH_EXTRA_CONDENSED: eWidth = psp::width::ExtraCondensed; break;
-+ case WIDTH_CONDENSED: eWidth = psp::width::Condensed; break;
-+ case WIDTH_SEMI_CONDENSED: eWidth = psp::width::SemiCondensed; break;
-+ case WIDTH_NORMAL: eWidth = psp::width::Normal; break;
-+ case WIDTH_SEMI_EXPANDED: eWidth = psp::width::SemiExpanded; break;
-+ case WIDTH_EXPANDED: eWidth = psp::width::Expanded; break;
-+ case WIDTH_EXTRA_EXPANDED: eWidth = psp::width::ExtraExpanded; break;
-+ case WIDTH_ULTRA_EXPANDED: eWidth = psp::width::UltraExpanded; break;
-+ default:
-+ break;
-+ }
-+ }
-+
-+ psp::pitch::type ePitch = psp::pitch::Unknown;
-+ if( rFontSelData.GetPitch() != PITCH_DONTKNOW )
-+ {
-+ switch( rFontSelData.GetPitch() )
-+ {
-+ case PITCH_FIXED: ePitch=psp::pitch::Fixed; break;
-+ case PITCH_VARIABLE: ePitch=psp::pitch::Variable; break;
-+ default:
-+ break;
-+ }
-+ }
-+
-+ const psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
-+ return rMgr.Substitute(aNames, aGlyphs, aLangAttrib, eItalic, eWeight, eWidth, ePitch);
-+}
-+
-+// -----------------------------------------------------------------------
-+
-+ImplDevFontListData *ImplDevFontList::ImplGetFontconfigSubstitute( ImplFontSelectData &rFontSelData, ImplFontSubstEntry* pDevSpecific )
-+{
-+ // We dont' actually want to talk to Fontconfig at all for symbol fonts
-+ if (rFontSelData.IsSymbolFont())
-+ return 0;
-+ // StarSymbol is a unicode font, but it still deserves the symbol flag
-+ if( 0 == rFontSelData.maSearchName.CompareIgnoreCaseToAscii( "starsymbol", 10)
-+ || 0 == rFontSelData.maSearchName.CompareIgnoreCaseToAscii( "opensymbol", 10) )
-+ return 0;
-+
-+ String aName(GetFcSubstitute(rFontSelData));
-+ if (!aName.Len())
-+ return 0;
-+
-+ String aUserName(aName);
-+ ImplGetEnglishSearchFontName( aName );
-+ ImplFontSubstitute( aName, FONT_SUBSTITUTE_ALWAYS, pDevSpecific );
-+ ImplDevFontListData *pFontFamily = ImplFindBySearchName( aName );
-+ if (pFontFamily)
-+ rFontSelData.maTargetName = aUserName;
-+
-+ return pFontFamily;
-+}
-+
-+
- // -----------------------------------------------------------------------
-
- ImplFontEntry* ImplFontCache::Get( ImplDevFontList* pFontList,
-@@ -2693,8 +2814,12 @@ ImplFontEntry* ImplFontCache::Get( ImplD
-
- if( !pEntry ) // no direct cache hit
- {
-- // find the best matching logical font family and update font selector accordingly
-- pFontFamily = pFontList->ImplFindByFont( aFontSelData, mbPrinter, pDevSpecific );
-+ pFontFamily = pFontList->ImplGetFontconfigSubstitute( aFontSelData, pDevSpecific );
-+ if (!pFontFamily)
-+ {
-+ // find the best matching logical font family and update font selector accordingly
-+ pFontFamily = pFontList->ImplFindByFont( aFontSelData, mbPrinter, pDevSpecific );
-+ }
- DBG_ASSERT( (pFontFamily != NULL), "ImplFontCache::Get() No logical font found!" );
- aFontSelData.maSearchName = pFontFamily->GetSearchName();
-
-@@ -3014,116 +3139,101 @@ ImplDevFontListData* ImplDevFontList::Im
- // -----------------------------------------------------------------------
-
- ImplFontEntry* ImplFontCache::GetFallback( ImplDevFontList* pFontList,
-- const Font& rOrigFont, const Size& rSize, int nFallbackLevel )
-+ const Font& rOrigFont, const Size& rSize, int nFallbackLevel,
-+ sal_Unicode *pMissingUnicodes, int nMissingUnicodes )
- {
-- // make sure the fontlist knows it's fallbacks
-- if( !pFontList->HasFallbacks() )
-+ ImplFontEntry* pFallbackFont = NULL;
-+ bool cached = false;
-+ bool new_entry = false;
-+ bool symbolFont = false;
-+ ImplFontEntry* pOrigFontEntry = Get( pFontList, rOrigFont, rSize, NULL );
-+ ImplFontSelectData aSelData( rOrigFont, rOrigFont.GetName(), rSize );
-+ sal_uInt16 nToken = 0;
-+ String aOrigFontName( GetNextFontToken(rOrigFont.GetName(), nToken) );
-+
-+ const FontSubstConfigItem& rFontSubst = *FontSubstConfigItem::get();
-+ const FontNameAttr* fontAttr = rFontSubst.getSubstInfo( aOrigFontName );
-+
-+ // We dont' actually want to talk to Fontconfig at all for symbol fonts
-+ if ( pFontList && fontAttr && (fontAttr->Type & IMPL_FONT_ATTR_SYMBOL) )
- {
-- // normalized family names of fonts suited for glyph fallback
-- // if a font is available related fonts can be ignored
-- // TODO: implement dynamic lists
-- static const char* aGlyphFallbackList[] = {
-- // empty strings separate the names of unrelated fonts
-- "eudc", "",
-- "arialunicodems", "cyberbit", "code2000", "",
-- "andalesansui", "",
-- "starsymbol", "opensymbol", "",
-- "msmincho", "fzmingti", "fzheiti", "ipamincho", "sazanamimincho", "kochimincho", "",
-- "sunbatang", "sundotum", "baekmukdotum", "gulim", "batang", "dotum", "",
-- "hgmincholightj", "msunglightsc", "msunglighttc", "hymyeongjolightk", "",
-- "tahoma", "timesnewroman", "lucidatypewriter", "lucidasans", "nimbussansl", "",
-- "shree", "mangal", "raavi", "shruti", "tunga", "latha", "",
-- "shayyalmt", "naskmt", "",
-- "david", "nachlieli", "lucidagrande", "",
-- "norasi", "angsanaupc", "",
-- "khmerossystem", "",
-- "phetsarathot", "",
-- 0
-- };
--
-- bool bHasEudc = false;
-- int nMaxLevel = 0;
-- int nBestQuality = 0;
-- ImplDevFontListData** pFallbackList = NULL;
-- for( const char** ppNames = &aGlyphFallbackList[0];; ++ppNames )
-+ if ( fontAttr->Substitutions.size() )
- {
-- // advance to next sub-list when end-of-sublist marker
-- if( !**ppNames ) // #i46456# check for empty string, i.e., deref string itself not only ptr to it
-+ ::std::vector< String >::const_iterator it = fontAttr->Substitutions.begin();
-+ while ( it != fontAttr->Substitutions.end() )
- {
-- if( nBestQuality > 0 )
-- if( ++nMaxLevel >= MAX_FALLBACK )
-- break;
-- if( !ppNames[1] )
-+ // Since *it is the "search name" like "standardsymbolsl"
-+ // we have to find the Family Name (Standard Symbols L) for Fontconfig
-+ ImplDevFontListData* pFontFamily = pFontList->FindFontFamily( *it );
-+ if (pFontFamily)
-+ {
-+ aSelData.maSearchName = pFontFamily->GetFamilyName();
- break;
-- nBestQuality = 0;
-- continue;
-+ }
-+ ++it;
- }
-+ }
-+ symbolFont = true;
-+ cached = true;
-+ }
-
-- // test if the glyph fallback candidate font is available and scalable
-- String aTokenName( *ppNames, RTL_TEXTENCODING_UTF8 );
-- ImplDevFontListData* pFallbackFont = pFontList->FindFontFamily( aTokenName );
-- if( !pFallbackFont )
-- continue;
-- if( !pFallbackFont->IsScalable() )
-- continue;
-+ // Try cached fallbacks first
-+ if ( !symbolFont && (nMissingUnicodes > 0) )
-+ {
-+ aSelData.maSearchName = pOrigFontEntry->GetFallbackForUnicode( pMissingUnicodes[0] );
-+ if ( aSelData.maSearchName.Len() )
-+ cached = true;
-+ }
-
-- // keep the best font of the glyph fallback sub-list
-- if( nBestQuality < pFallbackFont->GetMinQuality() )
-- {
-- nBestQuality = pFallbackFont->GetMinQuality();
-- // store available glyph fallback fonts
-- if( !pFallbackList )
-- pFallbackList = new ImplDevFontListData*[ MAX_FALLBACK ];
-- pFallbackList[ nMaxLevel ] = pFallbackFont;
-- if( !bHasEudc && !nMaxLevel )
-- bHasEudc = (0 == strncmp( *ppNames, "eudc", 5 ));
-- }
-- }
-+ if ( !cached )
-+ {
-+ String aName(GetFcSubstitute( aSelData, pMissingUnicodes, nMissingUnicodes ));
-+ if (aName.Len())
-+ aSelData.maSearchName = aName;
-+ }
-
-- // sort the list of fonts for glyph fallback by quality (highest first)
-- // #i33947# keep the EUDC font at the front of the list
-- // an insertion sort is good enough for this short list
-- const int nSortStart = bHasEudc ? 1 : 0;
-- for( int i = nSortStart+1, j; i < nMaxLevel; ++i )
-- {
-- ImplDevFontListData* pTestFont = pFallbackList[ i ];
-- int nTestQuality = pTestFont->GetMinQuality();
-- for( j = i; --j >= nSortStart; )
-- if( nTestQuality > pFallbackList[j]->GetMinQuality() )
-- pFallbackList[ j+1 ] = pFallbackList[ j ];
-- else
-- break;
-- pFallbackList[ j+1 ] = pTestFont;
-- }
-+ // Check our font instance cache first, if not found then
-+ // add this ImplFontSelectData to the cache along with its ImplFontEntry
-+ FontInstanceList::const_iterator it = maFontInstanceList.find( aSelData );
-+ if (it != maFontInstanceList.end())
-+ pFallbackFont = (*it).second;
-+ else
-+ {
-+ // find the best matching physical font face
-+ ImplDevFontListData* pFontFamily = pFontList->FindFontFamily( aSelData.maSearchName );
-+ if (pFontFamily)
-+ {
-+ ImplFontData* pFontData = pFontFamily->FindBestFontFace( aSelData );
-
--#if defined(HDU_DEBUG)
-- for( int i = 0; i < nMaxLevel; ++i )
-+ // create a new logical font instance from this physical font face
-+ aSelData.mpFontData = pFontData;
-+ pFallbackFont = pFontData->CreateFontInstance( aSelData );
-+
-+ // if we found a different symbol font we need a symbol conversion table
-+ if( pFontData->IsSymbolFont() )
-+ if( aSelData.maTargetName != aSelData.maSearchName )
-+ pFallbackFont->mpConversion = ImplGetRecodeData( aSelData.maTargetName, aSelData.maSearchName );
-+ // add the new entry to the cache
-+ maFontInstanceList[ aSelData ] = pFallbackFont;
-+ new_entry = true;
-+ }
-+ else
- {
-- ImplDevFontListData* pFont = pFallbackList[ i ];
-- ByteString aFontName( pFont->GetFamilyName(), RTL_TEXTENCODING_UTF8 );
-- fprintf( stderr, "GlyphFallbackFont[%d] (quality=%05d): \"%s\"\n",
-- i, pFont->GetMinQuality(), aFontName.GetBuffer() );
-+ ByteString l( aSelData.maSearchName, RTL_TEXTENCODING_UTF8 );
-+ //fprintf (stderr, "--- Couldn't get FontFamily for '%s'\n", l.GetBuffer());
- }
--#endif
--
-- pFontList->SetFallbacks( pFallbackList, nMaxLevel );
- }
-
-- Font aFallbackFont = rOrigFont;
--
-- // nFallbackLevel==0 => original font without device specific substitution
-- // nFallbackLevel>=1 => use a font from the glyph fallback font list
-- if( nFallbackLevel>=1 )
-+ // Cache the fallback font for each of the missing Unicode chars
-+ if ( !symbolFont && aSelData.maSearchName.Len() )
- {
-- ImplDevFontListData* pFallbackData = pFontList->GetFallback( nFallbackLevel-1 );
-- if( !pFallbackData )
-- return NULL;
--
-- aFallbackFont.SetName( pFallbackData->GetSearchName() );
-+ for ( int i = 0; i < nMissingUnicodes; i++ )
-+ {
-+ if ( ! pOrigFontEntry->GetFallbackForUnicode(pMissingUnicodes[i]).Len() )
-+ pOrigFontEntry->AddFallbackForUnicode( pMissingUnicodes[i], aSelData.maSearchName );
-+ }
- }
-
-- ImplFontEntry* pFallbackFont = Get( pFontList, aFallbackFont, rSize, NULL );
--
- if( pFallbackFont && !pFallbackFont->mbInit )
- {
- // HACK: maMetrics are irrelevant for fallback fonts, but
-@@ -3131,6 +3242,27 @@ ImplFontEntry* ImplFontCache::GetFallbac
- pFallbackFont->maMetric.maStyleName = String();
- }
-
-+ if ( pFallbackFont && !new_entry )
-+ {
-+ // increase the font instance's reference count
-+ if( !pFallbackFont->mnRefCount++ )
-+ --mnRef0Count;
-+ }
-+
+Index: source/helper/statusindicatorfactory.cxx
+===================================================================
+RCS file: /cvs/framework/framework/source/helper/statusindicatorfactory.cxx,v
+retrieving revision 1.21
+diff -u -p -u -r1.21 statusindicatorfactory.cxx
+--- framework/source/helper/statusindicatorfactory.cxx 23 Sep 2005 15:41:23 -0000 1.21
++++ framework/source/helper/statusindicatorfactory.cxx 4 Jan 2006 21:41:06 -0000
+@@ -496,9 +496,11 @@ void StatusIndicatorFactory::implts_make
+
+ if (xParentWindow.is())
+ xParentWindow->setVisible(sal_True);
+#if 0
-+ sal_uInt16 nTok = 0;
-+ ByteString n( GetNextFontToken(rOrigFont.GetName(), nTok), RTL_TEXTENCODING_UTF8);
-+ ByteString m;
-+ if (pFallbackFont)
-+ {
-+ nTok = 0;
-+ ByteString tS( GetNextFontToken(pFallbackFont->maFontSelData.mpFontData->GetFamilyName(), nTok), RTL_TEXTENCODING_UTF8 );
-+ m.Assign( tS );
-+ }
-+ fprintf (stderr, "Glyph fallback '%s'->'%s' %s\n", n.GetBuffer(), pFallbackFont ? m.GetBuffer() : "none",
-+ new_entry ? "(new)" : "(cached)");
+ css::uno::Reference< css::awt::XTopWindow > xParentWindowTop(xParentWindow, css::uno::UNO_QUERY);
+ if (xParentWindowTop.is())
+ xParentWindowTop->toFront();
+#endif
-+
- return pFallbackFont;
}
-@@ -6097,7 +6229,7 @@ SalLayout* OutputDevice::ImplLayout( con
- // do glyph fallback if needed
- // #105768# avoid fallback for very small font sizes
- if( aLayoutArgs.NeedFallback() )
-- if( mpFontEntry && (mpFontEntry->maFontSelData.mnHeight >= 6) )
-+ if( mpFontEntry && (mpFontEntry->maFontSelData.mnHeight >= 3) )
- pSalLayout = ImplGlyphFallbackLayout( pSalLayout, aLayoutArgs );
-
- // position, justify, etc. the layout
-@@ -6141,6 +6273,17 @@ SalLayout* OutputDevice::ImplGlyphFallba
- rLayoutArgs.ResetPos();
- }
- #endif
-+ int nCharPos = -1;
-+ bool bRTL = false;
-+ sal_Unicode *pMissingUnicodes = new sal_Unicode[8];
-+ int nMissingUnicodes = 0;
-+
-+ for( int i=0; i<8 && rLayoutArgs.GetNextPos( &nCharPos, &bRTL); ++i )
-+ {
-+ pMissingUnicodes[i] = rLayoutArgs.mpStr[ nCharPos ];
-+ nMissingUnicodes++;
-+ }
-+ rLayoutArgs.ResetPos();
-
- ImplFontSelectData aFontSelData = mpFontEntry->maFontSelData;
- Size aFontSize( aFontSelData.mnWidth, aFontSelData.mnHeight );
-@@ -6157,7 +6300,8 @@ SalLayout* OutputDevice::ImplGlyphFallba
- {
- // find a font family suited for glyph fallback
- ImplFontEntry* pFallbackFont = mpFontCache->GetFallback( mpFontList,
-- maFont, aFontSize, nFallbackLevel-nDevSpecificFallback );
-+ maFont, aFontSize, nFallbackLevel-nDevSpecificFallback,
-+ (nMissingUnicodes ? pMissingUnicodes : NULL), nMissingUnicodes );
- if( !pFallbackFont )
- break;
-
-@@ -6208,6 +6352,8 @@ SalLayout* OutputDevice::ImplGlyphFallba
- if( !rLayoutArgs.PrepareFallback() )
- break;
- }
-+
-+ delete[] pMissingUnicodes;
-
- if( pMultiSalLayout && pMultiSalLayout->LayoutText( rLayoutArgs ) )
- pSalLayout = pMultiSalLayout;
-diff -ru vcl.preconfig/source/window/window.cxx vcl/source/window/window.cxx
---- openoffice.org.orig/vcl/source/window/window.cxx 2005-09-12 13:37:04.000000000 +0100
-+++ vcl/source/window/window.cxx 2005-09-12 16:18:20.000000000 +0100
-@@ -212,6 +212,7 @@
- #endif
-
- #include <pdfextoutdevdata.hxx>
-+#include <psprint/fontmanager.hxx>
-
- using namespace rtl;
- using namespace ::com::sun::star::uno;
-@@ -350,6 +351,10 @@
- {
- ImplInitFontList();
-
-+ const psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
-+ if (rMgr.hasFontconfig())
-+ return true;
-+
- String aTestText;
- aTestText.Append( Button::GetStandardText( BUTTON_OK ) );
- aTestText.Append( Button::GetStandardText( BUTTON_CANCEL ) );
-diff -ru vcl.preconfig/util/makefile.mk vcl/util/makefile.mk
---- openoffice.org.orig/vcl/util/makefile.mk 2005-09-12 13:37:38.000000000 +0100
-+++ vcl/util/makefile.mk 2005-09-12 14:55:10.000000000 +0100
-@@ -265,7 +265,7 @@
- .ENDIF
-
-
--SHL1STDLIBS += -lX11
-+SHL1STDLIBS += -lX11 -lpsp$(VERSION)$(DLLPOSTFIX)
-
- .ENDIF # "$(GUI)"=="UNX"
-
-Index: inc/psprint/fontmanager.hxx
-===================================================================
-RCS file: /cvs/gsl/psprint/inc/psprint/fontmanager.hxx,v
-retrieving revision 1.24
-diff -u -r1.24 fontmanager.hxx
---- openoffice.org.orig/psprint/uinc/psprint/fontmanager.hxx 5 Aug 2005 13:21:02 -0000 1.24
-+++ psprint/inc/psprint/fontmanager.hxx 12 Sep 2005 16:21:13 -0000
-@@ -75,6 +75,9 @@
- #ifndef _PSPRINT_HELPER_HXX_
- #include <psprint/helper.hxx>
- #endif
-+#ifndef _STRING_HXX
-+#include <tools/string.hxx>
-+#endif
-
- #ifndef _COM_SUN_STAR_LANG_LOCALE_HPP_
- #include <com/sun/star/lang/Locale.hpp>
-@@ -419,6 +422,7 @@
- std::hash_multimap< sal_uInt8, sal_Unicode > m_aAdobecodeToUnicode;
-
- mutable FontCache* m_pFontCache;
-+ bool m_bFontconfigSuccess;
-
- rtl::OString getAfmFile( PrintFont* pFont ) const;
- rtl::OString getFontFile( PrintFont* pFont ) const;
-@@ -729,6 +733,11 @@
- false else
- */
- bool matchFont( FastPrintFontInfo& rInfo, const com::sun::star::lang::Locale& rLocale );
-+
-+ String Substitute(const std::vector<String> &rNames, const std::vector<sal_Unicode> &rGlyphs,
-+ const ByteString &rLangAttrib, italic::type eItalic, weight::type eWeight,
-+ width::type eWidth, pitch::type ePitch) const;
-+ bool hasFontconfig() const { return m_bFontconfigSuccess; }
- };
-
- } // namespace
-Index: source/fontmanager/fontcache.cxx
+ //-----------------------------------------------
+Index: source/loadenv/loadenv.cxx
===================================================================
-RCS file: /cvs/gsl/psprint/source/fontmanager/fontcache.cxx,v
-retrieving revision 1.14
-diff -u -r1.14 fontcache.cxx
---- openoffice.org.orig/psprint/usource/fontmanager/fontcache.cxx 9 Aug 2005 10:59:38 -0000 1.14
-+++ psprint/source/fontmanager/fontcache.cxx 12 Sep 2005 16:21:13 -0000
-@@ -688,9 +688,9 @@
- FontDirMap::const_iterator entry = dir->second.m_aEntries.find( rFile );
- if( entry != dir->second.m_aEntries.end() )
- {
-- bSuccess = true;
- for( FontCacheEntry::const_iterator font = entry->second.m_aEntry.begin(); font != entry->second.m_aEntry.end(); ++font )
- {
-+ bSuccess = true;
- PrintFontManager::PrintFont* pFont = clonePrintFont( *font );
- rNewFonts.push_back( pFont );
- }
-Index: source/fontmanager/fontmanager.cxx
-===================================================================
-RCS file: /cvs/gsl/psprint/source/fontmanager/fontmanager.cxx,v
-retrieving revision 1.59
-diff -u -r1.59 fontmanager.cxx
---- openoffice.org.orig/psprint/usource/fontmanager/fontmanager.cxx 5 Aug 2005 12:53:31 -0000 1.59
-+++ psprint/source/fontmanager/fontmanager.cxx 12 Sep 2005 16:21:14 -0000
-@@ -1155,7 +1155,8 @@ PrintFontManager::PrintFontManager() :
- m_nNextFontID( 1 ),
- m_pAtoms( new MultiAtomProvider() ),
- m_nNextDirAtom( 1 ),
-- m_pFontCache( NULL )
-+ m_pFontCache( NULL ),
-+ m_bFontconfigSuccess(false)
- {
- for( unsigned int i = 0; i < sizeof( aAdobeCodes )/sizeof( aAdobeCodes[0] ); i++ )
- {
-@@ -2109,7 +2110,7 @@ void PrintFontManager::initialize( void*
- #endif
-
- // first try fontconfig
-- bool bFontconfigSuccess = initFontconfig();
-+ m_bFontconfigSuccess = initFontconfig();
+RCS file: /cvs/framework/framework/source/loadenv/loadenv.cxx,v
+retrieving revision 1.21
+diff -u -p -u -r1.21 loadenv.cxx
+--- framework/source/loadenv/loadenv.cxx 11 Nov 2005 12:06:12 -0000 1.21
++++ framework/source/loadenv/loadenv.cxx 4 Jan 2006 21:41:08 -0000
+@@ -1774,9 +1774,10 @@ void LoadEnv::impl_makeFrameWindowVisibl
- // part one - look for downloadable fonts
- rtl_TextEncoding aEncoding = osl_getThreadTextEncoding();
-@@ -2131,7 +2132,7 @@ void PrintFontManager::initialize( void*
- }
-
- // don't search through many directories fontconfig already told us about
-- if( ! bFontconfigSuccess )
-+ if( ! m_bFontconfigSuccess )
- {
- Display *pDisplay = (Display*)pInitDisplay;
-
-@@ -2209,7 +2210,7 @@ void PrintFontManager::initialize( void*
- }
- }
- #endif /* SOLARIS */
-- } // ! bFontconfigSuccess
-+ } // ! m_bFontconfigSuccess
+ if (xWindow.is())
+ xWindow->setVisible(sal_True);
+-
++#if 0
+ if (xTopWindow.is())
+ xTopWindow->toFront();
++#endif
- // fill XLFD aliases from fonts.alias files
- initFontsAlias();
-Index: source/fontmanager/fontconfig.cxx
+ /* #i19976#
+ We tried to prevent a toFront() call in case the user putted the
+Index: source/services/frame.cxx
===================================================================
-RCS file: /cvs/gsl/psprint/source/fontmanager/fontconfig.cxx,v
-retrieving revision 1.14
-diff -u -p -u -r1.14 fontconfig.cxx
---- openoffice.org.orig/psprint/source/fontmanager/fontconfig.cxx 27 Oct 2005 07:55:13 -0000 1.14
-+++ psprint/source/fontmanager/fontconfig.cxx 5 Nov 2005 11:22:58 -0000
-@@ -44,10 +44,12 @@ typedef void FcConfig;
- typedef void FcObjectSet;
- typedef void FcPattern;
- typedef void FcFontSet;
-+typedef void FcCharSet;
- typedef int FcResult;
- typedef int FcBool;
- typedef int FcMatchKind;
- typedef char FcChar8;
-+typedef sal_Int32 FcChar32;
- #endif
-
- #include <cstdio>
-@@ -80,6 +82,7 @@ class FontCfgWrapper
- {
- void* m_pLib;
- FcConfig* m_pDefConfig;
-+ FcFontSet* m_pOutlineSet;
-
- FcBool (*m_pFcInit)();
- FcConfig* (*m_pFcConfigGetCurrent)();
-@@ -88,17 +91,23 @@ class FontCfgWrapper
- FcPattern* (*m_pFcPatternCreate)();
- void (*m_pFcPatternDestroy)(FcPattern*);
- FcFontSet* (*m_pFcFontList)(FcConfig*,FcPattern*,FcObjectSet*);
-+ FcFontSet* (*m_pFcConfigGetFonts)(FcConfig*,FcSetName);
- FcFontSet* (*m_pFcFontSetCreate)();
-+ FcCharSet* (*m_pFcCharSetCreate)();
-+ FcBool (*m_pFcCharSetAddChar)(FcCharSet *, FcChar32);
- void (*m_pFcFontSetDestroy)(FcFontSet*);
- FcBool (*m_pFcFontSetAdd)(FcFontSet*,FcPattern*);
-+ void (*m_pFcPatternReference)(FcPattern*);
- FcResult (*m_pFcPatternGetString)(const FcPattern*,const char*,int,FcChar8**);
- FcResult (*m_pFcPatternGetInteger)(const FcPattern*,const char*,int,int*);
- FcResult (*m_pFcPatternGetDouble)(const FcPattern*,const char*,int,double*);
- FcResult (*m_pFcPatternGetBool)(const FcPattern*,const char*,int,FcBool*);
- void (*m_pFcDefaultSubstitute)(FcPattern *);
-- FcPattern* (*m_pFcFontMatch)(FcConfig*,FcPattern*,FcResult*);
-+ FcPattern* (*m_pFcFontSetMatch)(FcConfig*,FcFontSet**, int, FcPattern*,FcResult*);
- FcBool (*m_pFcConfigSubstitute)(FcConfig*,FcPattern*,FcMatchKind);
- FcBool (*m_pFcPatternAddInteger)(FcPattern*,const char*,int);
-+ FcBool (*m_pFcPatternAddBool)(FcPattern*,const char*,FcBool);
-+ FcBool (*m_pFcPatternAddCharSet)(FcPattern*,const char*,const FcCharSet*);
- FcBool (*m_pFcPatternAddString)(FcPattern*,const char*,const FcChar8*);
-
- void* loadSymbol( const char* );
-@@ -114,6 +123,7 @@ public:
- { return m_pLib != NULL;}
-
- FcConfig* getDefConfig() { return m_pDefConfig; }
-+ FcFontSet* getFontSet() { return m_pOutlineSet; }
-
- FcBool FcInit()
- { return m_pFcInit(); }
-@@ -143,14 +153,28 @@ public:
-
- FcFontSet* FcFontList( FcConfig* pConfig, FcPattern* pPattern, FcObjectSet* pSet )
- { return m_pFcFontList( pConfig, pPattern, pSet ); }
--
-+
-+ FcFontSet* FcConfigGetFonts( FcConfig* pConfig, FcSetName eSet)
-+ { return m_pFcConfigGetFonts( pConfig, eSet ); }
-+
- FcFontSet* FcFontSetCreate()
- { return m_pFcFontSetCreate(); }
-+
-+ FcCharSet* FcCharSetCreate()
-+ { return m_pFcCharSetCreate(); }
-+
-+ FcBool FcCharSetAddChar(FcCharSet *fcs, FcChar32 ucs4)
-+ { return m_pFcCharSetAddChar(fcs, ucs4); }
-+
- void FcFontSetDestroy( FcFontSet* pSet )
- { m_pFcFontSetDestroy( pSet );}
-+
- FcBool FcFontSetAdd( FcFontSet* pSet, FcPattern* pPattern )
- { return m_pFcFontSetAdd( pSet, pPattern ); }
-
-+ void FcPatternReference( FcPattern* pPattern )
-+ { m_pFcPatternReference( pPattern ); }
-+
- FcResult FcPatternGetString( const FcPattern* pPattern, const char* object, int n, FcChar8** s )
- { return m_pFcPatternGetString( pPattern, object, n, s ); }
-
-@@ -164,12 +188,16 @@ public:
- { return m_pFcPatternGetBool( pPattern, object, n, s ); }
- void FcDefaultSubstitute( FcPattern* pPattern )
- { m_pFcDefaultSubstitute( pPattern ); }
-- FcPattern* FcFontMatch( FcConfig* pConfig, FcPattern* pPattern, FcResult* pResult )
-- { return m_pFcFontMatch( pConfig, pPattern, pResult ); }
-+ FcPattern* FcFontSetMatch(FcConfig* pConfig, FcFontSet** ppFontSet, int nset, FcPattern *pPattern, FcResult *pResult)
-+ { return m_pFcFontSetMatch( pConfig, ppFontSet, nset, pPattern, pResult ); }
- FcBool FcConfigSubstitute( FcConfig* pConfig, FcPattern* pPattern, FcMatchKind eKind )
- { return m_pFcConfigSubstitute( pConfig, pPattern, eKind ); }
- FcBool FcPatternAddInteger( FcPattern* pPattern, const char* pObject, int nValue )
- { return m_pFcPatternAddInteger( pPattern, pObject, nValue ); }
-+ FcBool FcPatternAddBool( FcPattern* pPattern, const char* pObject, FcBool b )
-+ { return m_pFcPatternAddBool( pPattern, pObject, b ); }
-+ FcBool FcPatternAddCharSet( FcPattern* pPattern, const char* pObject, const FcCharSet *c)
-+ { return m_pFcPatternAddCharSet( pPattern, pObject, c ); }
- FcBool FcPatternAddString( FcPattern* pPattern, const char* pObject, const FcChar8* pString )
- { return m_pFcPatternAddString( pPattern, pObject, pString ); }
- };
-@@ -186,7 +214,8 @@ void* FontCfgWrapper::loadSymbol( const
-
- FontCfgWrapper::FontCfgWrapper()
- : m_pLib( NULL ),
-- m_pDefConfig( NULL )
-+ m_pDefConfig( NULL ),
-+ m_pOutlineSet( NULL )
- {
- #ifdef ENABLE_FONTCONFIG
- OUString aLib( RTL_CONSTASCII_USTRINGPARAM( "libfontconfig.so.1" ) );
-@@ -220,12 +249,20 @@ FontCfgWrapper::FontCfgWrapper()
- loadSymbol( "FcPatternDestroy" );
- m_pFcFontList = (FcFontSet*(*)(FcConfig*,FcPattern*,FcObjectSet*))
- loadSymbol( "FcFontList" );
-+ m_pFcConfigGetFonts = (FcFontSet*(*)(FcConfig*,FcSetName))
-+ loadSymbol( "FcConfigGetFonts" );
- m_pFcFontSetCreate = (FcFontSet*(*)())
- loadSymbol( "FcFontSetCreate" );
-+ m_pFcCharSetCreate = (FcCharSet*(*)())
-+ loadSymbol( "FcCharSetCreate" );
-+ m_pFcCharSetAddChar = (FcBool(*)(FcCharSet*, FcChar32))
-+ loadSymbol( "FcCharSetAddChar" );
- m_pFcFontSetDestroy = (void(*)(FcFontSet*))
- loadSymbol( "FcFontSetDestroy" );
- m_pFcFontSetAdd = (FcBool(*)(FcFontSet*,FcPattern*))
- loadSymbol( "FcFontSetAdd" );
-+ m_pFcPatternReference = (void(*)(FcPattern*))
-+ loadSymbol( "FcPatternReference" );
- m_pFcPatternGetString = (FcResult(*)(const FcPattern*,const char*,int,FcChar8**))
- loadSymbol( "FcPatternGetString" );
- m_pFcPatternGetInteger = (FcResult(*)(const FcPattern*,const char*,int,int*))
-@@ -236,12 +273,16 @@ FontCfgWrapper::FontCfgWrapper()
- loadSymbol( "FcPatternGetBool" );
- m_pFcDefaultSubstitute = (void(*)(FcPattern *))
- loadSymbol( "FcDefaultSubstitute" );
-- m_pFcFontMatch = (FcPattern*(*)(FcConfig*,FcPattern*,FcResult*))
-- loadSymbol( "FcFontMatch" );
-+ m_pFcFontSetMatch = (FcPattern*(*)(FcConfig*,FcFontSet**, int, FcPattern*,FcResult*))
-+ loadSymbol( "FcFontSetMatch" );
- m_pFcConfigSubstitute = (FcBool(*)(FcConfig*,FcPattern*,FcMatchKind))
- loadSymbol( "FcConfigSubstitute" );
- m_pFcPatternAddInteger = (FcBool(*)(FcPattern*,const char*,int))
- loadSymbol( "FcPatternAddInteger" );
-+ m_pFcPatternAddBool = (FcBool(*)(FcPattern*,const char*,FcBool))
-+ loadSymbol( "FcPatternAddBool" );
-+ m_pFcPatternAddCharSet = (FcBool(*)(FcPattern*,const char*,const FcCharSet *))
-+ loadSymbol( "FcPatternAddCharSet" );
- m_pFcPatternAddString = (FcBool(*)(FcPattern*,const char*,const FcChar8*))
- loadSymbol( "FcPatternAddString" );
-
-@@ -253,17 +294,23 @@ FontCfgWrapper::FontCfgWrapper()
- m_pFcPatternCreate &&
- m_pFcPatternDestroy &&
- m_pFcFontList &&
-+ m_pFcConfigGetFonts &&
- m_pFcFontSetCreate &&
-+ m_pFcCharSetCreate &&
-+ m_pFcCharSetAddChar &&
- m_pFcFontSetDestroy &&
- m_pFcFontSetAdd &&
-+ m_pFcPatternReference &&
- m_pFcPatternGetString &&
- m_pFcPatternGetInteger &&
- m_pFcPatternGetDouble &&
- m_pFcPatternGetBool &&
- m_pFcDefaultSubstitute &&
-- m_pFcFontMatch &&
-+ m_pFcFontSetMatch &&
- m_pFcConfigSubstitute &&
- m_pFcPatternAddInteger &&
-+ m_pFcPatternAddCharSet &&
-+ m_pFcPatternAddBool &&
- m_pFcPatternAddString
- ) )
- {
-@@ -281,10 +328,35 @@ FontCfgWrapper::FontCfgWrapper()
- osl_unloadModule( (oslModule)m_pLib );
- m_pLib = NULL;
- }
-+
-+ m_pOutlineSet = FcFontSetCreate();
-+
-+ /*
-+ add only acceptable outlined fonts to our config,
-+ for future fontconfig use
-+ */
-+ FcFontSet *pOrig = FcConfigGetFonts(NULL, FcSetSystem);
-+
-+ if (!pOrig)
-+ return;
-+
-+ for( int i = 0; i < pOrig->nfont; ++i )
-+ {
-+ FcBool outline = false;
-+ FcPattern *pOutlinePattern = pOrig->fonts[i];
-+ FcResult eOutRes =
-+ FcPatternGetBool( pOutlinePattern, FC_OUTLINE, 0, &outline );
-+ if (eOutRes == FcResultMatch && !outline)
-+ continue;
-+ FcPatternReference(pOutlinePattern);
-+ FcFontSetAdd(m_pOutlineSet, pOutlinePattern);
-+ }
- }
-
- FontCfgWrapper::~FontCfgWrapper()
- {
-+ if( m_pOutlineSet )
-+ FcFontSetDestroy( m_pOutlineSet );
- if( m_pLib )
- osl_unloadModule( (oslModule)m_pLib );
- }
-@@ -319,18 +391,7 @@ bool PrintFontManager::initFontconfig()
- if( ! rWrapper.isValid() )
- return false;
-
-- FcConfig* pConfig = rWrapper.getDefConfig();
-- FcObjectSet* pOSet = rWrapper.FcObjectSetBuild( FC_FAMILY,
-- FC_STYLE,
-- FC_SLANT,
-- FC_WEIGHT,
-- FC_SPACING,
-- FC_FILE,
-- FC_OUTLINE,
-- FC_INDEX,
-- (void *) NULL );
-- FcPattern* pPattern = rWrapper.FcPatternCreate();
-- FcFontSet* pFSet = rWrapper.FcFontList( pConfig, pPattern, pOSet );
-+ FcFontSet* pFSet = rWrapper.getFontSet();
+RCS file: /cvs/framework/framework/source/services/frame.cxx,v
+retrieving revision 1.88
+diff -u -p -u -r1.88 frame.cxx
+--- framework/source/services/frame.cxx 11 Nov 2005 12:06:59 -0000 1.88
++++ framework/source/services/frame.cxx 4 Jan 2006 21:41:09 -0000
+@@ -1563,6 +1563,7 @@ sal_Bool SAL_CALL Frame::setComponent(
+ if (bIsConnected && !bWasConnected)
+ implts_sendFrameActionEvent( css::frame::FrameAction_COMPONENT_ATTACHED );
- if( pFSet )
- {
-@@ -373,6 +434,8 @@ bool PrintFontManager::initFontconfig()
- );
- #endif
-
-+ OSL_ASSERT(eOutRes != FcResultMatch || outline);
-+
- // only outline fonts are usable to psprint anyway
- if( eOutRes == FcResultMatch && ! outline )
- continue;
-@@ -515,14 +578,6 @@ bool PrintFontManager::initFontconfig()
- }
- }
-
-- // cleanup
-- if( pPattern )
-- rWrapper.FcPatternDestroy( pPattern );
-- if( pFSet )
-- rWrapper.FcFontSetDestroy( pFSet );
-- if( pOSet )
-- rWrapper.FcObjectSetDestroy( pOSet );
--
- // how does one get rid of the config ?
- #if OSL_DEBUG_LEVEL > 1
- fprintf( stderr, "inserted %d fonts from fontconfig\n", nFonts );
-@@ -536,39 +591,14 @@ void PrintFontManager::deinitFontconfig(
- FontCfgWrapper::release();
- }
-
--bool PrintFontManager::matchFont( FastPrintFontInfo& rInfo, const com::sun::star::lang::Locale& rLocale )
-+static void addtopattern(FontCfgWrapper& rWrapper, FcPattern *pPattern,
-+ italic::type eItalic, weight::type eWeight, width::type eWidth, pitch::type ePitch)
- {
- #ifdef ENABLE_FONTCONFIG
-- FontCfgWrapper& rWrapper = FontCfgWrapper::get();
-- if( ! rWrapper.isValid() )
-- return false;
--
-- FcConfig* pConfig = rWrapper.getDefConfig();
-- FcPattern* pPattern = rWrapper.FcPatternCreate();
--
-- OString aLangAttrib;
-- // populate pattern with font characteristics
-- if( rLocale.Language.getLength() )
-- {
-- OUStringBuffer aLang(6);
-- aLang.append( rLocale.Language );
-- if( rLocale.Country.getLength() )
-- {
-- aLang.append( sal_Unicode('-') );
-- aLang.append( rLocale.Country );
-- }
-- aLangAttrib = OUStringToOString( aLang.makeStringAndClear(), RTL_TEXTENCODING_UTF8 );
-- }
-- if( aLangAttrib.getLength() )
-- rWrapper.FcPatternAddString( pPattern, FC_LANG, (FcChar8*)aLangAttrib.getStr() );
--
-- OString aFamily = OUStringToOString( rInfo.m_aFamilyName, RTL_TEXTENCODING_UTF8 );
-- if( aFamily.getLength() )
-- rWrapper.FcPatternAddString( pPattern, FC_FAMILY, (FcChar8*)aFamily.getStr() );
-- if( rInfo.m_eItalic != italic::Unknown )
-+ if( eItalic != italic::Unknown )
- {
- int nSlant = FC_SLANT_ROMAN;
-- switch( rInfo.m_eItalic )
-+ switch( eItalic )
- {
- case italic::Italic: nSlant = FC_SLANT_ITALIC;break;
- case italic::Oblique: nSlant = FC_SLANT_OBLIQUE;break;
-@@ -577,10 +607,10 @@ bool PrintFontManager::matchFont( FastPr
- }
- rWrapper.FcPatternAddInteger( pPattern, FC_SLANT, nSlant );
- }
-- if( rInfo.m_eWeight != weight::Unknown )
-+ if( eWeight != weight::Unknown )
- {
- int nWeight = FC_WEIGHT_NORMAL;
-- switch( rInfo.m_eWeight )
-+ switch( eWeight )
- {
- case weight::Thin: nWeight = FC_WEIGHT_THIN;break;
- case weight::UltraLight: nWeight = FC_WEIGHT_ULTRALIGHT;break;
-@@ -597,10 +627,10 @@ bool PrintFontManager::matchFont( FastPr
- }
- rWrapper.FcPatternAddInteger( pPattern, FC_WEIGHT, nWeight );
- }
-- if( rInfo.m_eWidth != width::Unknown )
-+ if( eWidth != width::Unknown )
++#if 0
+ //_____________________________________________________________________________________________________
+ // A new component window doesn't know anything about current active/focus states.
+ // Set this information on it!
+@@ -1573,6 +1574,7 @@ sal_Bool SAL_CALL Frame::setComponent(
{
- int nWidth = FC_WIDTH_NORMAL;
-- switch( rInfo.m_eWidth )
-+ switch( eWidth )
- {
- case width::UltraCondensed: nWidth = FC_WIDTH_ULTRACONDENSED;break;
- case width::ExtraCondensed: nWidth = FC_WIDTH_EXTRACONDENSED;break;
-@@ -616,10 +646,10 @@ bool PrintFontManager::matchFont( FastPr
- }
- rWrapper.FcPatternAddInteger( pPattern, FC_WIDTH, nWidth );
+ xComponentWindow->setFocus();
}
-- if( rInfo.m_ePitch != pitch::Unknown )
-+ if( ePitch != pitch::Unknown )
- {
- int nSpacing = FC_PROPORTIONAL;
-- switch( rInfo.m_ePitch )
-+ switch( ePitch )
- {
- case pitch::Fixed: nSpacing = FC_MONO;break;
- case pitch::Variable: nSpacing = FC_PROPORTIONAL;break;
-@@ -627,12 +657,123 @@ bool PrintFontManager::matchFont( FastPr
- break;
- }
- rWrapper.FcPatternAddInteger( pPattern, FC_SPACING, nSpacing );
-+ if (nSpacing == FC_MONO)
-+ rWrapper.FcPatternAddString( pPattern, FC_FAMILY, (FcChar8*)"monospace");
-+ }
+#endif
-+}
-+
-+String PrintFontManager::Substitute(const std::vector<String> &rNames, const std::vector<sal_Unicode> &rGlyphs,
-+ const ByteString &rLangAttrib, italic::type eItalic, weight::type eWeight,
-+ width::type eWidth, pitch::type ePitch) const
-+{
-+ String aName;
-+#ifdef ENABLE_FONTCONFIG
-+ FontCfgWrapper& rWrapper = FontCfgWrapper::get();
-+ if( ! rWrapper.isValid() )
-+ return aName;
-+
-+ FcFontSet* pSet = NULL;
-+ FcPattern* pPattern = rWrapper.FcPatternCreate();
-+
-+ // Prefer scalable fonts
-+ rWrapper.FcPatternAddBool( pPattern, FC_SCALABLE, 1 );
-+
-+ std::vector<String>::const_iterator aEnd = rNames.end();
-+ for (std::vector<String>::const_iterator aIter = rNames.begin(); aIter != aEnd; ++aIter)
-+ {
-+ OString maTargetName = OUStringToOString(*aIter, RTL_TEXTENCODING_UTF8);
-+ rWrapper.FcPatternAddString(pPattern, FC_FAMILY, (FcChar8*)maTargetName.getStr());
-+ break;
-+ }
-+
-+ if( rLangAttrib.Len() )
-+ rWrapper.FcPatternAddString(pPattern, FC_LANG, (FcChar8*)rLangAttrib.GetBuffer());
-+
-+ // Add required Unicode characters, if any
-+ FcCharSet *unicodes = NULL;
-+ if (! rGlyphs.empty() )
-+ {
-+ unicodes = rWrapper.FcCharSetCreate();
-+ std::vector<sal_Unicode>::const_iterator aGlyphEnd = rGlyphs.end();
-+ for (std::vector<sal_Unicode>::const_iterator aGlyphIter = rGlyphs.begin();
-+ aGlyphIter != aGlyphEnd; ++aGlyphIter)
-+ {
-+ rWrapper.FcCharSetAddChar( unicodes, (FcChar32)*aGlyphIter );
-+ }
-+ rWrapper.FcPatternAddCharSet( pPattern, FC_CHARSET, unicodes);
-+ }
-+
-+ addtopattern(rWrapper, pPattern, eItalic, eWeight, eWidth, ePitch);
-+
-+ rWrapper.FcConfigSubstitute( NULL, pPattern, FcMatchPattern );
-+ rWrapper.FcDefaultSubstitute( pPattern );
-+ FcResult eResult = FcResultNoMatch;
-+ FcFontSet *pFontSet = rWrapper.getFontSet();
-+ FcPattern* pResult = rWrapper.FcFontSetMatch( NULL, &pFontSet, 1, pPattern, &eResult );
-+ rWrapper.FcPatternDestroy( pPattern );
-+
-+ if( pResult )
-+ {
-+ pSet = rWrapper.FcFontSetCreate();
-+ // info: destroying the pSet destroys pResult implicitly
-+ // since pResult was "added" to pSet
-+ rWrapper.FcFontSetAdd( pSet, pResult );
- }
-+ if( pSet )
-+ {
-+ if( pSet->nfont > 0 )
-+ {
-+ //extract the closest match
-+ FcChar8* family = NULL;
-+ FcResult eFileRes = rWrapper.FcPatternGetString( pSet->fonts[0], FC_FAMILY, 0, &family );
-+ if( eFileRes == FcResultMatch )
-+ aName = String( (sal_Char*)family, RTL_TEXTENCODING_UTF8 );
-+ }
-+ }
-+ rWrapper.FcFontSetDestroy( pSet );
-+#endif
-+ return aName;
-+}
-+
-+bool PrintFontManager::matchFont( FastPrintFontInfo& rInfo, const com::sun::star::lang::Locale& rLocale )
-+{
-+#ifdef ENABLE_FONTCONFIG
-+ FontCfgWrapper& rWrapper = FontCfgWrapper::get();
-+ if( ! rWrapper.isValid() )
-+ return false;
-+
-+ FcConfig* pConfig = rWrapper.getDefConfig();
-+ FcPattern* pPattern = rWrapper.FcPatternCreate();
-+
-+ OString aLangAttrib;
-+ // populate pattern with font characteristics
-+ if( rLocale.Language.getLength() )
-+ {
-+ OUStringBuffer aLang(6);
-+ aLang.append( rLocale.Language );
-+ if( rLocale.Country.getLength() )
-+ {
-+ aLang.append( sal_Unicode('-') );
-+ aLang.append( rLocale.Country );
-+ }
-+ aLangAttrib = OUStringToOString( aLang.makeStringAndClear(), RTL_TEXTENCODING_UTF8 );
-+ }
-+ if( aLangAttrib.getLength() )
-+ rWrapper.FcPatternAddString( pPattern, FC_LANG, (FcChar8*)aLangAttrib.getStr() );
-+
-+ OString aFamily = OUStringToOString( rInfo.m_aFamilyName, RTL_TEXTENCODING_UTF8 );
-+ if( aFamily.getLength() )
-+ rWrapper.FcPatternAddString( pPattern, FC_FAMILY, (FcChar8*)aFamily.getStr() );
-+
-+ addtopattern(rWrapper, pPattern, rInfo.m_eItalic, rInfo.m_eWeight, rInfo.m_eWidth, rInfo.m_ePitch);
-+
- rWrapper.FcConfigSubstitute( pConfig, pPattern, FcMatchPattern );
- rWrapper.FcDefaultSubstitute( pPattern );
- FcResult eResult = FcResultNoMatch;
-- FcPattern* pResult = rWrapper.FcFontMatch( pConfig, pPattern, &eResult );
-+ FcFontSet *pFontSet = rWrapper.getFontSet();
-+ FcPattern* pResult = rWrapper.FcFontSetMatch( pConfig, &pFontSet, 1, pPattern, &eResult );
- bool bSuccess = false;
- if( pResult )
- {
+ // If it was a new component window - we must resize it to fill out
+ // our container window.
diff --git a/patches/src680/frugalware.diff b/patches/src680/frugalware.diff
index 675af7650..f1a9fa990 100644
--- a/patches/src680/frugalware.diff
+++ b/patches/src680/frugalware.diff
@@ -1,11 +1,6 @@
-Index: svx/prj/d.lst
-===================================================================
-RCS file: /cvs/graphics/svx/prj/d.lst,v
-retrieving revision 1.108
-diff -u -r1.108 d.lst
---- svx/prj/d.lst 9 Dec 2004 16:36:45 -0000 1.108
-+++ svx/prj/d.lst 16 Dec 2004 12:43:47 -0000
-@@ -55,7 +55,7 @@
+--- svx/prj/d.lst.fw 2005-12-30 20:32:26.000000000 +0100
++++ svx/prj/d.lst 2005-12-31 10:56:02.000000000 +0100
+@@ -43,7 +43,7 @@
..\res\cjkintro.bmp %COMMON_DEST%\pck%_EXT%\starsuite_bitmap\intro.bmp
..\res\ofaabout.bmp %COMMON_DEST%\pck%_EXT%\staroffice_bitmap\about.bmp
..\res\soffice.bmp %COMMON_DEST%\pck%_EXT%\staroffice_bitmap\intro.bmp
@@ -14,26 +9,14 @@ diff -u -r1.108 d.lst
..\res\ooonologointro.bmp %COMMON_DEST%\pck%_EXT%\openoffice\nologointro.bmp
mkdir: %_DEST%\inc%_EXT%\svx
-Index: svx/source/intro/ooo.src
-===================================================================
-RCS file: /cvs/graphics/svx/source/intro/ooo.src,v
-retrieving revision 1.11
-diff -u -r1.11 ooo.src
---- svx/source/intro/ooo.src 7 Jan 2005 09:49:30 -0000 1.11
-+++ svx/source/intro/ooo.src 1 Feb 2005 16:48:49 -0000
-@@ -48,8 +48,8 @@
+--- svx/source/intro/ooo.src.fw 2005-12-14 16:16:29.000000000 +0100
++++ svx/source/intro/ooo.src 2005-12-31 11:26:42.000000000 +0100
+@@ -48,9 +48,11 @@
#include "svxids.hrc"
#include "intro.hrc"
--#ifdef BUILD_SPECIAL
--#define OOO_VENDOR "Sun Microsystems Inc."
-+#if 1
+#define OOO_VENDOR "Frugalware Linux i686 Edition"
- #else
- //#define OOO_VENDOR "my company"
- #endif
-@@ -56,7 +56,7 @@
-
++
Bitmap RID_DEFAULT_ABOUT_BMP_LOGO
{
- File = "openabout.bmp" ;
diff --git a/patches/src680/gcj-32bit-runtime-path.diff b/patches/src680/gcj-32bit-runtime-path.diff
index 7ec9ab58f..8a29e517c 100644
--- a/patches/src680/gcj-32bit-runtime-path.diff
+++ b/patches/src680/gcj-32bit-runtime-path.diff
@@ -1,5 +1,5 @@
---- jvmfwk/plugins/sunmajor/pluginlib/gnujre.cxx.old 2006-03-13 12:11:30.359949000 +0000
-+++ jvmfwk/plugins/sunmajor/pluginlib/gnujre.cxx 2006-03-13 12:13:00.779949000 +0000
+--- jvmfwk/plugins/sunmajor/pluginlib/gnujre.cxx.old 2006-04-30 11:46:38.090510000 +0000
++++ jvmfwk/plugins/sunmajor/pluginlib/gnujre.cxx 2006-04-30 11:50:39.530510000 +0000
@@ -37,6 +37,11 @@
#include "osl/thread.h"
#include "gnujre.hxx"
@@ -12,21 +12,15 @@
using namespace rtl;
using namespace std;
-@@ -53,10 +58,12 @@
- char const* const* GnuInfo::getJavaExePaths(int * size)
- {
+@@ -55,6 +60,8 @@
static char const * ar[] = {
-- "gij",
-- "bin/gij",
+ "gij",
+ "bin/gij",
+ "gij-4.1",
-+ "bin/gij-4.1"
++ "bin/gij-4.1",
"gij-4.0",
"bin/gij-4.0"
-+ "gij",
-+ "bin/gij",
};
- *size = sizeof (ar) / sizeof (char*);
- return ar;
@@ -72,8 +79,27 @@
, "/lib/libgcj.so.4"
#endif
@@ -34,7 +28,7 @@
+#if defined(__linux__) && defined (__i386__)
+ struct utsname uts;
+ static char const* ar64[]= {
-+ "/lib32/libgcj.so.7"
++ "/lib32/libgcj.so.7",
+ "/lib32/libgcj.so.6"
+ };
+ uname(&uts);
diff --git a/patches/src680/gengal-cleanup.diff b/patches/src680/gengal-cleanup.diff
new file mode 100644
index 000000000..3d4cb4c5f
--- /dev/null
+++ b/patches/src680/gengal-cleanup.diff
@@ -0,0 +1,203 @@
+--- scp2/source/ooo/file_ooo.scp.old 2006-05-22 15:23:18.000000000 +0200
++++ scp2/source/ooo/file_ooo.scp 2006-05-22 15:44:45.000000000 +0200
+@@ -286,13 +286,6 @@
+
+ #endif
+
+-File gid_File_Rdb_Gengal
+- TXT_FILE_BODY;
+- Dir = gid_Dir_Program;
+- Styles = (PACKED, OVERWRITE);
+- Name = "gengal.rdb";
+-End
+-
+ #if !defined(WITHOUT_MOZILLA) && defined(UNX)
+
+ File gid_File_Bin_Pluginapp
+--- svx/source/gengal/gengal.cxx.old 2006-05-22 15:23:18.000000000 +0200
++++ svx/source/gengal/gengal.cxx 2006-05-22 15:32:31.000000000 +0200
+@@ -2,6 +2,11 @@
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
++ * $RCSfile$
++ *
++ * $Revision$
++ *
++ * last change: $Author$ $Date$
+ *
+ * The Contents of this file are made available subject to
+ * the terms of GNU Lesser General Public License Version 2.1.
+@@ -241,21 +246,6 @@
+
+ void GalApp::Main()
+ {
+-#ifdef TOO_SIMPLE_BY_HALF
+- ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >
+- xMSF = cppu::createRegistryServiceFactory(
+- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "gengal.rdb" ) ), sal_True );
+- ::comphelper::setProcessServiceFactory( xMSF );
+-
+- // Without this no file access works ...
+- ucb::ContentProviderDataList aData;
+- ucb::ContentProviderData aFileProvider(
+- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ucb.FileContentProvider" ) ),
+- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "file" ) ),
+- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "" ) ) );
+- aData.push_back( aFileProvider );
+- ucb::ContentBroker::initialize( xMSF, aData );
+-#else
+ Reference<XComponentContext> xComponentContext = ::cppu::defaultBootstrap_InitialComponentContext();
+ Reference<XMultiServiceFactory> xMSF(xComponentContext->getServiceManager(), UNO_QUERY);
+ if( !xMSF.is() )
+@@ -273,10 +263,8 @@
+ aArgs[4] <<= rtl::OUString::createFromAscii("PORTAL");
+ aArgs[5] <<= aEmpty;
+
+- if (! ::ucb::ContentBroker::initialize( xMSF, aArgs ) )
+- fprintf( stderr, "Failed to init content broker\n" );
+-#endif
+-
++ if (! ::ucb::ContentBroker::initialize( xMSF, aArgs ) )
++ fprintf( stderr, "Failed to init content broker\n" );
+
+ bool bHelp = false;
+ rtl::OUString aPath, aDestDir;
+--- svx/source/gengal/gengal.sh.old 2006-05-22 15:23:18.000000000 +0200
++++ svx/source/gengal/gengal.sh 2006-05-22 15:35:43.000000000 +0200
+@@ -4,6 +4,14 @@
+ # The Contents of this file are made available subject to
+ # the terms of GNU Lesser General Public License Version 2.1.
+ #
++# $RCSfile$
++#
++# $Revision$
++#
++# last change: $Author$ $Date$
++#
++# The Contents of this file are made available subject to
++# the terms of GNU Lesser General Public License Version 2.1.
+ #
+ # GNU Lesser General Public License Version 2.1
+ # =============================================
+@@ -62,64 +70,34 @@
+ sd_platform=`uname -s`
+ case $sd_platform in
+ AIX)
+- LIBPATH="$sd_prog":$LIBPATH
++ LIBPATH=${sd_prog}${LIBPATH+:${LIBPATH}}
+ export LIBPATH
+ ;;
+
+ Darwin)
+- DYLD_LIBRARY_PATH="$sd_prog":$DYLD_LIBRARY_PATH
++ DYLD_LIBRARY_PATH=${sd_prog}${DYLD_LIBRARY_PATH+:${DYLD_LIBRARY_PATH}}
+ export DYLD_LIBRARY_PATH
+ ;;
+
+ HP-UX)
+- SHLIB_PATH="$sd_prog":/usr/openwin/lib:$SHLIB_PATH
++ SHLIB_PATH=${sd_prog}:/usr/openwin/lib${SHLIB_PATH+:${SHLIB_PATH}}
+ export SHLIB_PATH
+ ;;
+
+ IRIX*)
+- LD_LIBRARYN32_PATH=:"$sd_prog":$LD_LIBRARYN32_PATH
++ LD_LIBRARYN32_PATH=${sd_prog}${LD_LIBRARYN32_PATH+:${LD_LIBRARYN32_PATH}}
+ export LD_LIBRARYN32_PATH
+ ;;
+
+ *)
+- LD_LIBRARY_PATH="$sd_prog":$LD_LIBRARY_PATH
++ LD_LIBRARY_PATH=${sd_prog}${LD_LIBRARY_PATH+:${LD_LIBRARY_PATH}}
+ export LD_LIBRARY_PATH
+ ;;
+ esac
+
+-# extend the ld_library_path for java: javaldx checks the sofficerc for us
+-if [ -x "$sd_prog/javaldx" ] ; then
+- java_ld_library_path=`"$sd_prog/javaldx"`
+- if [ "$java_ld_library_path" != "" ] ; then
+- case $sd_platform in
+- AIX)
+- LIBPATH=${java_ld_library_path}:${LIBPATH}
+- ;;
+- Darwin)
+- DYLD_LIBRARY_PATH=${java_ld_library_path}:${DYLD_LIBRARY_PATH}
+- ;;
+- HP-UX)
+- SHLIB_PATH=${java_ld_library_path}:${SHLIB_PATH}
+- ;;
+- IRIX*)
+- LD_LIBRARYN32_PATH=${java_ld_library_path}:${LD_LIBRARYN32_PATH}
+- ;;
+- *)
+- LD_LIBRARY_PATH=${java_ld_library_path}:${LD_LIBRARY_PATH}
+- ;;
+- esac
+- fi
+-fi
+-
+ # misc. environment variables
+-OPENOFFICE_MOZILLA_FIVE_HOME="$sd_inst/program"
+-export OPENOFFICE_MOZILLA_FIVE_HOME
+-
+ unset XENVIRONMENT
+
+-# uncomment line below to disable anti aliasing of fonts
+-# SAL_ANTIALIAS_DISABLE=true; export SAL_ANTIALIAS_DISABLE
+-
+ # set path so that other apps can be started just by name
+ PATH="$sd_prog":$PATH
+ export PATH
+--- svx/source/gengal/makefile.mk.old 2005-10-19 16:42:19.000000000 +0200
++++ svx/source/gengal/makefile.mk 2006-05-30 15:38:04.000000000 +0200
+@@ -58,7 +58,9 @@
+ .ELSE # .IF "$(GUI)"=="WNT"
+ APP1TARGET= $(TARGET).bin
+ .ENDIF # .IF "$(GUI)"=="WNT"
+-APP1OBJS= $(OBJFILES)
++
++APP1OBJS= $(OBJFILES)
++
+ APP1STDLIBS=$(TOOLSLIB) \
+ $(OSLLIB) \
+ $(ONELIB) \
+@@ -82,36 +84,18 @@
+ APP1DEF= $(MISC)$/$(TARGET).def
+ .ENDIF
+
+-
+ .IF "$(COM)"=="GCC"
+ ADDOPTFILES=$(OBJ)$/gengal.obj
+ add_cflagscxx="-frtti -fexceptions"
+ .ENDIF
+
+-
+ # --- Targets ------------------------------------------------------
+
+ ALL : \
+ ALLTAR \
+- $(SCRIPTFILES) \
+- $(BIN)$/gengal.rdb
++ $(SCRIPTFILES)
+
+ .INCLUDE : target.mk
+
+ $(SCRIPTFILES) : $$(@:f:+".sh")
+ +@tr -d "\015" < $(@:f:+".sh") > $@
+-
+-$(BIN)$/gengal.rdb : makefile.mk $(UNOUCRRDB)
+- rm -f $@
+- $(GNUCOPY) $(UNOUCRRDB) $@
+- +cd $(BIN) && \
+- regcomp -register -r gengal.rdb \
+- -c i18nsearch.uno$(DLLPOST) \
+- -c i18npool.uno$(DLLPOST) \
+- -c configmgr2.uno$(DLLPOST) \
+- -c servicemgr.uno$(DLLPOST) \
+- -c $(DLLPRE)fwl$(UPD)$(DLLSUFFIX)$(DLLPOST) \
+- -c $(DLLPRE)ucpfile1$(DLLPOST) \
+- -c $(DLLPRE)fileacc$(DLLPOST) \
+- -c $(DLLPRE)ucb1$(DLLPOST)
+-
diff --git a/patches/src680/gui-gtk-contextmenu.diff b/patches/src680/gui-gtk-contextmenu.diff
new file mode 100644
index 000000000..afd77366a
--- /dev/null
+++ b/patches/src680/gui-gtk-contextmenu.diff
@@ -0,0 +1,16 @@
+Index: vcl/unx/gtk/window/gtkframe.cxx
+===================================================================
+RCS file: /cvs/gsl/vcl/unx/gtk/window/gtkframe.cxx,v
+retrieving revision 1.47
+diff -u -p -u -r1.47 gtkframe.cxx
+--- vcl/unx/gtk/window/gtkframe.cxx 5 May 2006 11:01:02 -0000 1.47
++++ vcl/unx/gtk/window/gtkframe.cxx 19 May 2006 09:03:56 -0000
+@@ -190,7 +190,7 @@ static USHORT GetKeyCode( guint keyval )
+ case GDK_KP_Equal:
+ case GDK_equal: nCode = KEY_EQUAL; break;
+ case GDK_Find: nCode = KEY_FIND; break;
+- case GDK_Menu: nCode = KEY_MENU; break;
++ case GDK_Menu: nCode = KEY_CONTEXTMENU;break;
+ case GDK_Help: nCode = KEY_HELP; break;
+ case GDK_Undo: nCode = KEY_UNDO; break;
+ case GDK_Redo: nCode = KEY_REPEAT; break;
diff --git a/patches/src680/hang-sw-layout.diff b/patches/src680/hang-sw-layout.diff
new file mode 100644
index 000000000..6d7e858a2
--- /dev/null
+++ b/patches/src680/hang-sw-layout.diff
@@ -0,0 +1,32 @@
+--- sw/source/core/layout/layact.cxx
++++ sw/source/core/layout/layact.cxx
+@@ -2266,6 +2266,7 @@
+ ( !bBrowse && pPage->IsInvalidLayout() ) ||
+ // OD 07.05.2003 #109435# - consider interrupt formatting
+ ( IS_FLYS && IS_INVAFLY && !mbFormatCntntOnInterrupt )
++ && pCntnt->GetNextCntntFrm()
+ )
+ return FALSE;
+ }
+
+--- sw/source/core/layout/wsfrm.cxx
++++ sw/source/core/layout/wsfrm.cxx
+@@ -517,6 +517,18 @@
+ return;
+
+ SwRootFrm *pRoot = (SwRootFrm*)pPage->GetUpper();
++ const SwFrm* pFrm = FindFooterOrHeader();
++ if ( IsHeaderFrm() || IsFooterFrm() )
++ {
++ if ( pFrm->GetDrawObjs() )
++ pPage->InvalidateCntnt();
++ if ( this == pFrm )
++ {
++ pRoot->SetIdleFlags();
++ return;
++ }
++ }
++
+ const SwFlyFrm *pFly = FindFlyFrm();
+ if ( IsCntntFrm() )
+ {
diff --git a/patches/src680/help-msg-add-package-info.diff b/patches/src680/help-msg-add-package-info.diff
new file mode 100644
index 000000000..510cf0054
--- /dev/null
+++ b/patches/src680/help-msg-add-package-info.diff
@@ -0,0 +1,11 @@
+--- sfx2/source/appl/sfxhelp.cxx~ 2006-02-15 02:53:15.839949000 +0100
++++ sfx2/source/appl/sfxhelp.cxx 2006-02-15 02:55:01.389949000 +0100
+@@ -151,7 +151,7 @@
+
+ NoHelpErrorBox::NoHelpErrorBox( Window* _pParent ) :
+
+- ErrorBox( _pParent, WB_OK, String( SfxResId( RID_STR_HLPFILENOTEXIST ) ) )
++ ErrorBox( _pParent, WB_OK, String( SfxResId( RID_STR_HLPFILENOTEXIST ) ).Append(String(DEFINE_CONST_UNICODE(".\nPlease install the openoffice.org-help-en-us package or the locale specific help package openoffice.org-help-<language-code>."))) )
+ {
+ // Error message: "No help available"
+ }
diff --git a/patches/src680/ms-interoperability-email-attachment-as-doc-xls-ppt-m99.diff b/patches/src680/ms-interoperability-email-attachment-as-doc-xls-ppt-m99.diff
index 8f426b39b..478909f15 100644
--- a/patches/src680/ms-interoperability-email-attachment-as-doc-xls-ppt-m99.diff
+++ b/patches/src680/ms-interoperability-email-attachment-as-doc-xls-ppt-m99.diff
@@ -239,7 +239,7 @@
<menu:menuitem menu:id=".uno:NewHtmlDoc" menu:helpid="20040" menu:label="" />
--- sd/uiconfig/simpress/menubar/menubar.xml.bakj 2005-02-18 16:44:27.103479847 +0530
+++ sd/uiconfig/simpress/menubar/menubar.xml 2005-02-18 16:47:02.584344135 +0530
-@@ -22,6 +22,7 @@
+@@ -22,7 +22,8 @@
<menu:menupopup>
<menu:menuitem menu:id=".uno:SendMail" menu:helpid="5331" menu:label="" />
<menu:menuitem menu:id=".uno:SendMailDocAsPDF" menu:helpid="6672" menu:label="" />
@@ -247,34 +247,54 @@
</menu:menupopup>
</menu:menu>
<menu:menuseparator/>
---- officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu.bakj 2005-02-18 16:55:18.659537625 +0530
-+++ officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu 2005-02-18 17:00:20.837598320 +0530
-@@ -809,6 +809,11 @@
+
+--- officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu
++++ officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu
+@@ -809,6 +809,19 @@
<value>1</value>
</prop>
</node>
+ <node oor:name=".uno:SendMailDocAsMSDoc" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Document as MS-~Doc Attachment...</value>
++ <value xml:lang="de">Dokument als Microsoft Word-Anlage</value>
++ <value xml:lang="es">Documento como archivo adjunto de Microsoft Word</value>
++ <value xml:lang="fr">Document en tant que pièce jointe Microsoft Word</value>
++ <value xml:lang="it">Documento come allegato di Microsoft Word</value>
++ <value xml:lang="ja">Microsoft Wordが添付されているドキュメント</value>
++ <value xml:lang="pt-BR">Documentar como Anexo do Microsoft Word</value>
++ <value xml:lang="zh-CN">作为 Microsoft Word 附件的文档</value>
++ <value xml:lang="zh-TW">當作 Microsoft Word 附件文件處理</value>
+ </prop>
+ </node>
<node oor:name=".uno:SendOutlineToClipboard" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="de">Gliederung zur Zwis~chenablage</value>
+
--- officecfg/registry/data/org/openoffice/Office/UI/DrawImpressCommands.xcu.bakj 2005-02-18 16:58:17.271973105 +0530
+++ officecfg/registry/data/org/openoffice/Office/UI/DrawImpressCommands.xcu 2005-02-18 16:59:43.010223193 +0530
-@@ -1731,6 +1731,11 @@
+@@ -1731,6 +1731,19 @@
<value xml:lang="en-US">Sen~d</value>
</prop>
</node>
+ <node oor:name=".uno:SendMailDocAsMSPowerPoint" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Document as MS-~PPT Attachment...</value>
++ <value xml:lang="de">Dokument als Microsoft PowerPoint-Anlage</value>
++ <value xml:lang="es">Documento como archivo adjunto de Microsoft PowerPoint</value>
++ <value xml:lang="fr">Document en tant que pièce jointe Microsoft PowerPoint</value>
++ <value xml:lang="it">Documento come allegato di Microsoft PowerPoint</value>
++ <value xml:lang="ja">Microsoft PowerPointが添付されているドキュメント</value>
++ <value xml:lang="pt-BR">Documentar como Anexo do Microsoft PowerPoint</value>
++ <value xml:lang="zh-CN">作为 Microsoft PowerPoint 附件的文档</value>
++ <value xml:lang="zh-TW">當作 Microsoft PowerPoint 附件文件處理</value>
+ </prop>
+ </node>
<node oor:name=".uno:TemplatesMenu" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="de">~Vorlagen</value>
+
+
--- svx/inc/globlmn_tmpl.hrc.bakj 2005-02-18 18:05:06.196343865 +0530
+++ svx/inc/globlmn_tmpl.hrc 2005-02-18 18:07:51.216700899 +0530
@@ -588,6 +588,24 @@
@@ -398,15 +418,25 @@
{
--- officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu.bakj 2005-05-10 13:59:29.000000000 +0530
+++ officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu 2005-05-10 14:00:12.000000000 +0530
-@@ -1498,6 +1498,11 @@
+@@ -1498,6 +1498,19 @@
<value xml:lang="en-US">Sen~d</value>
</prop>
</node>
+ <node oor:name=".uno:SendMailDocAsMSExcel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Document as MS-E~xcel Attachment...</value>
++ <value xml:lang="de">Dokument als Microsoft Excel-Anlage</value>
++ <value xml:lang="es">Documento como archivo adjunto de Microsoft Excel</value>
++ <value xml:lang="fr">Document en tant que pièce jointe Microsoft Excel</value>
++ <value xml:lang="it">Documento come allegato di Microsoft Excel</value>
++ <value xml:lang="ja">Microsoft Excelが添付されているドキュメント</value>
++ <value xml:lang="pt-BR">Documentar como Anexo do Microsoft Excel</value>
++ <value xml:lang="zh-CN">作为 Microsoft Excel 附件的文档</value>
++ <value xml:lang="zh-TW">當作 Microsoft Excel 附件文件處理</value>
+ </prop>
+ </node>
<node oor:name=".uno:ProtectMenu" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="de">Dokument sch~ützen</value>
+
+
diff --git a/patches/src680/office-cfg-vcl-greek-fonts.diff b/patches/src680/office-cfg-vcl-greek-fonts.diff
new file mode 100644
index 000000000..ddc8f1134
--- /dev/null
+++ b/patches/src680/office-cfg-vcl-greek-fonts.diff
@@ -0,0 +1,272 @@
+--- officecfg/registry/data/org/openoffice/VCL.xcu.old 2006-02-03 18:13:21.000000000 +0100
++++ officecfg/registry/data/org/openoffice/VCL.xcu 2006-04-20 16:04:09.000000000 +0200
+@@ -160,6 +160,41 @@
+ <value>Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma;Luxi Sans;Interface User;WarpSans;Geneva;Tahoma;MS Sans Serif;Helv;Dialog;Albany;Lucida;Helvetica;Charcoal;Chicago;Arial;Helmet;Interface System;Sans Serif</value>
+ </prop>
+ </node>
++ <node oor:name="el" oor:op="replace">
++ <prop oor:name="LATIN_DISPLAY" oor:type="xs:string" oor:op="replace">
++ <value>Albany AMT;Albany;Arial;DejaVu Sans;CMU Sans Serif;FreeSans;Nimbus Sans L;Helvetica;Lucida;Geneva;Helmet;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
++ </prop>
++ <prop oor:name="LATIN_HEADING" oor:type="xs:string" oor:op="replace">
++ <value>Albany AMT;Albany;Arial;DejaVu Sans;CMU Sans Serif;FreeSans;Nimbus Sans L;Helvetica;Lucida;Geneva;Helmet;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
++ </prop>
++ <prop oor:name="LATIN_FIXED" oor:type="xs:string" oor:op="replace">
++ <value>Cumberland AMT;Cumberland;Courier New;DejaVu Sans Mono;CMU Typewriter Text;FreeMono;Nimbus Mono L;Courier;Lucida Sans Typewriter;Lucida Typewriter;Monaco;Monospaced</value>
++ </prop>
++ <prop oor:name="LATIN_PRESENTATION" oor:type="xs:string" oor:op="replace">
++ <value>Albany AMT;Albany;Arial;DejaVu Sans;CMU Sans Serif;FreeSans;Nimbus Sans L;Helvetica;Lucida;Geneva;Helmet;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
++ </prop>
++ <prop oor:name="LATIN_SPREADSHEET" oor:type="xs:string" oor:op="replace">
++ <value>Albany AMT;Albany;Arial;DejaVu Sans;CMU Sans Serif;FreeSans;Nimbus Sans L;Helvetica;Lucida;Geneva;Helmet;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
++ </prop>
++ <prop oor:name="LATIN_TEXT" oor:type="xs:string" oor:op="replace">
++ <value>Thorndale AMT;Thorndale;Times New Roman;DejaVu Serif;CMU Serif;FreeSerif;Nimbus Roman No9 L;Luxi Serif;Times;Lucida Serif;Lucida Bright;Timmons;New York;Serif</value>
++ </prop>
++ <prop oor:name="SANS" oor:type="xs:string" oor:op="replace">
++ <value>Albany AMT;Albany;Arial;DejaVu Sans;CMU Sans Serif;FreeSans;Nimbus Sans L;Helvetica;Lucida;Geneva;Helmet;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
++ </prop>
++ <prop oor:name="SERIF" oor:type="xs:string" oor:op="replace">
++ <value>Thorndale AMT;Thorndale;Times New Roman;DejaVu Serif;CMU Serif;FreeSerif;Nimbus Roman No9 L;Luxi Serif;Times;Lucida Serif;Lucida Bright;Timmons;New York;Serif</value>
++ </prop>
++ <prop oor:name="UI_FIXED" oor:type="xs:string" oor:op="replace">
++ <value>Cumberland AMT;Cumberland;Courier New;DejaVu Sans Mono;CMU Typewriter Text;FreeMono;Nimbus Mono L;Courier;Lucida Sans Typewriter;Lucida Typewriter;Monaco;Monospaced</value>
++ </prop>
++ <prop oor:name="FIXED" oor:type="xs:string" oor:op="replace">
++ <value>Cumberland AMT;Cumberland;Courier New;DejaVu Sans Mono;CMU Typewriter Text;FreeMono;Nimbus Mono L;Courier;Lucida Sans Typewriter;Lucida Typewriter;Monaco;Monospaced</value>
++ </prop>
++ <prop oor:name="UI_SANS" oor:type="xs:string" oor:op="replace">
++ <value>Albany AMT;Albany;Arial;DejaVu Sans;CMU Sans Serif;FreeSans;Nimbus Sans L;Helvetica;Lucida;Geneva;Helmet;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
++ </prop>
++ </node>
+ <node oor:name="hr-HR" oor:op="replace">
+ <prop oor:name="LATIN_DISPLAY" oor:type="xs:string" oor:op="replace">
+ <value>Albany;Arial;Luxi Serif;Helvetica;Lucida;Geneva;Helmet;SansSerif;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+@@ -1749,6 +1784,75 @@
+ <value>Special,Italic,Script</value>
+ </prop>
+ </node>
++ <node oor:name="cmusansserif" oor:op="replace">
++ <prop oor:name="SubstFonts">
++ <value>albanyamt;albany;arial;dejavusans;cmusansserif;freesans;nimbussansl;helvetica;lucida;geneva;helmet;andalesansui;arialunicodems;lucidasansunicode;tahoma</value>
++ </prop>
++ <prop oor:name="SubstFontsMS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsPS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsHTML">
++ <value></value>
++ </prop>
++ <prop oor:name="FontWeight">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontWidth">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontType">
++ <value>Standard,Normal,SansSerif</value>
++ </prop>
++ </node>
++ <node oor:name="cmuserif" oor:op="replace">
++ <prop oor:name="SubstFonts">
++ <value>thorndaleamt;thorndale;timesnewroman;dejavuserif;cmuserif;freeserif;nimbusromanno9l;luxiserif;times;lucidaserif;lucidabright;timmons;newyork;serif</value>
++ </prop>
++ <prop oor:name="SubstFontsMS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsPS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsHTML">
++ <value></value>
++ </prop>
++ <prop oor:name="FontWeight">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontWidth">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontType">
++ <value>Standard,Normal,Serif</value>
++ </prop>
++ </node>
++ <node oor:name="cmutypewritertext" oor:op="replace">
++ <prop oor:name="SubstFonts">
++ <value>cumberlandamt;cumberland;couriernew;dejavusansmono;cmutypewritertext;freemono;nimbusmonol;courier;lucidasanstypewriter;lucidatypewriter;monaco;monospaced</value>
++ </prop>
++ <prop oor:name="SubstFontsMS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsPS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsHTML">
++ <value></value>
++ </prop>
++ <prop oor:name="FontWeight">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontWidth">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontType">
++ <value>Standard,Normal,Fixed,Typewriter</value>
++ </prop>
++ </node>
+ <node oor:name="colonna" oor:op="replace">
+ <prop oor:name="SubstFonts">
+ <value>monotypeoldstyleboldoutline;monotypeoldstyleoutline;chevaraoutline;imprintmtshadow;imprintshadow;imprint;colonnamt;castellar;imprintmtshadow;imprintshadow;imprint;chevaraoutline;chevara;gallia;colonnamt;algerian;castellar;imprintmtshadow;imprintshadow;imprint;chevara;gallia;algerian</value>
+@@ -1978,6 +2082,75 @@
+ <value>Italic,Script</value>
+ </prop>
+ </node>
++ <node oor:name="dejavusans" oor:op="replace">
++ <prop oor:name="SubstFonts">
++ <value>albanyamt;albany;arial;dejavusans;cmusansserif;freesans;nimbussansl;helvetica;lucida;geneva;helmet;andalesansui;arialunicodems;lucidasansunicode;tahoma</value>
++ </prop>
++ <prop oor:name="SubstFontsMS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsPS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsHTML">
++ <value></value>
++ </prop>
++ <prop oor:name="FontWeight">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontWidth">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontType">
++ <value>Standard,Normal,SansSerif</value>
++ </prop>
++ </node>
++ <node oor:name="dejavusansmono" oor:op="replace">
++ <prop oor:name="SubstFonts">
++ <value>cumberlandamt;cumberland;couriernew;dejavusansmono;cmutypewritertext;freemono;nimbusmonol;courier;lucidasanstypewriter;lucidatypewriter;monaco;monospaced</value>
++ </prop>
++ <prop oor:name="SubstFontsMS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsPS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsHTML">
++ <value></value>
++ </prop>
++ <prop oor:name="FontWeight">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontWidth">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontType">
++ <value>Standard,Normal,Fixed,Typewriter</value>
++ </prop>
++ </node>
++ <node oor:name="dejavuserif" oor:op="replace">
++ <prop oor:name="SubstFonts">
++ <value>thorndaleamt;thorndale;timesnewroman;dejavuserif;cmuserif;freeserif;nimbusromanno9l;luxiserif;times;lucidaserif;lucidabright;timmons;newyork;serif</value>
++ </prop>
++ <prop oor:name="SubstFontsMS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsPS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsHTML">
++ <value></value>
++ </prop>
++ <prop oor:name="FontWeight">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontWidth">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontType">
++ <value>Standard,Normal,Serif</value>
++ </prop>
++ </node>
+ <node oor:name="din" oor:op="replace">
+ <prop oor:name="SubstFonts">
+ <value>albany;arial;helvetica;lucidasans;lucida;geneva;helmet;sansserif;nimbussansl;nimbussans;andalesansui;arialunicodems;lucidaunicode</value>
+@@ -2392,6 +2565,75 @@
+ <value>Decorative,Italic,Script,Comic</value>
+ </prop>
+ </node>
++ <node oor:name="freemono" oor:op="replace">
++ <prop oor:name="SubstFonts">
++ <value>cumberlandamt;cumberland;couriernew;dejavusansmono;cmutypewritertext;freemono;nimbusmonol;courier;lucidasanstypewriter;lucidatypewriter;monaco;monospaced</value>
++ </prop>
++ <prop oor:name="SubstFontsMS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsPS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsHTML">
++ <value></value>
++ </prop>
++ <prop oor:name="FontWeight">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontWidth">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontType">
++ <value>Standard,Normal,Fixed,Typewriter</value>
++ </prop>
++ </node>
++ <node oor:name="freesans" oor:op="replace">
++ <prop oor:name="SubstFonts">
++ <value>albanyamt;albany;arial;dejavusans;cmusansserif;freesans;nimbussansl;helvetica;lucida;geneva;helmet;andalesansui;arialunicodems;lucidasansunicode;tahoma</value>
++ </prop>
++ <prop oor:name="SubstFontsMS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsPS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsHTML">
++ <value></value>
++ </prop>
++ <prop oor:name="FontWeight">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontWidth">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontType">
++ <value>Standard,Normal,SansSerif</value>
++ </prop>
++ </node>
++ <node oor:name="freeserif" oor:op="replace">
++ <prop oor:name="SubstFonts">
++ <value>thorndaleamt;thorndale;timesnewroman;dejavuserif;cmuserif;freeserif;nimbusromanno9l;luxiserif;times;lucidaserif;lucidabright;timmons;newyork;serif</value>
++ </prop>
++ <prop oor:name="SubstFontsMS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsPS">
++ <value></value>
++ </prop>
++ <prop oor:name="SubstFontsHTML">
++ <value></value>
++ </prop>
++ <prop oor:name="FontWeight">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontWidth">
++ <value>Normal</value>
++ </prop>
++ <prop oor:name="FontType">
++ <value>Standard,Normal,Serif</value>
++ </prop>
++ </node>
+ <node oor:name="frenchscript" oor:op="replace">
+ <prop oor:name="SubstFonts">
+ <value>palacescript;palacescriptmt;arioso;shelley;zapfchancery;itczapfchancery;monotypecorsiva;corsiva;chancery;chanceryl;lucidacalligraphy;lucidahandwriting;comicsansms;kidprint;</value>
diff --git a/patches/src680/ooqstart-black-progress-bar.diff b/patches/src680/ooqstart-black-progress-bar.diff
new file mode 100644
index 000000000..03c634795
--- /dev/null
+++ b/patches/src680/ooqstart-black-progress-bar.diff
@@ -0,0 +1,27 @@
+--- desktop/unx/source/splashx.c-old 2006-05-31 15:44:59.000000000 +0200
++++ desktop/unx/source/splashx.c 2006-05-31 15:45:16.000000000 +0200
+@@ -332,7 +332,7 @@
+ }
+ else
+ {
+- XSetForeground( display, pixmap_gc, WhitePixel( display, screen ) );
++ XSetForeground( display, pixmap_gc, BlackPixel( display, screen ) );
+ delta = luminance - 255000;
+ }
+
+@@ -503,13 +503,13 @@
+ length = 0;
+
+ // border
+- XSetForeground( display, gc, WhitePixel( display, screen ) );
++ XSetForeground( display, gc, BlackPixel( display, screen ) );
+ XDrawRectangle( display, win, gc,
+ tlx, tly,
+ barwidth, barheight );
+
+ // progress bar
+- XSetForeground( display, gc, WhitePixel( display, screen ) );
++ XSetForeground( display, gc, BlackPixel( display, screen ) );
+ XFillRectangle( display, win, gc,
+ tlx + barspace, tly + barspace,
+ length + 1, barheight - 2*barspace + 1 );
diff --git a/patches/src680/ooqstart-honour-sofficerc.diff b/patches/src680/ooqstart-honour-sofficerc.diff
new file mode 100644
index 000000000..d8215e207
--- /dev/null
+++ b/patches/src680/ooqstart-honour-sofficerc.diff
@@ -0,0 +1,49 @@
+--- desktop/unx/source/start.c-old 2006-03-19 15:07:26.000000000 +0100
++++ desktop/unx/source/start.c 2006-03-19 15:44:15.000000000 +0100
+@@ -395,8 +395,6 @@
+ gboolean next_arg_not_filename = FALSE;
+ GPtrArray *args = g_ptr_array_sized_new (argc + 8);
+
+- *inhibit_splash = FALSE;
+-
+ for (i = 0; i < argc; i++)
+ {
+ char *converted;
+@@ -438,7 +436,7 @@
+ int main (int argc, char **argv)
+ {
+ int fd;
+- gboolean inhibit_splash;
++ gboolean inhibit_splash = FALSE;
+ GIOChannel *status_channel = NULL;
+ gboolean sent_args = FALSE;
+ char *app_path, *pipe_path;
+@@ -451,6 +449,28 @@
+ g_error ("can't get cwd");
+ cwd_str[sizeof(cwd_str)-1] = '\0';
+
++ FILE *sofficerc;
++ char* buf = malloc(80*sizeof(char));
++ sofficerc = fopen("/etc/openoffice/sofficerc", "r");
++ if (sofficerc != NULL) {
++ while(!feof(sofficerc)) {
++ fgets(buf, 80, sofficerc);
++#ifdef DEBUG
++ fprintf(stderr,buf);
++#endif
++ if(strncmp("Logo=0",buf,6) == 0) {
++#ifdef DEBUG
++ fprintf(stderr, "Disabling Logo..\n");
++#endif
++ inhibit_splash = TRUE;
++ }
++ }
++ } else {
++ perror("fopen() failed.");
++ }
++ fclose(sofficerc);
++ free(buf);
++
+ args = setup_args (argc, argv, cwd_str, &inhibit_splash);
+
+ app_path = get_app_path (argv[0]);
diff --git a/patches/src680/recently-used.diff b/patches/src680/recently-used.diff
new file mode 100644
index 000000000..9e39089fa
--- /dev/null
+++ b/patches/src680/recently-used.diff
@@ -0,0 +1,71 @@
+Index: shell/source/unix/sysshell/recently_used_file_handler.cxx
+===================================================================
+RCS file: /cvs/gsl/shell/source/unix/sysshell/recently_used_file_handler.cxx,v
+retrieving revision 1.5
+diff -u -p -u -w -r1.5 recently_used_file_handler.cxx
+--- shell/source/unix/sysshell/recently_used_file_handler.cxx 7 Sep 2005 19:56:25 -0000 1.5
++++ shell/source/unix/sysshell/recently_used_file_handler.cxx 16 Jun 2006 10:40:51 -0000
+@@ -49,6 +49,10 @@
+ #include "rtl/string.hxx"
+ #endif
+
++#ifndef _RTL_STRBUF_HXX_
++#include "rtl/strbuf.hxx"
++#endif
++
+ #include "osl/thread.h"
+
+ #ifndef INCLUDED_RECENTLY_USED_FILE_HXX
+@@ -212,10 +216,33 @@ namespace /* private */ {
+ write_xml_end_tag(TAG_RECENT_ITEM, file);
+ }
+
++ static rtl::OString escape_content(const string_t &text)
++ {
++ rtl::OStringBuffer aBuf;
++ for (sal_Int32 i = 0; i < text.length(); i++)
++ {
++# define MAP(a,b) case a: aBuf.append(b); break
++ switch (text[i])
++ {
++ MAP ('&', "&amp;");
++ MAP ('<', "&lt;");
++ MAP ('>', "&gt;");
++ MAP ('\'', "&apos;");
++ MAP ('"', "&quot;");
++ default:
++ aBuf.append(text[i]);
++ break;
++ }
++# undef MAP
++ }
++ return aBuf.makeStringAndClear();
++ }
++
+ void write_xml_tag(const string_t& name, const string_t& value, const recently_used_file& file) const
+ {
+ write_xml_start_tag(name, file);
+- file.write(value.c_str(), value.length());
++ rtl::OString escaped = escape_content (value);
++ file.write(escaped.getStr(), escaped.getLength());
+ write_xml_end_tag(name, file);
+ }
+
+@@ -541,7 +568,7 @@ const rtl::OUString DEFAULT_CONTEXT = rt
+
+ // We need to re-encode file urls because osl_getFileURLFromSystemPath converts
+ // to UTF-8 before encoding non ascii characters, which is not what other apps expect.
+-rtl::OUString translateToExternalUrl(const rtl::OUString& internalUrl)
++static rtl::OUString translateToExternalUrl(const rtl::OUString& internalUrl)
+ {
+ rtl::OUString extUrl;
+
+@@ -572,7 +599,7 @@ extern "C" void add_to_recently_used_fil
+ rtl::OUString externalUrl = translateToExternalUrl(file_url);
+
+ read_recently_used_items(ruf, item_list);
+- recently_used_item_list_add(item_list, (externalUrl.getLength()) ? externalUrl : file_url, mime_type);
++ recently_used_item_list_add(item_list, externalUrl.getLength() ? externalUrl : file_url, mime_type);
+ write_recently_used_items(ruf, item_list);
+ }
+ catch(const char* ex)
diff --git a/patches/src680/sc-csvfix-ui.diff b/patches/src680/sc-csvfix-ui.diff
index 39a739602..7a9429466 100644
--- a/patches/src680/sc-csvfix-ui.diff
+++ b/patches/src680/sc-csvfix-ui.diff
@@ -177,7 +177,7 @@
ScDelimiterTable* pTextSepTab;
--- sc/source/ui/dbgui/imoptdlg.src 2005-08-09 20:17:17.000000000 +0530
+++ sc/source/ui/dbgui/imoptdlg.src 2005-08-31 07:48:22.000000000 +0530
-@@ -134,12 +134,22 @@ ModalDialog RID_SCDLG_IMPORTOPT
+@@ -134,12 +134,30 @@ ModalDialog RID_SCDLG_IMPORTOPT
};
CheckBox CB_FIXEDWIDTH
{
@@ -197,6 +197,14 @@
+ Text [ de ] = " ";
+ Text [ en-US ] = "Save as ~Rendered";
+ Text [ x-comment ] = " ";
++ Text[ de ] = "Als ~gerendert speichern";
++ Text[ es ] = "Guardar como ~procesado";
++ Text[ fr ] = "Enregistrer en tant que ~rendu";
++ Text[ it ] = "Salva come documento renderizzato";
++ Text[ ja ] = "名前を付けて保存~表示";
++ Text[ pt-BR ] = "Gravar como ~Renderizado";
++ Text[ zh-CN ] = "另存为已显示(~R)";
++ Text[ zh-TW ] = "隨機儲存(~R)";
+ };
OKButton BTN_OK
{
diff --git a/patches/src680/sc-dp-hash-items.diff b/patches/src680/sc-dp-hash-items.diff
new file mode 100644
index 000000000..8988bf35f
--- /dev/null
+++ b/patches/src680/sc-dp-hash-items.diff
@@ -0,0 +1,950 @@
+Index: sc/inc/dptabdat.hxx
+===================================================================
+RCS file: /cvs/sc/sc/inc/dptabdat.hxx,v
+retrieving revision 1.5
+diff -u -w -p -r1.5 dptabdat.hxx
+--- sc/inc/dptabdat.hxx 8 Sep 2005 17:36:18 -0000 1.5
++++ sc/inc/dptabdat.hxx 19 May 2006 14:50:21 -0000
+@@ -82,8 +82,14 @@ struct ScDPItemData
+ aString(rS), fValue(fV), bHasValue( bHV ) {}
+
+ void SetString( const String& rS ) { aString = rS; bHasValue = FALSE; }
+-
+ BOOL IsCaseInsEqual( const ScDPItemData& r ) const;
++
++ size_t Hash() const;
++
++ // exact equality
++ BOOL operator==( const ScDPItemData& r ) const;
++ // case insensitive equality
++ static sal_Int32 Compare( const ScDPItemData& rA, const ScDPItemData& rB );
+ };
+
+ #define SC_VALTYPE_EMPTY 0
+Index: sc/inc/dptabres.hxx
+===================================================================
+RCS file: /cvs/sc/sc/inc/dptabres.hxx,v
+retrieving revision 1.5
+diff -u -w -p -r1.5 dptabres.hxx
+--- sc/inc/dptabres.hxx 8 Sep 2005 17:36:34 -0000 1.5
++++ sc/inc/dptabres.hxx 19 May 2006 14:50:22 -0000
+@@ -59,6 +59,8 @@
+ #ifndef SC_SCGLOB_HXX
+ #include "global.hxx" // enum ScSubTotalFunc
+ #endif
++#include <hash_map>
++#include <vector>
+
+ namespace com { namespace sun { namespace star { namespace sheet {
+ struct DataPilotFieldReference;
+@@ -309,7 +311,7 @@ private:
+ ScDPResultData* pResultData;
+ ScDPDimension* pParentDim; //! Ref
+ ScDPLevel* pParentLevel; //! Ref
+- ScDPMember* pMemberDesc; //! Ref
++ const ScDPMember* pMemberDesc; //! Ref
+ ScDPResultDimension* pChildDimension;
+ ScDPDataMember* pDataRoot;
+ BOOL bHasElements;
+@@ -341,6 +343,7 @@ public:
+ long GetSubTotalCount( long* pUserSubStart = NULL ) const;
+
+ BOOL IsNamedItem( const ScDPItemData& r ) const;
++ BOOL IsValidEntry( const ScDPItemData* pMembers ) const;
+
+ void SetHasElements() { bHasElements = TRUE; }
+ void SetAutoHidden() { bAutoHidden = TRUE; }
+@@ -379,8 +382,8 @@ public:
+
+ ScDPDataMember* GetDataRoot() const { return pDataRoot; }
+
+- ScDPDimension* GetParentDim() { return pParentDim; } //! Ref
+- ScDPLevel* GetParentLevel() { return pParentLevel; } //! Ref
++ const ScDPDimension* GetParentDim() const { return pParentDim; } //! Ref
++ const ScDPLevel* GetParentLevel() const { return pParentLevel; } //! Ref
+
+ ScDPAggData* GetColTotal( long nMeasure ) const;
+ };
+@@ -389,17 +392,17 @@ class ScDPDataMember
+ {
+ private:
+ ScDPResultData* pResultData;
+- ScDPResultMember* pResultMember; //! Ref?
++ const ScDPResultMember* pResultMember; //! Ref?
+ ScDPDataDimension* pChildDimension;
+ ScDPAggData aAggregate;
+
+ void UpdateValues( const ScDPValueData* pValues, const ScDPSubTotalState& rSubState );
+
+ public:
+- ScDPDataMember( ScDPResultData* pData, ScDPResultMember* pRes );
++ ScDPDataMember( ScDPResultData* pData, const ScDPResultMember* pRes );
+ ~ScDPDataMember();
+
+- void InitFrom( ScDPResultDimension* pDim );
++ void InitFrom( const ScDPResultDimension* pDim );
+
+ String GetName() const;
+ BOOL IsVisible() const;
+@@ -453,9 +456,18 @@ SV_DECL_PTRARR_DEL(ScDPDataMembers, ScDP
+
+ class ScDPResultDimension
+ {
++public :
++ struct MemberHashFunc : public std::unary_function< const ScDPItemData &, size_t >
++ {
++ size_t operator() (const ScDPItemData &rData) const { return rData.Hash(); }
++ };
++ typedef std::vector <ScDPResultMember *> MemberArray;
++ typedef std::hash_map <ScDPItemData, ScDPResultMember *, MemberHashFunc> MemberHash;
++
+ private:
+ ScDPResultData* pResultData;
+- ScDPResultMembers aMembers;
++ MemberArray maMemberArray;
++ MemberHash maMemberHash;
+ BOOL bInitialized;
+ String aDimensionName; //! or ptr to IntDimension?
+ BOOL bIsDataLayout; //! or ptr to IntDimension?
+@@ -468,6 +480,7 @@ private:
+ long nAutoMeasure;
+ long nAutoCount;
+
++ ScDPResultMember* FindMember( const ScDPItemData& rData ) const;
+ public:
+ ScDPResultDimension( ScDPResultData* pData );
+ ~ScDPResultDimension();
+@@ -520,7 +533,8 @@ public:
+
+ // for ScDPDataDimension::InitFrom
+ long GetMemberCount() const;
+- ScDPResultMember* GetMember(long n) const;
++ const ScDPResultMember* GetMember(long n) const;
++ ScDPResultMember* GetMember(long n);
+
+ const ScMemberSortOrder& GetMemberOrder() const { return aMemberOrder; }
+ ScMemberSortOrder& GetMemberOrder() { return aMemberOrder; }
+@@ -544,7 +558,7 @@ class ScDPDataDimension
+ {
+ private:
+ ScDPResultData* pResultData;
+- ScDPResultDimension* pResultDimension; // column
++ const ScDPResultDimension* pResultDimension; // column
+ ScDPDataMembers aMembers;
+ BOOL bIsDataLayout; //! or ptr to IntDimension?
+
+@@ -552,7 +566,7 @@ public:
+ ScDPDataDimension( ScDPResultData* pData );
+ ~ScDPDataDimension();
+
+- void InitFrom( ScDPResultDimension* pDim ); // recursive
++ void InitFrom( const ScDPResultDimension* pDim ); // recursive
+ void ProcessData( const ScDPItemData* pDataMembers, const ScDPValueData* pValues,
+ const ScDPSubTotalState& rSubState );
+
+Index: sc/inc/dptabsrc.hxx
+===================================================================
+RCS file: /cvs/sc/sc/inc/dptabsrc.hxx,v
+retrieving revision 1.7
+diff -u -w -p -r1.7 dptabsrc.hxx
+--- sc/inc/dptabsrc.hxx 8 Sep 2005 17:36:50 -0000 1.7
++++ sc/inc/dptabsrc.hxx 19 May 2006 14:50:22 -0000
+@@ -116,6 +116,9 @@
+ #include <cppuhelper/implbase5.hxx>
+ #endif
+
++#ifndef SC_DPTABDAT_HXX
++#include "dptabdat.hxx"
++#endif
+
+ class ScDPResultMember;
+ class ScDPResultData;
+@@ -762,10 +765,8 @@ private:
+ long nHier;
+ long nLev;
+
+- String aName; // name for api etc.
++ ScDPItemData maData;
+ // String aCaption; // visible name (changeable by user)
+- double fValue; // used internally for matching
+- BOOL bHasValue; // TRUE if this is a value
+
+ BOOL bVisible;
+ BOOL bShowDet;
+Index: sc/source/core/data/dptabdat.cxx
+===================================================================
+RCS file: /cvs/sc/sc/source/core/data/dptabdat.cxx,v
+retrieving revision 1.9
+diff -u -w -p -r1.9 dptabdat.cxx
+--- sc/source/core/data/dptabdat.cxx 8 Sep 2005 18:24:11 -0000 1.9
++++ sc/source/core/data/dptabdat.cxx 19 May 2006 14:50:23 -0000
+@@ -47,6 +47,9 @@
+ #ifndef _UNOTOOLS_TRANSLITERATIONWRAPPER_HXX
+ #include <unotools/transliterationwrapper.hxx>
+ #endif
++#ifndef _UNOTOOLS_COLLATORWRAPPER_HXX
++#include <unotools/collatorwrapper.hxx>
++#endif
+
+ #include "dptabdat.hxx"
+ #include "global.hxx"
+@@ -60,6 +63,55 @@ BOOL ScDPItemData::IsCaseInsEqual( const
+ return bHasValue ? ( r.bHasValue && rtl::math::approxEqual( fValue, r.fValue ) ) :
+ ( !r.bHasValue &&
+ ScGlobal::pTransliteration->isEqual( aString, r.aString ) );
++}
++
++size_t ScDPItemData::Hash() const
++{
++ if ( bHasValue )
++ return (size_t) rtl::math::approxFloor( fValue );
++ else
++ // If we do unicode safe case insensitive hash we can drop
++ // ScDPItemData::operator== and use ::IsCasInsEqual
++ return rtl_ustr_hashCode_WithLength( aString.GetBuffer(), aString.Len() );
++}
++
++BOOL ScDPItemData::operator==( const ScDPItemData& r ) const
++{
++ if ( bHasValue )
++ {
++ if ( r.bHasValue )
++ return rtl::math::approxEqual( fValue, r.fValue );
++ else
++ return FALSE;
++ }
++ else if ( bHasValue )
++ return FALSE;
++ else
++ // need exact equality until we have a safe case insensitive string hash
++ return aString == r.aString;
++}
++
++sal_Int32 ScDPItemData::Compare( const ScDPItemData& rA,
++ const ScDPItemData& rB )
++{
++ if ( rA.bHasValue )
++ {
++ if ( rB.bHasValue )
++ {
++ if ( rtl::math::approxEqual( rA.fValue, rB.fValue ) )
++ return 0;
++ else if ( rA.fValue < rB.fValue )
++ return -1;
++ else
++ return 1;
++ }
++ else
++ return -1; // values first
++ }
++ else if ( rB.bHasValue )
++ return 1; // values first
++ else
++ return ScGlobal::pCollator->compareString( rA.aString, rB.aString );
+ }
+
+ // -----------------------------------------------------------------------
+Index: sc/source/core/data/dptabres.cxx
+===================================================================
+RCS file: /cvs/sc/sc/source/core/data/dptabres.cxx,v
+retrieving revision 1.7
+diff -u -w -p -r1.7 dptabres.cxx
+--- sc/source/core/data/dptabres.cxx 8 Sep 2005 18:24:27 -0000 1.7
++++ sc/source/core/data/dptabres.cxx 19 May 2006 14:50:23 -0000
+@@ -48,9 +48,9 @@
+
+ #include <algorithm>
+
++#include "dptabdat.hxx"
+ #include "dptabres.hxx"
+ #include "dptabsrc.hxx"
+-#include "dptabdat.hxx"
+ #include "global.hxx"
+ #include "subtotal.hxx"
+ #include "globstr.hrc"
+@@ -131,7 +131,7 @@ public:
+ BOOL operator()( sal_Int32 nIndex1, sal_Int32 nIndex2 ) const;
+ };
+
+-BOOL lcl_IsLess( ScDPDataMember* pDataMember1, ScDPDataMember* pDataMember2, long nMeasure, BOOL bAscending )
++static BOOL lcl_IsLess( const ScDPDataMember* pDataMember1, const ScDPDataMember* pDataMember2, long nMeasure, BOOL bAscending )
+ {
+ // members can be NULL if used for rows
+
+@@ -162,7 +162,7 @@ BOOL lcl_IsLess( ScDPDataMember* pDataMe
+ }
+ }
+
+-BOOL lcl_IsEqual( ScDPDataMember* pDataMember1, ScDPDataMember* pDataMember2, long nMeasure )
++static BOOL lcl_IsEqual( const ScDPDataMember* pDataMember1, const ScDPDataMember* pDataMember2, long nMeasure )
+ {
+ // members can be NULL if used for rows
+
+@@ -195,13 +195,13 @@ BOOL lcl_IsEqual( ScDPDataMember* pDataM
+
+ BOOL ScDPRowMembersOrder::operator()( sal_Int32 nIndex1, sal_Int32 nIndex2 ) const
+ {
+- ScDPResultMember* pMember1 = rDimension.GetMember(nIndex1);
+- ScDPResultMember* pMember2 = rDimension.GetMember(nIndex2);
++ const ScDPResultMember* pMember1 = rDimension.GetMember(nIndex1);
++ const ScDPResultMember* pMember2 = rDimension.GetMember(nIndex2);
+
+ // GetDataRoot can be NULL if there was no data.
+ // IsVisible == FALSE can happen after AutoShow.
+- ScDPDataMember* pDataMember1 = pMember1->IsVisible() ? pMember1->GetDataRoot() : NULL;
+- ScDPDataMember* pDataMember2 = pMember2->IsVisible() ? pMember2->GetDataRoot() : NULL;
++ const ScDPDataMember* pDataMember1 = pMember1->IsVisible() ? pMember1->GetDataRoot() : NULL;
++ const ScDPDataMember* pDataMember2 = pMember2->IsVisible() ? pMember2->GetDataRoot() : NULL;
+
+ return lcl_IsLess( pDataMember1, pDataMember2, nMeasure, bAscending );
+ }
+@@ -692,7 +692,7 @@ ScDPAggData* ScDPRowTotals::GetGrandTota
+
+ // -----------------------------------------------------------------------
+
+-ScSubTotalFunc lcl_GetForceFunc( ScDPLevel* pLevel, long nFuncNo )
++static ScSubTotalFunc lcl_GetForceFunc( const ScDPLevel* pLevel, long nFuncNo )
+ {
+ ScSubTotalFunc eRet = SUBTOTAL_FUNC_NONE;
+ if ( pLevel )
+@@ -943,6 +943,17 @@ BOOL ScDPResultMember::IsNamedItem( cons
+ return ((ScDPMember*)pMemberDesc)->IsNamedItem( r );
+ return FALSE;
+ }
++BOOL ScDPResultMember::IsValidEntry( const ScDPItemData* pMembers ) const
++{
++ if ( !IsValid() )
++ return FALSE;
++
++ const ScDPResultDimension* pChildDim = GetChildDimension();
++ if (pChildDim)
++ return pChildDim->IsValidEntry( pMembers + 1 );
++ else
++ return TRUE;
++}
+
+ void ScDPResultMember::InitFrom( ScDPDimension** ppDim, ScDPLevel** ppLev, ScDPInitState& rInitState )
+ {
+@@ -1561,7 +1572,7 @@ ScDPAggData* ScDPResultMember::GetColTot
+
+ // -----------------------------------------------------------------------
+
+-ScDPDataMember::ScDPDataMember( ScDPResultData* pData, ScDPResultMember* pRes ) :
++ScDPDataMember::ScDPDataMember( ScDPResultData* pData, const ScDPResultMember* pRes ) :
+ pResultData( pData ),
+ pResultMember( pRes ),
+ pChildDimension( NULL )
+@@ -1606,7 +1617,7 @@ BOOL ScDPDataMember::HasHiddenDetails()
+ return FALSE;
+ }
+
+-void ScDPDataMember::InitFrom( ScDPResultDimension* pDim )
++void ScDPDataMember::InitFrom( const ScDPResultDimension* pDim )
+ {
+ if ( !pChildDimension )
+ pChildDimension = new ScDPDataDimension(pResultData);
+@@ -1671,7 +1682,7 @@ void ScDPDataMember::ProcessData( const
+ {
+ if ( pChildDimension )
+ {
+- ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL;
++ const ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL;
+ aLocalSubState.nColSubTotalFunc = nUserPos;
+ aLocalSubState.eColForce = lcl_GetForceFunc( pForceLevel, nUserPos );
+ }
+@@ -1828,7 +1839,7 @@ void ScDPDataMember::FillDataRow( const
+ {
+ if ( pChildDimension )
+ {
+- ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL;
++ const ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL;
+ aLocalSubState.nColSubTotalFunc = nUserPos;
+ aLocalSubState.eColForce = lcl_GetForceFunc( pForceLevel, nUserPos );
+ }
+@@ -1904,7 +1915,7 @@ void ScDPDataMember::UpdateDataRow( cons
+ {
+ if ( pChildDimension )
+ {
+- ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL;
++ const ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL;
+ aLocalSubState.nColSubTotalFunc = nUserPos;
+ aLocalSubState.eColForce = lcl_GetForceFunc( pForceLevel, nUserPos );
+ }
+@@ -2016,7 +2027,7 @@ void ScDPDataMember::UpdateRunningTotals
+ {
+ if ( pChildDimension )
+ {
+- ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL;
++ const ScDPLevel* pForceLevel = pResultMember ? pResultMember->GetParentLevel() : NULL;
+ aLocalSubState.nColSubTotalFunc = nUserPos;
+ aLocalSubState.eColForce = lcl_GetForceFunc( pForceLevel, nUserPos );
+ }
+@@ -2057,7 +2068,7 @@ void ScDPDataMember::UpdateRunningTotals
+ BOOL bRefDimInCol = ( nRefOrient == sheet::DataPilotFieldOrientation_COLUMN );
+ BOOL bRefDimInRow = ( nRefOrient == sheet::DataPilotFieldOrientation_ROW );
+
+- ScDPResultDimension* pSelectDim = NULL;
++ const ScDPResultDimension* pSelectDim = NULL;
+ long nRowPos = 0;
+ long nColPos = 0;
+
+@@ -2110,7 +2121,7 @@ void ScDPDataMember::UpdateRunningTotals
+ long nMyIndex = bRefDimInCol ? pColIndexes[nColPos] : pRowIndexes[nRowPos];
+ if ( nMyIndex >= 0 && nMyIndex < pSelectDim->GetMemberCount() )
+ {
+- ScDPResultMember* pMyRefMember = pSelectDim->GetMember(nMyIndex);
++ const ScDPResultMember* pMyRefMember = pSelectDim->GetMember(nMyIndex);
+ if ( pMyRefMember && pMyRefMember->HasHiddenDetails() )
+ {
+ pSelectDim = NULL; // don't calculate
+@@ -2485,6 +2496,28 @@ ScDPResultDimension::ScDPResultDimension
+
+ ScDPResultDimension::~ScDPResultDimension()
+ {
++ for( int i = maMemberArray.size () ; i-- > 0 ; )
++ delete maMemberArray[i];
++}
++
++ScDPResultMember *ScDPResultDimension::FindMember( const ScDPItemData& rData ) const
++{
++ if( bIsDataLayout )
++ return maMemberArray[0];
++ MemberHash::const_iterator aRes = maMemberHash.find( rData );
++ if( aRes != maMemberHash.end() )
++ return aRes->second;
++
++ unsigned int i;
++ unsigned int nCount = maMemberArray.size();
++ ScDPResultMember* pResultMember;
++ for( i = 0; i < nCount ; i++ )
++ {
++ pResultMember = maMemberArray[i];
++ if ( pResultMember->IsNamedItem( rData ) )
++ return pResultMember;
++ }
++ return NULL;
+ }
+
+ void ScDPResultDimension::InitFrom( ScDPDimension** ppDim, ScDPLevel** ppLev, ScDPInitState& rInitState )
+@@ -2531,14 +2564,20 @@ void ScDPResultDimension::InitFrom( ScDP
+ ScDPMember* pMember = pMembers->getByIndex(nSorted);
+ if ( aCompare.IsIncluded( *pMember ) )
+ {
+- ScDPResultMember* pNew = new ScDPResultMember( pResultData, pThisDim,
++ std::pair< ScDPItemData, ScDPResultMember *> key;
++
++ key.second = new ScDPResultMember( pResultData, pThisDim,
+ pThisLevel, pMember, FALSE );
+- aMembers.Insert( pNew, aMembers.Count() );
++ maMemberArray.push_back( key.second );
+
+- ScDPItemData aMemberData;
+- pMember->FillItemData( aMemberData );
+- rInitState.AddMember( nDimSource, ScDPItemData( aMemberData ) );
+- pNew->InitFrom( ppChildDim, ppChildLev, rInitState );
++ // honour order of maMemberArray and only insert if it does not
++ // already exist
++ pMember->FillItemData( key.first );
++ if ( maMemberHash.end() == maMemberHash.find( key.first ) )
++ maMemberHash.insert ( key );
++
++ rInitState.AddMember( nDimSource, key.first );
++ key.second->InitFrom( ppChildDim, ppChildLev, rInitState );
+ rInitState.RemoveMember();
+ }
+ }
+@@ -2598,9 +2637,17 @@ void ScDPResultDimension::LateInitFrom(
+ ScDPMember* pMember = pMembers->getByIndex(nSorted);
+ if ( aCompare.IsIncluded( *pMember ) )
+ {
+- ScDPResultMember* pNew = new ScDPResultMember( pResultData, pThisDim,
++ std::pair< ScDPItemData, ScDPResultMember *> key;
++
++ key.second = new ScDPResultMember( pResultData, pThisDim,
+ pThisLevel, pMember, FALSE );
+- aMembers.Insert( pNew, aMembers.Count() );
++ maMemberArray.push_back( key.second );
++
++ // honour order of maMemberArray and only insert if it does not
++ // already exist
++ pMember->FillItemData( key.first );
++ if ( maMemberHash.end() == maMemberHash.find( key.first ) )
++ maMemberHash.insert ( key );
+ }
+ }
+ bInitialized = TRUE; // don't call again, even if no members were included
+@@ -2609,20 +2656,29 @@ void ScDPResultDimension::LateInitFrom(
+ // initialize only specific member (or all if "show empty" flag is set)
+
+ BOOL bShowEmpty = pThisLevel->getShowEmpty();
+- long nCount = aMembers.Count();
++ if ( bIsDataLayout || bShowEmpty )
++ {
++ long nCount = maMemberArray.size();
+ for (long i=0; i<nCount; i++)
+ {
+- ScDPResultMember* pResultMember = aMembers[(USHORT)i];
+- if ( bIsDataLayout || bShowEmpty || pResultMember->IsNamedItem( rThisData ) )
++ ScDPResultMember* pResultMember = maMemberArray[i];
++ ScDPItemData aMemberData;
++ pResultMember->FillItemData( aMemberData );
++ rInitState.AddMember( nDimSource, aMemberData );
++ pResultMember->LateInitFrom( ppChildDim, ppChildLev, pChildData, rInitState );
++ rInitState.RemoveMember();
++ }
++ }
++ else
++ {
++ ScDPResultMember* pResultMember = FindMember( rThisData );
++ if( NULL != pResultMember )
+ {
+ ScDPItemData aMemberData;
+ pResultMember->FillItemData( aMemberData );
+ rInitState.AddMember( nDimSource, aMemberData );
+ pResultMember->LateInitFrom( ppChildDim, ppChildLev, pChildData, rInitState );
+ rInitState.RemoveMember();
+-
+- if ( !bIsDataLayout && !bShowEmpty )
+- break;
+ }
+ }
+ }
+@@ -2631,19 +2687,19 @@ void ScDPResultDimension::LateInitFrom(
+ long ScDPResultDimension::GetSize(long nMeasure) const
+ {
+ long nTotal = 0;
+- long nMemberCount = aMembers.Count();
++ long nMemberCount = maMemberArray.size();
+ if (bIsDataLayout)
+ {
+ DBG_ASSERT(nMeasure == SC_DPMEASURE_ALL || pResultData->GetMeasureCount() == 1,
+ "DataLayout dimension twice?");
+ // repeat first member...
+- nTotal = nMemberCount * aMembers[0]->GetSize(0); // all measures have equal size
++ nTotal = nMemberCount * maMemberArray[0]->GetSize(0); // all measures have equal size
+ }
+ else
+ {
+ // add all members
+ for (long nMem=0; nMem<nMemberCount; nMem++)
+- nTotal += aMembers[(USHORT)nMem]->GetSize(nMeasure);
++ nTotal += maMemberArray[nMem]->GetSize(nMeasure);
+ }
+ return nTotal;
+ }
+@@ -2651,23 +2707,9 @@ long ScDPResultDimension::GetSize(long n
+ BOOL ScDPResultDimension::IsValidEntry( const ScDPItemData* pMembers ) const
+ {
+ // the ScDPItemData array must contain enough entries for all dimensions - this isn't checked
+-
+- long nCount = aMembers.Count();
+- for (long i=0; i<nCount; i++)
+- {
+- ScDPResultMember* pMember = aMembers[(USHORT)i];
+- if ( bIsDataLayout || pMember->IsNamedItem( *pMembers ) )
+- {
+- if ( !pMember->IsValid() )
+- return FALSE;
+-
+- ScDPResultDimension* pChildDim = pMember->GetChildDimension();
+- if (pChildDim)
+- return pChildDim->IsValidEntry( pMembers + 1 );
+- else
+- return TRUE;
+- }
+- }
++ const ScDPResultMember* pMember = FindMember( *pMembers );
++ if( NULL != pMember )
++ return pMember->IsValidEntry( pMembers );
+
+ DBG_ERROR("IsValidEntry: Member not found");
+ return FALSE;
+@@ -2678,19 +2720,12 @@ void ScDPResultDimension::ProcessData( c
+ const ScDPValueData* pValues )
+ {
+ // the ScDPItemData array must contain enough entries for all dimensions - this isn't checked
+-
+- long nCount = aMembers.Count();
+- for (long i=0; i<nCount; i++)
+- {
+- ScDPResultMember* pMember = aMembers[(USHORT)i];
+-
+- // always first member for data layout dim
+- if ( bIsDataLayout || pMember->IsNamedItem( *pMembers ) )
++ ScDPResultMember* pMember = FindMember( *pMembers );
++ if( NULL != pMember )
+ {
+ pMember->ProcessData( pMembers + 1, pDataDim, pDataMembers, pValues );
+ return;
+ }
+- }
+
+ DBG_ERROR("ProcessData: Member not found");
+ }
+@@ -2699,19 +2734,19 @@ void ScDPResultDimension::FillMemberResu
+ long nStart, long nMeasure )
+ {
+ long nPos = nStart;
+- long nCount = aMembers.Count();
++ long nCount = maMemberArray.size();
+
+ for (long i=0; i<nCount; i++)
+ {
+ long nSorted = aMemberOrder.empty() ? i : aMemberOrder[i];
+
+- ScDPResultMember* pMember = aMembers[(USHORT)nSorted];
++ ScDPResultMember* pMember = maMemberArray[nSorted];
+ // in data layout dimension, use first member with different measures/names
+ if ( bIsDataLayout )
+ {
+ String aMbrName = pResultData->GetMeasureDimensionName( nSorted );
+ String aMbrCapt = pResultData->GetMeasureString( nSorted, FALSE, SUBTOTAL_FUNC_NONE );
+- aMembers[0]->FillMemberResults( pSequences, nPos, nSorted, FALSE, &aMbrName, &aMbrCapt );
++ maMemberArray[0]->FillMemberResults( pSequences, nPos, nSorted, FALSE, &aMbrName, &aMbrCapt );
+ }
+ else if ( pMember->IsVisible() )
+ pMember->FillMemberResults( pSequences, nPos, nMeasure, FALSE, NULL, NULL );
+@@ -2725,7 +2760,7 @@ void ScDPResultDimension::FillDataResult
+ {
+ long nMemberRow = nRow;
+ long nMemberMeasure = nMeasure;
+- long nCount = aMembers.Count();
++ long nCount = maMemberArray.size();
+ for (long i=0; i<nCount; i++)
+ {
+ long nSorted = aMemberOrder.empty() ? i : aMemberOrder[i];
+@@ -2735,11 +2770,11 @@ void ScDPResultDimension::FillDataResult
+ {
+ DBG_ASSERT(nMeasure == SC_DPMEASURE_ALL || pResultData->GetMeasureCount() == 1,
+ "DataLayout dimension twice?");
+- pMember = aMembers[0];
++ pMember = maMemberArray[0];
+ nMemberMeasure = nSorted;
+ }
+ else
+- pMember = aMembers[(USHORT)nSorted];
++ pMember = maMemberArray[nSorted];
+
+ if ( pMember->IsVisible() )
+ pMember->FillDataResults( pRefMember, rSequence, nMemberRow, nMemberMeasure );
+@@ -2750,7 +2785,7 @@ void ScDPResultDimension::FillDataResult
+ void ScDPResultDimension::UpdateDataResults( const ScDPResultMember* pRefMember, long nMeasure ) const
+ {
+ long nMemberMeasure = nMeasure;
+- long nCount = aMembers.Count();
++ long nCount = maMemberArray.size();
+ for (long i=0; i<nCount; i++)
+ {
+ const ScDPResultMember* pMember;
+@@ -2758,11 +2793,11 @@ void ScDPResultDimension::UpdateDataResu
+ {
+ DBG_ASSERT(nMeasure == SC_DPMEASURE_ALL || pResultData->GetMeasureCount() == 1,
+ "DataLayout dimension twice?");
+- pMember = aMembers[0];
++ pMember = maMemberArray[0];
+ nMemberMeasure = i;
+ }
+ else
+- pMember = aMembers[(USHORT)i];
++ pMember = maMemberArray[i];
+
+ if ( pMember->IsVisible() )
+ pMember->UpdateDataResults( pRefMember, nMemberMeasure );
+@@ -2771,7 +2806,7 @@ void ScDPResultDimension::UpdateDataResu
+
+ void ScDPResultDimension::SortMembers( ScDPResultMember* pRefMember )
+ {
+- long nCount = aMembers.Count();
++ long nCount = maMemberArray.size();
+
+ if ( bSortByData )
+ {
+@@ -2792,7 +2827,7 @@ void ScDPResultDimension::SortMembers( S
+ long nLoopCount = bIsDataLayout ? 1 : nCount;
+ for (long i=0; i<nLoopCount; i++)
+ {
+- ScDPResultMember* pMember = aMembers[(USHORT)i];
++ ScDPResultMember* pMember = maMemberArray[i];
+ if ( pMember->IsVisible() )
+ pMember->SortMembers( pRefMember );
+ }
+@@ -2800,7 +2835,7 @@ void ScDPResultDimension::SortMembers( S
+
+ void ScDPResultDimension::DoAutoShow( ScDPResultMember* pRefMember )
+ {
+- long nCount = aMembers.Count();
++ long nCount = maMemberArray.size();
+
+ // handle children first, before changing the visible state
+
+@@ -2808,7 +2843,7 @@ void ScDPResultDimension::DoAutoShow( Sc
+ long nLoopCount = bIsDataLayout ? 1 : nCount;
+ for (long i=0; i<nLoopCount; i++)
+ {
+- ScDPResultMember* pMember = aMembers[(USHORT)i];
++ ScDPResultMember* pMember = maMemberArray[i];
+ if ( pMember->IsVisible() )
+ pMember->DoAutoShow( pRefMember );
+ }
+@@ -2829,16 +2864,16 @@ void ScDPResultDimension::DoAutoShow( Sc
+ // look for equal values to the last included one
+
+ long nIncluded = nAutoCount;
+- ScDPResultMember* pMember1 = aMembers[(USHORT)aAutoOrder[nIncluded - 1]];
+- ScDPDataMember* pDataMember1 = pMember1->IsVisible() ? pMember1->GetDataRoot() : NULL;
++ const ScDPResultMember* pMember1 = maMemberArray[aAutoOrder[nIncluded - 1]];
++ const ScDPDataMember* pDataMember1 = pMember1->IsVisible() ? pMember1->GetDataRoot() : NULL;
+ BOOL bContinue = TRUE;
+ while ( bContinue )
+ {
+ bContinue = FALSE;
+ if ( nIncluded < nCount )
+ {
+- ScDPResultMember* pMember2 = aMembers[(USHORT)aAutoOrder[nIncluded]];
+- ScDPDataMember* pDataMember2 = pMember2->IsVisible() ? pMember2->GetDataRoot() : NULL;
++ const ScDPResultMember* pMember2 = maMemberArray[aAutoOrder[nIncluded]];
++ const ScDPDataMember* pDataMember2 = pMember2->IsVisible() ? pMember2->GetDataRoot() : NULL;
+
+ if ( lcl_IsEqual( pDataMember1, pDataMember2, nAutoMeasure ) )
+ {
+@@ -2852,7 +2887,7 @@ void ScDPResultDimension::DoAutoShow( Sc
+
+ for (nPos = nIncluded; nPos < nCount; nPos++)
+ {
+- ScDPResultMember* pMember = aMembers[(USHORT)aAutoOrder[nPos]];
++ ScDPResultMember* pMember = maMemberArray[aAutoOrder[nPos]];
+ pMember->SetAutoHidden();
+ }
+ }
+@@ -2860,11 +2895,11 @@ void ScDPResultDimension::DoAutoShow( Sc
+
+ void ScDPResultDimension::ResetResults()
+ {
+- long nCount = aMembers.Count();
++ long nCount = maMemberArray.size();
+ for (long i=0; i<nCount; i++)
+ {
+ // sort order doesn't matter
+- ScDPResultMember* pMember = aMembers[(USHORT)( bIsDataLayout ? 0 : i )];
++ ScDPResultMember* pMember = maMemberArray[bIsDataLayout ? 0 : i];
+ pMember->ResetResults( FALSE );
+ }
+ }
+@@ -2877,22 +2912,22 @@ long ScDPResultDimension::GetSortedIndex
+ void ScDPResultDimension::UpdateRunningTotals( const ScDPResultMember* pRefMember, long nMeasure,
+ ScDPRunningTotalState& rRunning, ScDPRowTotals& rTotals ) const
+ {
++ const ScDPResultMember* pMember;
+ long nMemberMeasure = nMeasure;
+- long nCount = aMembers.Count();
++ long nCount = maMemberArray.size();
+ for (long i=0; i<nCount; i++)
+ {
+ long nSorted = aMemberOrder.empty() ? i : aMemberOrder[i];
+
+- const ScDPResultMember* pMember;
+ if (bIsDataLayout)
+ {
+ DBG_ASSERT(nMeasure == SC_DPMEASURE_ALL || pResultData->GetMeasureCount() == 1,
+ "DataLayout dimension twice?");
+- pMember = aMembers[0];
++ pMember = maMemberArray[0];
+ nMemberMeasure = nSorted;
+ }
+ else
+- pMember = aMembers[(USHORT)nSorted];
++ pMember = maMemberArray[nSorted];
+
+ if ( pMember->IsVisible() )
+ {
+@@ -2916,7 +2951,7 @@ ScDPDataMember* ScDPResultDimension::Get
+ ScDPDataMember* pColMember = NULL;
+
+ BOOL bFirstExisting = ( pRelativePos == NULL && pName == NULL );
+- long nMemberCount = aMembers.Count();
++ long nMemberCount = maMemberArray.size();
+ long nMemberIndex = 0; // unsorted
+ long nDirection = 1; // forward if no relative position is used
+ if ( pRelativePos )
+@@ -2930,14 +2965,14 @@ ScDPDataMember* ScDPResultDimension::Get
+ {
+ // search for named member
+
+- ScDPResultMember* pRowMember = aMembers[(USHORT)GetSortedIndex(nMemberIndex)];
++ const ScDPResultMember* pRowMember = maMemberArray[GetSortedIndex(nMemberIndex)];
+
+ //! use ScDPItemData, as in ScDPDimension::IsValidPage?
+ while ( pRowMember && pRowMember->GetName() != *pName )
+ {
+ ++nMemberIndex;
+ if ( nMemberIndex < nMemberCount )
+- pRowMember = aMembers[(USHORT)GetSortedIndex(nMemberIndex)];
++ pRowMember = maMemberArray[GetSortedIndex(nMemberIndex)];
+ else
+ pRowMember = NULL;
+ }
+@@ -2946,7 +2981,7 @@ ScDPDataMember* ScDPResultDimension::Get
+ BOOL bContinue = TRUE;
+ while ( bContinue && nMemberIndex >= 0 && nMemberIndex < nMemberCount )
+ {
+- ScDPResultMember* pRowMember = aMembers[(USHORT)GetSortedIndex(nMemberIndex)];
++ const ScDPResultMember* pRowMember = maMemberArray[GetSortedIndex(nMemberIndex)];
+
+ // get child members by given indexes
+
+@@ -3006,7 +3041,7 @@ ScDPDataMember* ScDPResultDimension::Get
+
+ // get own row member using all indexes
+
+- ScDPResultMember* pRowMember = rRunning.GetRowResRoot();
++ const ScDPResultMember* pRowMember = rRunning.GetRowResRoot();
+ ScDPDataMember* pColMember = NULL;
+
+ const long* pNextRowIndex = pRowIndexes;
+@@ -3123,10 +3158,10 @@ void ScDPResultDimension::DumpState( con
+
+ SCROW nStartRow = rPos.Row();
+
+- long nCount = bIsDataLayout ? 1 : aMembers.Count();
++ long nCount = bIsDataLayout ? 1 : maMemberArray.size();
+ for (long i=0; i<nCount; i++)
+ {
+- const ScDPResultMember* pMember = aMembers[(USHORT)i];
++ const ScDPResultMember* pMember = maMemberArray[i];
+ pMember->DumpState( pRefMember, pDoc, rPos );
+ }
+
+@@ -3135,18 +3170,22 @@ void ScDPResultDimension::DumpState( con
+
+ long ScDPResultDimension::GetMemberCount() const
+ {
+- return aMembers.Count();
++ return maMemberArray.size();
+ }
+
+-ScDPResultMember* ScDPResultDimension::GetMember(long n) const
++const ScDPResultMember* ScDPResultDimension::GetMember(long n) const
++{
++ return maMemberArray[n];
++}
++ScDPResultMember* ScDPResultDimension::GetMember(long n)
+ {
+- return aMembers[(USHORT)n];
++ return maMemberArray[n];
+ }
+
+ ScDPResultDimension* ScDPResultDimension::GetFirstChildDimension() const
+ {
+- if ( aMembers.Count() > 0 )
+- return aMembers[0]->GetChildDimension();
++ if ( maMemberArray.size() > 0 )
++ return maMemberArray[0]->GetChildDimension();
+ else
+ return NULL;
+ }
+@@ -3164,7 +3203,7 @@ ScDPDataDimension::~ScDPDataDimension()
+ {
+ }
+
+-void ScDPDataDimension::InitFrom( ScDPResultDimension* pDim )
++void ScDPDataDimension::InitFrom( const ScDPResultDimension* pDim )
+ {
+ if (!pDim)
+ return;
+@@ -3175,7 +3214,7 @@ void ScDPDataDimension::InitFrom( ScDPRe
+ long nCount = pDim->GetMemberCount();
+ for (long i=0; i<nCount; i++)
+ {
+- ScDPResultMember* pResMem = pDim->GetMember(i);
++ const ScDPResultMember* pResMem = pDim->GetMember(i);
+
+ ScDPDataMember* pNew = new ScDPDataMember( pResultData, pResMem );
+ aMembers.Insert( pNew, aMembers.Count() );
+@@ -3185,7 +3224,7 @@ void ScDPDataDimension::InitFrom( ScDPRe
+ // with LateInit, pResMem hasn't necessarily been initialized yet,
+ // so InitFrom for the new result member is called from its ProcessData method
+
+- ScDPResultDimension* pChildDim = pResMem->GetChildDimension();
++ const ScDPResultDimension* pChildDim = pResMem->GetChildDimension();
+ if ( pChildDim )
+ pNew->InitFrom( pChildDim );
+ }
+Index: sc/source/core/data/dptabsrc.cxx
+===================================================================
+RCS file: /cvs/sc/sc/source/core/data/dptabsrc.cxx,v
+retrieving revision 1.14
+diff -u -w -p -r1.14 dptabsrc.cxx
+--- sc/source/core/data/dptabsrc.cxx 7 Nov 2005 14:41:01 -0000 1.14
++++ sc/source/core/data/dptabsrc.cxx 19 May 2006 14:50:24 -0000
+@@ -2399,9 +2399,7 @@ ScDPMember::ScDPMember( ScDPSource* pSrc
+ nDim( nD ),
+ nHier( nH ),
+ nLev( nL ),
+- aName( rN ),
+- fValue( fV ),
+- bHasValue( bHV ),
++ maData( rN, fV, bHV ),
+ bVisible( TRUE ),
+ bShowDet( TRUE )
+ {
+@@ -2423,54 +2421,32 @@ BOOL ScDPMember::IsNamedItem( const ScDP
+ nHier, nLev );
+
+ // fValue is converted from integer, so simple comparison works
+- return nComp == fValue;
++ return nComp == maData.fValue;
+ }
+
+- return r.IsCaseInsEqual( ScDPItemData( aName, fValue, bHasValue ) );
++ return r.IsCaseInsEqual( maData );
+ }
+
+ sal_Int32 ScDPMember::Compare( const ScDPMember& rOther ) const
+ {
+- sal_Int32 nResult;
+- if ( bHasValue )
+- {
+- if ( rOther.bHasValue )
+- {
+- if ( rtl::math::approxEqual( fValue, rOther.fValue ) )
+- nResult = 0;
+- else if ( fValue < rOther.fValue )
+- nResult = -1;
+- else
+- nResult = 1;
+- }
+- else
+- nResult = -1; // values first
+- }
+- else if ( rOther.bHasValue )
+- nResult = 1; // values first
+- else
+- nResult = ScGlobal::pCollator->compareString( aName, rOther.aName );
+-
+- return nResult;
++ return ScDPItemData::Compare( maData, rOther.maData );
+ }
+
+ void ScDPMember::FillItemData( ScDPItemData& rData ) const
+ {
+ //! handle date hierarchy...
+
+- rData.aString = aName;
+- rData.fValue = fValue;
+- rData.bHasValue = bHasValue;
++ rData = maData;
+ }
+
+ String ScDPMember::GetNameStr() const
+ {
+- return aName;
++ return maData.aString;
+ }
+
+ ::rtl::OUString SAL_CALL ScDPMember::getName() throw(uno::RuntimeException)
+ {
+- return aName;
++ return maData.aString;
+ }
+
+ void SAL_CALL ScDPMember::setName( const ::rtl::OUString& rNewName ) throw(uno::RuntimeException)
diff --git a/patches/src680/sc-get-pivot-data.diff b/patches/src680/sc-get-pivot-data.diff
index 74e49dd95..786062bfa 100644
--- a/patches/src680/sc-get-pivot-data.diff
+++ b/patches/src680/sc-get-pivot-data.diff
@@ -625,7 +625,7 @@ retrieving revision 1.84.22.2
diff -u -w -p -r1.84.22.2 scfuncs.src
--- sc/source/ui/src/scfuncs.src 28 Nov 2005 16:06:41 -0000 1.84.22.2
+++ sc/source/ui/src/scfuncs.src 16 Feb 2006 20:05:13 -0000
-@@ -9957,6 +9957,51 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
+@@ -9957,6 +9957,100 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
Text [ x-comment ] = " ";
};
};
@@ -633,8 +633,15 @@ diff -u -w -p -r1.84.22.2 scfuncs.src
+ {
+ String 1 // Description
+ {
-+ Text [ de ] = "" ;
+ Text [ en-US ] = "Extracts value(s) from a DataPilot.";
++ Text[ de ] = "Werte aus DataPilot extrahieren.";
++ Text[ es ] = "Extrae valores de un piloto de datos.";
++ Text[ fr ] = "Extrait les valeurs d'un pilote de données.";
++ Text[ it ] = "Estrai valore/i da un DataPilot.";
++ Text[ ja ] = "データパイロットから値を抽出します。";
++ Text[ pt-BR ] = "Extrai valor(es) de um DataPilot.";
++ Text[ zh-CN ] = "从 DataPilot 中抽取值。";
++ Text[ zh-TW ] = "擷取 DataPilot 的值。";
+ };
+ ExtraData =
+ {
@@ -644,33 +651,75 @@ diff -u -w -p -r1.84.22.2 scfuncs.src
+ };
+ String 2 // Name of Parameter 1
+ {
-+ Text [ de ] = "" ;
+ Text [ en-US ] = "Target Field";
++ Text[ de ] = "Zielfeld";
++ Text[ es ] = "Campo de destino";
++ Text[ fr ] = "Champ cible";
++ Text[ it ] = "Campo di destinazione";
++ Text[ ja ] = "ターゲットフィールド";
++ Text[ pt-BR ] = "Campo de Destino";
++ Text[ zh-CN ] = "目标字段";
++ Text[ zh-TW ] = "目標欄位";
+ };
+ String 3 // Description of Parameter 1
+ {
-+ Text [ de ] = "" ;
+ Text [ en-US ] = "The name of the data pilot field to extract.";
++ Text[ de ] = "Der Name des zu extrahierenden DataPilot-Felds.";
++ Text[ es ] = "Nombre del campo del piloto de datos que se debe extraer.";
++ Text[ fr ] = "Nom du champ de pilote de données à extraire.";
++ Text[ it ] = "Nome del campo data pilot da estrarre.";
++ Text[ ja ] = "抽出するデータパイロットフィールドの名前。";
++ Text[ pt-BR ] = "Nome do campo do data pilot a extrair.";
++ Text[ zh-CN ] = "要抽取的 Data Pilot 字段的名称";
++ Text[ zh-TW ] = "進行擷取的 Data Pilot 欄位名稱。";
+ };
+ String 4 // Name of Parameter 2
+ {
-+ Text [ de ] = "" ;
+ Text [ en-US ] = "Data Pilot";
++ Text[ de ] = "DataPilot";
++ Text[ es ] = "Piloto de datos";
++ Text[ fr ] = "Pilote de données";
++ Text[ it ] = "Data Pilot";
++ Text[ ja ] = "データパイロット";
++ Text[ pt-BR ] = "Data Pilot";
++ Text[ zh-CN ] = "Data Pilot";
++ Text[ zh-TW ] = "Data Pilot";
+ };
+ String 5 // Description of Parameter 2
+ {
-+ Text [ de ] = "" ;
+ Text [ en-US ] = "a reference to a cell or range in Data Pilot with the source data.";
++ Text[ de ] = "eine Referenz auf eine Zelle oder einen Bereich in DataPilot mit den Quelldaten.";
++ Text[ es ] = "referencia a una celda o rango en el piloto de datos con los datos de origen.";
++ Text[ fr ] = "référence à une cellule ou à une plage du pilote contenant les données sources.";
++ Text[ it ] = "Riferiento a una cella o a un intervallo di celle in Data Pilot con i dati di origine.";
++ Text[ ja ] = "ソースデータが記戴されているデータパイロットのセルまたは範囲への参照";
++ Text[ pt-BR ] = "uma referência a uma célula ou faixa do Data Pilot com os dados de origem.";
++ Text[ zh-CN ] = "用源数据引用 Data Pilot 中的单元或范围。";
++ Text[ zh-TW ] = "包含來源資料之 Data Pilot 儲存格或範圍的參考。";
+ };
+ String 6 // Name of Parameter 3
+ {
-+ Text [ de ] = "" ;
+ Text [ en-US ] = "Field Name / Item";
++ Text[ de ] = "Feldname/Element";
++ Text[ es ] = "Nombre de campo / elemento";
++ Text[ fr ] = "Nom du champ/élément";
++ Text[ it ] = "Nome/elemento campo";
++ Text[ ja ] = "フィールド名/項目";
++ Text[ pt-BR ] = "Item/Nome do Campo";
++ Text[ zh-CN ] = "字段名称/项 ";
++ Text[ zh-TW ] = "欄位名稱 / 項目";
+ };
+ String 7 // Description of Parameter 3
+ {
-+ Text [ de ] = "" ;
+ Text [ en-US ] = "Field name/value pair to filter the target data.";
++ Text[ de ] = "Feldname-/Werte-Paar zur Filterung der Zieldaten.";
++ Text[ es ] = "Par de nombre de campo y valor para filtrar los datos de destino.";
++ Text[ fr ] = "Nom du champ/paire de valeurs pour filtrer les données cibles.";
++ Text[ it ] = "Coppia nome/valore campo da utilizzare come filtro per i dati di destinazione.";
++ Text[ ja ] = "ターゲットデータをフィルタリングするフィールド名/値のペア。";
++ Text[ pt-BR ] = "Par de valores/nome do campo para filtrar os dados de destino.";
++ Text[ zh-CN ] = "过滤目标数据的字段名/值对。";
++ Text[ zh-TW ] = "過濾目標資料的欄位名稱/值成對資料。";
+ };
+ };
+
diff --git a/patches/src680/sc-insert-note-on-right-click.diff b/patches/src680/sc-insert-note-on-right-click.diff
index b71a488bc..32156a864 100644
--- a/patches/src680/sc-insert-note-on-right-click.diff
+++ b/patches/src680/sc-insert-note-on-right-click.diff
@@ -1,12 +1,20 @@
---- sc/source/ui/src/popup.src.back 2005-02-15 10:55:00.000000000 +0530
-+++ sc/source/ui/src/popup.src 2005-03-26 12:06:20.000000000 +0530
-@@ -165,6 +165,13 @@
+--- sc/source/ui/src/popup.src
++++ sc/source/ui/src/popup.src
+@@ -142,6 +142,21 @@
//------------------------------
MenuItem
{
+ Identifier = SID_INSERT_POSTIT ;
+ HelpId = SID_INSERT_POSTIT ;
+ Text [ en-US ] = "Insert Not~e" ;
++ Text[ de ] = "Hinw~eis einfügen";
++ Text[ es ] = "Insertar Not~a";
++ Text[ fr ] = "Insérer une not~e";
++ Text[ it ] = "Inserisci nota";
++ Text[ ja ] = "Not~eを挿入";
++ Text[ pt-BR ] = "Inserir Observaçã~o";
++ Text[ zh-CN ] = "插入注释(~E)";
++ Text[ zh-TW ] = "插入記事(~E)";
+ Text [ x-comment ] = " ";
+ };
+ MenuItem
@@ -14,8 +22,10 @@
Identifier = FID_NOTE_VISIBLE ;
HelpId = FID_NOTE_VISIBLE ;
Text [ de ] = "~Notiz anzeigen" ;
---- sc/source/ui/view/cellsh.cxx.back1 2005-11-17 18:58:00.000000000 +0530
-+++ sc/source/ui/view/cellsh.cxx 2005-03-30 10:40:14.000000000 +0530
+
+
+--- sc/source/ui/view/cellsh.cxx
++++ sc/source/ui/view/cellsh.cxx
@@ -308,6 +308,14 @@
}
}
diff --git a/patches/src680/sc-standard-filter-options-i18n-fake.diff b/patches/src680/sc-standard-filter-options-i18n-fake.diff
new file mode 100644
index 000000000..d4d88c23a
--- /dev/null
+++ b/patches/src680/sc-standard-filter-options-i18n-fake.diff
@@ -0,0 +1,587 @@
+--- sc/source/ui/src/localize.sdf.old 2006-06-14 18:09:53.000000000 +0200
++++ sc/source/ui/src/localize.sdf 2006-06-14 18:34:10.000000000 +0200
+@@ -9149,42 +9149,190 @@
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 10 0 zh-CN 最小 % 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 10 0 zh-TW 最小 % 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 10 0 zu I-% elincane kakhulu 2002-02-02 02:02:02
+-sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 en-GB Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 af Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 ar Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 be-BY Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 bg Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 ca Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 cs Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 cy Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 da Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 de Enthält 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 el Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 en-GB Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 es Contiene 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 et Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 fi Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 fr Contient 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 gu-IN Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 hi-IN Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 hr Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 hu Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 it Contiene 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 ja を含む 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 km Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 ko Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 lt Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 mk Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 nb Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 nl Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 nn Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 pa-IN Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 pl Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 pt-BR Contém 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 pt Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 ru Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 rw Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 sk Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 sl Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 sr-CS Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 st Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 sv Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 tr Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 ts Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 vi Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 xh Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 zh-CN 包含 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 zh-TW 包含 2002-02-02 02:02:02
+-sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 en-GB Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 11 0 zu Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 af Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 ar Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 be-BY Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 bg Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 ca Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 cs Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 cy Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 da Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 de Enthält nicht 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 el Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 en-GB Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 es No contiene 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 et Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 fi Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 fr Ne contient pas 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 gu-IN Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 hi-IN Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 hr Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 hu Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 it Non contiene 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 ja を含まない 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 km Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 ko Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 lt Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 mk Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 nb Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 nl Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 nn Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 pa-IN Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 pl Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 pt-BR Não contém 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 pt Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 ru Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 rw Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 sk Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 sl Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 sr-CS Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 st Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 sv Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 tr Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 ts Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 vi Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 xh Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 zh-CN 不包含 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 zh-TW 不包含 2002-02-02 02:02:02
+-sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 en-GB Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 12 0 zu Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 af Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 ar Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 be-BY Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 bg Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 ca Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 cs Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 cy Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 da Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 de Beginnt mit 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 el Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 en-GB Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 es Empieza por 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 et Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 fi Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 fr Commence par 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 gu-IN Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 hi-IN Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 hr Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 hu Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 it Inizia con 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 ja で始まる 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 km Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 ko Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 lt Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 mk Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 nb Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 nl Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 nn Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 pa-IN Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 pl Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 pt Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 pt-BR Começa com 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 ru Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 rw Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 sk Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 sl Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 sr-CS Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 st Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 sv Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 tr Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 ts Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 vi Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 xh Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 zh-CN 开头是 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 zh-TW 開頭以 2002-02-02 02:02:02
+-sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 en-GB Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 13 0 zu Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 af Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 ar Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 be-BY Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 bg Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 ca Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 cs Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 cy Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 da Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 de Endet mit 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 el Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 en-GB Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 es Finaliza por 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 et Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 fi Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 fr Finit par 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 gu-IN Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 hi-IN Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 hr Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 hu Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 it Termina con 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 ja で終わる 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 km Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 ko Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 lt Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 mk Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 nb Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 nl Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 nn Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 pa-IN Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 pl Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 pt-BR Termina com 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 pt Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 ru Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 rw Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 sk Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 sl Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 sr-CS Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 st Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 sv Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 tr Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 ts Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 vi Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 xh Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 zh-CN 结尾是 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 zh-TW 結束以 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 14 0 zu Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 2 0 af < 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 2 0 ar > 20040507 14:23:12
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND1 2 0 be-BY < 2002-02-02 02:02:02
+@@ -9719,42 +9867,190 @@
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 10 0 zh-CN 最小 % 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 10 0 zh-TW 最小 % 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 10 0 zu I-% elincane kakhulu 2002-02-02 02:02:02
+-sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 en-GB Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 af Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 ar Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 be-BY Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 bg Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 ca Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 cs Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 cy Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 da Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 de Enthält 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 el Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 en-GB Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 es Contiene 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 et Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 fi Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 fr Contient 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 gu-IN Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 hi-IN Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 hr Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 hu Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 it Contiene 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 ja を含む 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 km Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 ko Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 lt Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 mk Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 nb Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 nl Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 nn Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 pa-IN Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 pl Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 pt-BR Contém 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 pt Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 ru Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 rw Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 sk Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 sl Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 sr-CS Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 st Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 sv Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 tr Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 ts Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 vi Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 xh Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 zh-CN 包含 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 zh-TW 包含 2002-02-02 02:02:02
+-sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 en-GB Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 11 0 zu Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 af Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 ar Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 be-BY Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 bg Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 ca Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 cs Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 cy Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 da Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 de Enthält nicht 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 el Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 en-GB Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 es No contiene 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 et Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 fi Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 fr Ne contient pas 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 gu-IN Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 hi-IN Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 hr Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 hu Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 it Non contiene 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 ja を含まない 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 km Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 ko Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 lt Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 mk Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 nb Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 nl Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 nn Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 pa-IN Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 pl Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 pt-BR Não contém 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 pt Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 ru Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 rw Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 sk Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 sl Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 sr-CS Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 st Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 sv Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 tr Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 ts Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 vi Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 xh Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 zh-CN 不包含 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 zh-TW 不包含 2002-02-02 02:02:02
+-sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 en-GB Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 12 0 zu Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 af Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 ar Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 be-BY Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 bg Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 ca Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 cs Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 cy Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 da Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 de Beginnt mit 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 el Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 en-GB Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 es Empieza por 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 et Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 fi Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 fr Commence par 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 gu-IN Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 hi-IN Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 hr Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 hu Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 it Inizia con 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 ja で始まる 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 km Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 ko Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 lt Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 mk Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 nb Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 nl Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 nn Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 pa-IN Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 pl Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 pt Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 pt-BR Começa com 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 ru Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 rw Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 sk Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 sl Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 sr-CS Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 st Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 sv Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 tr Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 ts Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 vi Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 xh Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 zh-CN 开头是 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 zh-TW 開頭以 2002-02-02 02:02:02
+-sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 en-GB Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 13 0 zu Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 af Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 ar Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 be-BY Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 bg Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 ca Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 cs Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 cy Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 da Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 de Endet mit 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 el Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 en-GB Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 es Finaliza por 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 et Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 fi Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 fr Finit par 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 gu-IN Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 hi-IN Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 hr Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 hu Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 it Termina con 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 ja で終わる 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 km Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 ko Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 lt Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 mk Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 nb Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 nl Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 nn Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 pa-IN Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 pl Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 pt-BR Termina com 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 pt Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 ru Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 rw Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 sk Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 sl Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 sr-CS Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 st Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 sv Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 tr Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 ts Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 vi Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 xh Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 zh-CN 结尾是 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 zh-TW 結束以 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 14 0 zu Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 2 0 af < 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 2 0 ar > 20040507 14:23:12
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND2 2 0 be-BY < 2002-02-02 02:02:02
+@@ -10289,42 +10585,190 @@
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 10 0 zh-CN 最小 % 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 10 0 zh-TW 最小 % 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 10 0 zu I-% elincane kakhulu 2002-02-02 02:02:02
+-sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 en-GB Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 af Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 ar Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 be-BY Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 bg Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 ca Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 cs Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 cy Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 da Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 de Enthält 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 el Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 en-GB Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 es Contiene 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 et Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 fi Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 fr Contient 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 gu-IN Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 hi-IN Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 hr Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 hu Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 it Contiene 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 ja を含む 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 km Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 ko Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 lt Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 mk Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 nb Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 nl Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 nn Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 pa-IN Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 pl Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 pt-BR Contém 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 pt Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 ru Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 rw Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 sk Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 sl Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 sr-CS Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 st Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 sv Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 tr Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 ts Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 vi Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 xh Contains 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 zh-CN 包含 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 zh-TW 包含 2002-02-02 02:02:02
+-sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 en-GB Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 11 0 zu Contains 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 af Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 ar Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 be-BY Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 bg Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 ca Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 cs Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 cy Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 da Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 de Enthält nicht 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 el Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 en-GB Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 es No contiene 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 et Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 fi Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 fr Ne contient pas 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 gu-IN Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 hi-IN Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 hr Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 hu Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 it Non contiene 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 ja を含まない 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 km Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 ko Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 lt Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 mk Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 nb Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 nl Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 nn Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 pa-IN Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 pl Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 pt-BR Não contém 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 pt Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 ru Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 rw Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 sk Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 sl Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 sr-CS Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 st Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 sv Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 tr Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 ts Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 vi Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 xh Does not Contain 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 zh-CN 不包含 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 zh-TW 不包含 2002-02-02 02:02:02
+-sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 en-GB Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 12 0 zu Does not Contain 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 af Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 ar Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 be-BY Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 bg Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 ca Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 cs Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 cy Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 da Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 de Beginnt mit 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 el Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 en-GB Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 es Empieza por 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 et Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 fi Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 fr Commence par 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 gu-IN Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 hi-IN Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 hr Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 hu Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 it Inizia con 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 ja で始まる 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 km Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 ko Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 lt Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 mk Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 nb Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 nl Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 nn Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 pa-IN Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 pl Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 pt Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 pt-BR Começa com 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 ru Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 rw Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 sk Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 sl Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 sr-CS Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 st Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 sv Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 tr Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 ts Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 vi Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 xh Begins with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 zh-CN 开头是 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 zh-TW 開頭以 2002-02-02 02:02:02
+-sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 en-GB Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 13 0 zu Begins with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 af Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 ar Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 be-BY Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 bg Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 ca Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 cs Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 cy Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 da Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 de Endet mit 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 el Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 en-GB Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 es Finaliza por 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 et Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 fi Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 fr Finit par 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 gu-IN Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 hi-IN Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 hr Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 hu Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 it Termina con 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 ja で終わる 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 km Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 ko Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 lt Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 mk Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 nb Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 nl Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 nn Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 pa-IN Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 pl Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 pt-BR Termina com 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 pt Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 ru Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 rw Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 sk Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 sl Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 sr-CS Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 st Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 sv Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 tr Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 ts Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 vi Ends with 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 xh Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 zh-CN 结尾是 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 zh-TW 結束以 2002-02-02 02:02:02
++sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 14 0 zu Ends with 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 2 0 af < 2002-02-02 02:02:02
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 2 0 ar > 20040507 14:23:12
+ sc source\ui\src\filter.src 0 stringlist RID_SCDLG_FILTER.LB_COND3 2 0 be-BY < 2002-02-02 02:02:02
diff --git a/patches/src680/sc-string-arg.diff b/patches/src680/sc-string-arg.diff
index 0fcdcff67..52a5b16a7 100644
--- a/patches/src680/sc-string-arg.diff
+++ b/patches/src680/sc-string-arg.diff
@@ -1,22 +1,23 @@
--- sc/source/core/tool/interpr4.cxx 2005-04-14 09:50:06.000000000 +0530
+++ sc/source/core/tool/interpr4.cxx 2005-04-19 13:12:20.678272373 +0530
-@@ -283,8 +283,6 @@ double ScInterpreter::GetCellValueOrZero
+@@ -257,7 +257,7 @@ double ScInterpreter::GetCellValueOrZero
break;
case CELLTYPE_STRING:
case CELLTYPE_EDIT:
-#if 0
--// Xcl does it, but SUM(A1:A2) differs from A1+A2. No good.
++#if 1 /* JEG : re-enable because compatibility is more important than consistency for this */
+ // Xcl does it, but SUM(A1:A2) differs from A1+A2. No good.
{
String aStr;
- if ( eType == CELLTYPE_STRING )
-@@ -299,7 +297,6 @@ double ScInterpreter::GetCellValueOrZero
+@@ -268,7 +268,7 @@ double ScInterpreter::GetCellValueOrZero
+ sal_uInt32 nFIndex = 0; // damit default Land/Spr.
+ if ( !pFormatter->IsNumberFormat( aStr, nFIndex, fValue ) )
+ {
+- SetError(errNoValue);
++ SetError(errCellNoValue); /* CellNoValue is not really an error */
+ fValue = 0.0;
}
}
- break;
--#endif
- default:
- SetError(errCellNoValue);
- fValue = 0.0;
--- sc/source/core/tool/interpr1.cxx 2005-04-14 09:50:06.000000000 +0530
+++ sc/source/core/tool/interpr1.cxx 2005-04-19 12:08:07.486080311 +0530
@@ -2685,12 +2685,13 @@ double ScInterpreter::IterateParameters(
diff --git a/patches/src680/sc-xls-pivot-optimization.diff b/patches/src680/sc-xls-pivot-optimization.diff
new file mode 100644
index 000000000..ed27d3568
--- /dev/null
+++ b/patches/src680/sc-xls-pivot-optimization.diff
@@ -0,0 +1,256 @@
+Index: sc/inc/dpsave.hxx
+===================================================================
+RCS file: /cvs/sc/sc/inc/dpsave.hxx,v
+retrieving revision 1.8
+diff -u -w -p -r1.8 dpsave.hxx
+--- sc/inc/dpsave.hxx 8 Sep 2005 17:35:34 -0000 1.8
++++ sc/inc/dpsave.hxx 27 Mar 2006 16:39:40 -0000
+@@ -51,6 +51,7 @@
+ #ifndef INCLUDED_SCDLLAPI_H
+ #include "scdllapi.h"
+ #endif
++#include <hash_map>
+
+ namespace com { namespace sun { namespace star { namespace sheet {
+ struct DataPilotFieldReference;
+@@ -119,8 +120,15 @@ private:
+ ::com::sun::star::sheet::DataPilotFieldSortInfo* pSortInfo; // (level)
+ ::com::sun::star::sheet::DataPilotFieldAutoShowInfo* pAutoShowInfo; // (level)
+ ::com::sun::star::sheet::DataPilotFieldLayoutInfo* pLayoutInfo; // (level)
+- List aMemberList;
+
++ struct MemberHashFunc : public std::unary_function< const String &, size_t >
++ {
++ size_t operator() (const String &member_name) const;
++ };
++public :
++ typedef std::hash_map <String, ScDPSaveMember *, MemberHashFunc> MemberHash;
++private :
++ MemberHash aMembers;
+ public:
+ ScDPSaveDimension(const String& rName, BOOL bDataLayout);
+ ScDPSaveDimension(const ScDPSaveDimension& r);
+@@ -129,8 +137,8 @@ public:
+
+ BOOL operator== ( const ScDPSaveDimension& r ) const;
+
+- const List& GetMembers() const { return aMemberList; }
+- void AddMember(ScDPSaveMember* pMember) { aMemberList.Insert(pMember, LIST_APPEND); };
++ const MemberHash& GetMembers() const { return aMembers; }
++ void AddMember(ScDPSaveMember* pMember) { aMembers[pMember->GetName()] = pMember; }
+
+ void SetDupFlag(BOOL bSet) { bDupFlag = bSet; }
+ BOOL GetDupFlag() const { return bDupFlag; }
+Index: sc/source/core/data/dpsave.cxx
+===================================================================
+RCS file: /cvs/sc/sc/source/core/data/dpsave.cxx,v
+retrieving revision 1.8
+diff -u -w -p -r1.8 dpsave.cxx
+--- sc/source/core/data/dpsave.cxx 8 Sep 2005 18:23:28 -0000 1.8
++++ sc/source/core/data/dpsave.cxx 27 Mar 2006 16:39:41 -0000
+@@ -214,6 +214,11 @@ void ScDPSaveMember::WriteToSource( cons
+
+ // -----------------------------------------------------------------------
+
++size_t ScDPSaveDimension::MemberHashFunc::operator()(const String & member_name) const
++{
++ return rtl_ustr_hashCode_WithLength( member_name.GetBuffer(), member_name.Len() );
++}
++
+ ScDPSaveDimension::ScDPSaveDimension(const String& rName, BOOL bDataLayout) :
+ aName( rName ),
+ bIsDataLayout( bDataLayout ),
+@@ -253,11 +258,10 @@ ScDPSaveDimension::ScDPSaveDimension(con
+ pSubTotalFuncs[nSub] = r.pSubTotalFuncs[nSub];
+ }
+
+- long nCount = r.aMemberList.Count();
+- for (long i=0; i<nCount; i++)
++ for (MemberHash::const_iterator i=r.aMembers.begin(); i != r.aMembers.end() ; i++)
+ {
+- ScDPSaveMember* pNew = new ScDPSaveMember( *(ScDPSaveMember*)r.aMemberList.GetObject(i) );
+- aMemberList.Insert( pNew, LIST_APPEND );
++ ScDPSaveMember* pNew = new ScDPSaveMember( *i->second );
++ aMembers[pNew->GetName()] = pNew;
+ }
+ if (r.pReferenceValue)
+ pReferenceValue = new sheet::DataPilotFieldReference( *(r.pReferenceValue) );
+@@ -318,7 +322,7 @@ ScDPSaveDimension::ScDPSaveDimension(SvS
+ for (i=0; i<nNewCount; i++)
+ {
+ ScDPSaveMember* pNew = new ScDPSaveMember( rStream );
+- aMemberList.Insert( pNew, LIST_APPEND );
++ aMembers[pNew->GetName()] = pNew;
+ }
+ pReferenceValue = NULL;
+ pSortInfo = NULL;
+@@ -352,21 +356,16 @@ void ScDPSaveDimension::Store( SvStream&
+
+ rStream << (USHORT) 0; // nExtra
+
+- long nCount = aMemberList.Count();
++ long nCount = aMembers.size();
+ rStream << nCount;
+- for (i=0; i<nCount; i++)
+- {
+- const ScDPSaveMember* pMember = (const ScDPSaveMember*)aMemberList.GetObject(i);
+- pMember->Store( rStream );
+- }
++ for (MemberHash::const_iterator i=aMembers.begin(); i != aMembers.end() ; i++)
++ i->second->Store( rStream );
+ }
+
+ ScDPSaveDimension::~ScDPSaveDimension()
+ {
+- long nCount = aMemberList.Count();
+- for (long i=0; i<nCount; i++)
+- delete (ScDPSaveMember*)aMemberList.GetObject(i);
+- aMemberList.Clear();
++ for (MemberHash::const_iterator i=aMembers.begin(); i != aMembers.end() ; i++)
++ delete i->second;
+ delete pReferenceValue;
+ delete pSortInfo;
+ delete pAutoShowInfo;
+@@ -397,13 +396,13 @@ BOOL ScDPSaveDimension::operator== ( con
+ if ( pSubTotalFuncs[i] != r.pSubTotalFuncs[i] )
+ return FALSE;
+
+- long nCount = aMemberList.Count();
+- if ( nCount != r.aMemberList.Count() )
++ if (aMembers.size() != r.aMembers.size() )
+ return FALSE;
+
+- for (i=0; i<nCount; i++)
+- if ( !( *(ScDPSaveMember*)aMemberList.GetObject(i) ==
+- *(ScDPSaveMember*)r.aMemberList.GetObject(i) ) )
++ MemberHash::const_iterator a=aMembers.begin();
++ MemberHash::const_iterator b=r.aMembers.begin();
++ for (; a != aMembers.end() ; ++a, ++b)
++ if (!(*(a->second) == *(b->second)))
+ return FALSE;
+
+ return TRUE;
+@@ -551,26 +550,21 @@ const String& ScDPSaveDimension::GetCurr
+
+ ScDPSaveMember* ScDPSaveDimension::GetExistingMemberByName(const String& rName)
+ {
+- long nCount = aMemberList.Count();
+- for (long i=0; i<nCount; i++)
+- {
+- ScDPSaveMember* pMember = (ScDPSaveMember*)aMemberList.GetObject(i);
+- if ( pMember->GetName() == rName )
+- return pMember;
+- }
++ MemberHash::const_iterator res = aMembers.find (rName);
++ if (res != aMembers.end())
++ return res->second;
+ return NULL;
+ }
+
+
+ ScDPSaveMember* ScDPSaveDimension::GetMemberByName(const String& rName)
+ {
+- long nCount = aMemberList.Count();
+ ScDPSaveMember* pMember = GetExistingMemberByName(rName);
+ if (pMember)
+ return pMember;
+
+ ScDPSaveMember* pNew = new ScDPSaveMember( rName );
+- aMemberList.Insert( pNew, LIST_APPEND );
++ aMembers[rName] = pNew;
+ return pNew;
+ }
+
+@@ -624,10 +618,10 @@ void ScDPSaveDimension::WriteToSource( c
+ }
+ }
+
+- // Level loop outside of aMemberList loop
++ // Level loop outside of aMembers loop
+ // because SubTotals have to be set independently of known members
+
+- long nCount = aMemberList.Count();
++ long nCount = aMembers.size();
+
+ long nHierCount = 0;
+ uno::Reference<container::XIndexAccess> xHiers;
+@@ -725,15 +719,14 @@ void ScDPSaveDimension::WriteToSource( c
+ uno::Reference<container::XNameAccess> xMembers = xMembSupp->getMembers();
+ if ( xMembers.is() )
+ {
+- for (long i=0; i<nCount; i++)
++ for (MemberHash::const_iterator i=aMembers.begin(); i != aMembers.end() ; i++)
+ {
+- ScDPSaveMember* pMember = (ScDPSaveMember*)aMemberList.GetObject(i);
+- rtl::OUString aName = pMember->GetName();
++ rtl::OUString aName = i->second->GetName();
+ if ( xMembers->hasByName( aName ) )
+ {
+ uno::Reference<uno::XInterface> xMemberInt = ScUnoHelpFunctions::AnyToInterface(
+ xMembers->getByName( aName ) );
+- pMember->WriteToSource( xMemberInt );
++ i->second->WriteToSource( xMemberInt );
+ }
+ // missing member is no error
+ }
+Index: sc/source/filter/excel/xepivot.cxx
+===================================================================
+RCS file: /cvs/sc/sc/source/filter/excel/xepivot.cxx,v
+retrieving revision 1.11
+diff -u -w -p -r1.11 xepivot.cxx
+--- sc/source/filter/excel/xepivot.cxx 8 Sep 2005 19:01:27 -0000 1.11
++++ sc/source/filter/excel/xepivot.cxx 27 Mar 2006 16:39:43 -0000
+@@ -1126,16 +1126,10 @@ void XclExpPTField::SetPropertiesFromDim
+ }
+
+ // item properties
+- const List& rMemList = rSaveDim.GetMembers();
+- for( ULONG nMemIdx = 0, nMemCount = rMemList.Count(); nMemIdx < nMemCount; ++nMemIdx )
+- {
+- if( const ScDPSaveMember* pSaveMem = static_cast< const ScDPSaveMember* >( rMemList.GetObject( nMemIdx ) ) )
+- {
+-
+- if( XclExpPTItem* pItem = GetItemAcc( pSaveMem->GetName() ) )
+- pItem->SetPropertiesFromMember( *pSaveMem );
+- }
+- }
++ const ScDPSaveDimension::MemberHash &rMembers = rSaveDim.GetMembers();
++ for (ScDPSaveDimension::MemberHash::const_iterator i=rMembers.begin(); i != rMembers.end() ; i++)
++ if( XclExpPTItem* pItem = GetItemAcc( i->second->GetName() ) )
++ pItem->SetPropertiesFromMember( *(i->second) );
+ }
+
+ void XclExpPTField::SetDataPropertiesFromDim( const ScDPSaveDimension& rSaveDim )
+Index: sc/source/filter/xml/XMLExportDataPilot.cxx
+===================================================================
+RCS file: /cvs/sc/sc/source/filter/xml/XMLExportDataPilot.cxx,v
+retrieving revision 1.22
+diff -u -w -p -r1.22 XMLExportDataPilot.cxx
+--- sc/source/filter/xml/XMLExportDataPilot.cxx 8 Sep 2005 19:54:20 -0000 1.22
++++ sc/source/filter/xml/XMLExportDataPilot.cxx 27 Mar 2006 16:39:44 -0000
+@@ -544,19 +544,18 @@ void ScXMLExportDataPilot::WriteSubTotal
+
+ void ScXMLExportDataPilot::WriteMembers(ScDPSaveDimension* pDim)
+ {
+- List aMembers = pDim->GetMembers();
+- sal_Int32 nMemberCount = aMembers.Count();
+- if (nMemberCount > 0)
++ const ScDPSaveDimension::MemberHash &rMembers = pDim->GetMembers();
++ if (rMembers.size() > 0)
+ {
+ SvXMLElementExport aElemDPMs(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_MEMBERS, sal_True, sal_True);
+ rExport.CheckAttrList();
+- for (sal_Int32 nMember = 0; nMember < nMemberCount; nMember++)
++ for (ScDPSaveDimension::MemberHash::const_iterator i=rMembers.begin(); i != rMembers.end() ; i++)
+ {
+- rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_NAME, rtl::OUString(((ScDPSaveMember*)aMembers.GetObject(nMember))->GetName()));
++ rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_NAME, rtl::OUString(i->second->GetName()));
+ rtl::OUStringBuffer sBuffer;
+- SvXMLUnitConverter::convertBool(sBuffer, ((ScDPSaveMember*)aMembers.GetObject(nMember))->GetIsVisible());
++ SvXMLUnitConverter::convertBool(sBuffer, i->second->GetIsVisible());
+ rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY, sBuffer.makeStringAndClear());
+- SvXMLUnitConverter::convertBool(sBuffer, ((ScDPSaveMember*)aMembers.GetObject(nMember))->GetShowDetails());
++ SvXMLUnitConverter::convertBool(sBuffer, i->second->GetShowDetails());
+ rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_SHOW_DETAILS, sBuffer.makeStringAndClear());
+ SvXMLElementExport aElemDPM(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_MEMBER, sal_True, sal_True);
+ rExport.CheckAttrList();
diff --git a/patches/src680/sd-sls-process-request-crash-fix.diff b/patches/src680/sd-sls-process-request-crash-fix.diff
new file mode 100644
index 000000000..8a66b7575
--- /dev/null
+++ b/patches/src680/sd-sls-process-request-crash-fix.diff
@@ -0,0 +1,32 @@
+Index: SlsQueueProcessor.hxx
+===================================================================
+RCS file: /cvs/graphics/sd/source/ui/slidesorter/cache/SlsQueueProcessor.hxx,v
+retrieving revision 1.12
+diff -u -p -r1.12 SlsQueueProcessor.hxx
+--- sd/source/ui/slidesorter/cache/SlsQueueProcessor.hxx 7 Mar 2006 17:11:35 -0000 1.12
++++ sd/source/ui/slidesorter/cache/SlsQueueProcessor.hxx 20 Jun 2006 09:22:15 -0000
+@@ -215,17 +215,21 @@ template <class Queue, class RequestData
+ = pRequest->GetViewContact().GetPaintRectangle() - pPageView->GetOffset();
+ }
+
++ // get page before calling set bitmap as pRequest
++ // might be destroyed in CreateBitmap call
++ const SdrPage* pPage = pRequest->GetPage();
++
+ if (mpCache.get() != NULL)
+ mpCache->SetBitmap (
+- pRequest->GetPage(),
++ pPage,
+ maBitmapFactory.CreateBitmap(*pRequest),
+- ePriorityClass!=NOT_VISIBLE);
++ ePriorityClass != NOT_VISIBLE);
+
+ // Initiate a repaint of the new preview.
+ if (ePriorityClass != NOT_VISIBLE)
+ mrView.InvalidateAllWin (aDirtyRectangle);
+
+- SSCD_SET_STATUS(pRequest->GetPage(),NONE);
++ SSCD_SET_STATUS(pPage, NONE);
+ }
+ catch (::com::sun::star::uno::RuntimeException aException)
+ {
diff --git a/patches/src680/sfx2-fallback-to-en-help.diff b/patches/src680/sfx2-fallback-to-en-help.diff
new file mode 100644
index 000000000..2a47acad0
--- /dev/null
+++ b/patches/src680/sfx2-fallback-to-en-help.diff
@@ -0,0 +1,124 @@
+diff -u -r1.68 sfxhelp.cxx
+--- sfx2/source/appl/sfxhelp.cxx 7 Feb 2006 10:29:33 -0000 1.68
++++ sfx2/source/appl/sfxhelp.cxx 28 Mar 2006 13:12:14 -0000
+@@ -99,6 +99,9 @@
+ #ifndef _URLOBJ_HXX
+ #include <tools/urlobj.hxx>
+ #endif
++#ifndef _ISOLANG_HXX
++#include <tools/isolang.hxx>
++#endif
+ #ifndef _UTL_CONFIGMGR_HXX_
+ #include <unotools/configmgr.hxx>
+ #endif
+@@ -109,6 +112,11 @@
+ #include <svtools/pathoptions.hxx>
+ #include <rtl/ustring.hxx>
+ #include <osl/process.h>
++#include <osl/file.hxx>
++#ifndef _UTL_BOOTSTRAP_HXX
++#include <unotools/bootstrap.hxx>
++#endif
++
+ #include <rtl/uri.hxx>
+ #include <vcl/msgbox.hxx>
+ #include <svtools/ehdl.hxx>
+@@ -165,16 +173,53 @@
+
+ #define STARTERLIST 0
+
++rtl::OUString HelpLocaleString()
++{
++ static rtl::OUString aLocaleStr;
++ if (!aLocaleStr.getLength())
++ {
++ // detect installed locale
++ Any aLocale =
++ ::utl::ConfigManager::GetConfigManager()->GetDirectConfigProperty(
++ ::utl::ConfigManager::LOCALE );
++ bool bOk = (aLocale >>= aLocaleStr);
++ if ( bOk )
++ {
++ rtl::OUString aBaseInstallPath;
++ utl::Bootstrap::PathStatus aBaseLocateResult =
++ utl::Bootstrap::locateBaseInstallation(aBaseInstallPath);
++ static const char *szHelpPath = "/help/";
++
++ rtl::OUString sHelpPath = aBaseInstallPath +
++ rtl::OUString::createFromAscii(szHelpPath) + aLocaleStr;
++ osl::DirectoryItem aDirItem;
++
++ if (!osl::DirectoryItem::get(sHelpPath, aDirItem) == osl::FileBase::E_None)
++ {
++ bOk = false;
++ String sLang(aLocaleStr);
++ xub_StrLen nSepPos = sLang.Search( '-' );
++ if (nSepPos != STRING_NOTFOUND)
++ {
++ bOk = true;
++ sLang = sLang.Copy( 0, nSepPos );
++ sHelpPath = aBaseInstallPath +
++ rtl::OUString::createFromAscii(szHelpPath) + sLang;
++ if (!osl::DirectoryItem::get(sHelpPath, aDirItem) == osl::FileBase::E_None)
++ bOk = false;
++ }
++ }
++ }
++ if (!bOk)
++ aLocaleStr = rtl::OUString( DEFINE_CONST_UNICODE("en") );
++ }
++ return aLocaleStr;
++}
++
++
+ void AppendConfigToken_Impl( String& rURL, sal_Bool bQuestionMark )
+ {
+- // this completes a help url with the system parameters "Language" and "System"
+- // detect installed locale
+- Any aLocale =
+- ::utl::ConfigManager::GetConfigManager()->GetDirectConfigProperty( ::utl::ConfigManager::LOCALE );
+- ::rtl::OUString aLocaleStr;
+- if ( !( aLocale >>= aLocaleStr ) )
+- // fallback is english
+- aLocaleStr = ::rtl::OUString( DEFINE_CONST_UNICODE("en") );
++ ::rtl::OUString aLocaleStr(HelpLocaleString());
+
+ // query part exists?
+ if ( bQuestionMark )
+@@ -189,6 +234,7 @@
+ rURL += String( aLocaleStr );
+ rURL += DEFINE_CONST_UNICODE("&System=");
+ rURL += SvtHelpOptions().GetSystem();
++
+ }
+
+ // -----------------------------------------------------------------------
+@@ -426,11 +472,8 @@
+
+ pImp = new SfxHelp_Impl( bIsDebug );
+
+- Any aLocale =
+- ::utl::ConfigManager::GetConfigManager()->GetDirectConfigProperty( ::utl::ConfigManager::LOCALE );
+- ::rtl::OUString aLocaleStr;
+- if ( !( aLocale >>= aLocaleStr ) )
+- aLocaleStr = ::rtl::OUString( DEFINE_CONST_UNICODE("en") );
++ ::rtl::OUString aLocaleStr = HelpLocaleString();
++
+ sal_Int32 nSepPos = aLocaleStr.indexOf( '_' );
+ if ( nSepPos != -1 )
+ {
+--- xmlhelp/source/treeview/tvread.cxx 23 Mar 2005 13:04:52 -0000 1.16
++++ xmlhelp/source/treeview/tvread.cxx 24 Oct 2005 11:15:48 -0000
+@@ -701,7 +701,11 @@ ConfigData TVChildTarget::init( const Re
+ osl::FileBase::E_None == osl::DirectoryItem::get( url + locale.copy( 0,idx ),
+ aDirItem ) )
+ ret = locale.copy( 0,idx );
+-
++ else
++ {
++ locale = rtl::OUString::createFromAscii( "en-US" );
++ ret = rtl::OUString::createFromAscii("en");
++ }
+ url = url + ret;
+
+ // first of all, try do determine whether there are any *.tree files present
diff --git a/patches/src680/sfx2-title-generic-url.diff b/patches/src680/sfx2-title-generic-url.diff
new file mode 100644
index 000000000..7a75eb560
--- /dev/null
+++ b/patches/src680/sfx2-title-generic-url.diff
@@ -0,0 +1,13 @@
+diff -rup sfx2.orig/source/doc/objmisc.cxx sfx2/source/doc/objmisc.cxx
+--- sfx2.orig/source/doc/objmisc.cxx 2006-05-18 09:48:27.000000000 +0200
++++ sfx2/source/doc/objmisc.cxx 2006-05-18 09:49:19.000000000 +0200
+@@ -857,6 +857,9 @@ String SfxObjectShell::GetTitle
+ // ggf. Titel aus Dateiname generieren
+ if ( !pImp->aTitle.Len() )
+ pImp->aTitle = aURL.GetBase();
++
++ if ( !pImp->aTitle.Len() )
++ pImp->aTitle = aURL.GetMainURL( INetURLObject::DECODE_WITH_CHARSET );
+ }
+
+ // ganzer Titel
diff --git a/patches/src680/speed-local-link.diff b/patches/src680/speed-local-link.diff
new file mode 100644
index 000000000..690e1c84a
--- /dev/null
+++ b/patches/src680/speed-local-link.diff
@@ -0,0 +1,142 @@
+Index: cppuhelper/source/shlib.cxx
+===================================================================
+RCS file: /cvs/udk/cppuhelper/source/shlib.cxx,v
+retrieving revision 1.22
+diff -u -p -u -r1.22 shlib.cxx
+--- cppuhelper/source/shlib.cxx 8 Sep 2005 09:29:11 -0000 1.22
++++ cppuhelper/source/shlib.cxx 3 Apr 2006 09:50:34 -0000
+@@ -272,6 +272,114 @@ static OUString makeComponentPath(
+ return out;
+ }
+
++#ifdef LINUX
++static bool
++lcl_isWellKnownInternal(const OString &rLibName)
++{
++ // These are loaded at startup ...
++ static const char *pLookup[] = {
++ "behelper.uno.so",
++ "configmgr2.uno.so",
++ "fsstorage.uno.so",
++ "gconfbe1.uno.so",
++ "i18npool.uno.so",
++ "introspection.uno.so",
++ "libanimcore.so",
++ "libevtatt.so",
++ "libfileacc.so",
++ "libgcc3_uno.so",
++ "liblocaledata_en.so",
++ "liblocaledata_es.so",
++ "liblocaledata_euro.so",
++ "liblocaledata_others.so",
++ "libmcnttype.so",
++ "libpackage2.so",
++ "libreg.so.3",
++ "libsrtrs1.so",
++ "libucb1.so",
++ "libucpfile1.so",
++ "libxstor.so",
++ "localebe1.uno.so",
++ "implreg.uno.so",
++ "nestedreg.uno.so",
++ "regtypeprov.uno.so",
++ "security.uno.so",
++ "servicemgr.uno.so",
++ "shlibloader.uno.so",
++ "simplereg.uno.so",
++ "typemgr.uno.so",
++ "reflection.uno.so",
++ "sax.uno.so",
++ "streams.uno.so",
++ "sysmgr1.uno.so",
++ "typeconverter.uno.so",
++ "ucpgvfs1.uno.so",
++ "uriproc.uno.so",
++ NULL
++ };
++
++ // Perhaps do some cunning binary search ?
++ for (int i = 0; pLookup[i] != NULL; i++)
++ if (!rLibName.match (pLookup[i]))
++ return true;
++
++ return false;
++}
++
++// bootstrap.cxx
++OUString const & get_this_libpath();
++
++// Amusing hack to get 40% win on linking / startup speedup:
++// Rational: we load all of OO.o's exception symbols in a signal, global
++// shlib once first of all (RTLD_GLOBAL). This allows us to load all
++// subsequent components RTLD_LOCAL, their vague linkage symbols will
++// resolve in the global scope.
++static bool
++lcl_isInternalLibrary(OUString const & rLibName, OUString const & rPath)
++{
++ if (getenv ("OOO_DISABLE_INTERNAL"))
++ return false;
++
++ bool bIsInternal = false;
++
++ // Is this an internal library ?
++ if (rPath.getLength() > 0 && rPath != get_this_libpath())
++ {
++ // fprintf (stderr, "Lib path '%s' - not internal!\n",
++ // (const sal_Char *)rtl::OUStringToOString(rPath, RTL_TEXTENCODING_ASCII_US));
++ return false;
++ }
++
++ sal_Int32 nUpd = SUPD;
++ OUString aIntSuffix = OUString::valueOf(nUpd) + OUSTR("li.so");
++ if (rLibName.match (aIntSuffix))
++ bIsInternal = true;
++
++ if (!bIsInternal)
++ bIsInternal = lcl_isWellKnownInternal(
++ OUStringToOString(rLibName, RTL_TEXTENCODING_UTF8));
++
++ // If internal - load the exception type library RTLD_GLOBAL first
++ static bool bHaveLoadedExcepts = false;
++ if (bIsInternal && !bHaveLoadedExcepts)
++ {
++ rtl::OUString aExceptName = rtl::OUString::createFromAscii("libexlink") + aIntSuffix;
++ oslModule nExceptLib = osl_loadModule(aExceptName.pData,
++ SAL_LOADMODULE_LAZY | SAL_LOADMODULE_GLOBAL);
++ if (nExceptLib != NULL)
++ bHaveLoadedExcepts = true;
++ else
++ bIsInternal = false;
++ }
++
++// fprintf (stderr, "Lib name '%s' %d %d\n",
++// (const sal_Char *)rtl::OUStringToOString(rLibName, RTL_TEXTENCODING_ASCII_US),
++// bIsInternal, bHaveLoadedExcepts);
++
++ return bIsInternal;
++}
++#endif
++
+ //==============================================================================
+ Reference< XInterface > SAL_CALL loadSharedLibComponentFactory(
+ OUString const & rLibName, OUString const & rPath,
+@@ -288,9 +396,17 @@ Reference< XInterface > SAL_CALL loadSha
+ aModulePath,
+ Reference< XInterface >() );
+ }
++
++ sal_Int32 nFlags = SAL_LOADMODULE_LAZY;
++#ifdef LINUX
++ if (!lcl_isInternalLibrary (rLibName, rPath))
++ nFlags |= SAL_LOADMODULE_GLOBAL;
++// else - faster local only binding
++#else
++ nFlags |= SAL_LOADMODULE_GLOBAL;
++#endif
+
+- oslModule lib = osl_loadModule(
+- aModulePath.pData, SAL_LOADMODULE_LAZY | SAL_LOADMODULE_GLOBAL );
++ oslModule lib = osl_loadModule(aModulePath.pData, nFlags);
+ if (! lib)
+ {
+ throw loader::CannotActivateFactoryException(
diff --git a/patches/src680/speed-quickstart-i18n.diff b/patches/src680/speed-quickstart-i18n.diff
new file mode 100644
index 000000000..4fc34ba12
--- /dev/null
+++ b/patches/src680/speed-quickstart-i18n.diff
@@ -0,0 +1,72 @@
+--- svx/source/dialog/optmemory.cxx.old 2006-06-13 11:21:17.000000000 +0200
++++ svx/source/dialog/optmemory.cxx 2006-06-13 11:23:45.000000000 +0200
+@@ -235,6 +235,9 @@ OfaMemoryOptionsPage::OfaMemoryOptionsPa
+ aQuickLaunchFL ( this, ResId( FL_QUICKLAUNCH ) ),
+ aQuickLaunchCB ( this, ResId( CB_QUICKLAUNCH ) )//,
+ {
++#if defined(UNX)
++ aQuickLaunchCB.SetText( ResId( STR_QUICKLAUNCH_UNX ) );
++#endif
+ FreeResource();
+
+ #if !defined(WNT) && !defined(ENABLE_GTK)
+--- svx/source/dialog/optmemory.hrc.old 2006-06-13 11:21:17.000000000 +0200
++++ svx/source/dialog/optmemory.hrc 2006-06-13 11:27:20.000000000 +0200
+@@ -88,6 +88,7 @@
+ #define NF_OLECACHE 25
+ #define FL_QUICKLAUNCH 26
+ #define CB_QUICKLAUNCH 27
++#define STR_QUICKLAUNCH_UNX 28
+
+ #endif // #ifndef _OFA_OPTMEMORY_HRC
+
+--- svx/source/dialog/optmemory.src.old 2006-06-13 11:21:17.000000000 +0200
++++ svx/source/dialog/optmemory.src 2006-06-13 11:33:16.000000000 +0200
+@@ -220,33 +220,19 @@ TabPage OFA_TP_MEMORY
+ Text [ de ] = "%PRODUCTNAME beim ~Systemstart laden" ;
+ Text [ en-US ] = "Load %PRODUCTNAME during system start-up";
+ };
++ String STR_QUICKLAUNCH_UNX
++ {
++ Text[ en-US ] = "Enable systray quickstarter";
++ Text[ de ] = "Schnellstart des Systemabschnitts der Kontrollleiste aktivieren";
++ Text[ cs ] = "Umožnit rychlé spouštění z panelu";
++ Text[ es ] = "Habilitar Quickstarter en bandeja del sistema";
++ Text[ fr ] = "Activer systray quickstarter";
++ Text[ it ] = "Abilita quickstarter systray";
++ Text[ ja ] = "Systray quickstarterの有効化";
++ Text[ pt-BR ] = "Habilitar quickstarter de systray";
++ Text[ zh-CN ] = "启用系统盘快速启动程序";
++ Text[ zh-TW ] = "啟用 systray quickstarter";
++ Text [ x-comment ] = " ";
++ };
+ };
+
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
diff --git a/patches/src680/styles-dash.diff b/patches/src680/styles-dash.diff
new file mode 100644
index 000000000..c51ca9999
--- /dev/null
+++ b/patches/src680/styles-dash.diff
@@ -0,0 +1,273 @@
+Index: xmloff/source/draw/ximpstyl.cxx
+===================================================================
+RCS file: /cvs/xml/xmloff/source/draw/ximpstyl.cxx,v
+retrieving revision 1.46
+retrieving revision 1.46.100.1
+diff -u -p -r1.46 -r1.46.100.1
+--- xmloff/source/draw/ximpstyl.cxx 9 Sep 2005 14:02:13 -0000 1.46
++++ xmloff/source/draw/ximpstyl.cxx 3 Apr 2006 12:24:56 -0000 1.46.100.1
+@@ -208,8 +208,7 @@ SvXMLImportContext *SdXMLDrawingPageProp
+
+ if( (nPrefix == XML_NAMESPACE_XLINK) && IsXMLToken( aLocalName, XML_HREF ) )
+ {
+- uno::Any aAny;
+- aAny <<= GetImport().GetAbsoluteReference( xAttrList->getValueByIndex(i) );
++ uno::Any aAny( GetImport().GetAbsoluteReference( xAttrList->getValueByIndex(i) ) );
+ XMLPropertyState aPropState( rProp.mnIndex, aAny );
+ rProperties.push_back( aPropState );
+ }
+@@ -392,10 +391,7 @@ void SdXMLDrawingPageStyleContext::FillP
+ xInfo = rPropSet->getPropertySetInfo();
+ if ( xInfo->hasPropertyByName( rPropertyName ) )
+ {
+- Any aAny;
+- aAny <<= sStyleName;
+-
+- rPropSet->setPropertyValue( rPropertyName, aAny );
++ rPropSet->setPropertyValue( rPropertyName, Any( sStyleName ) );
+ }
+ }
+ }
+@@ -1336,10 +1332,7 @@ void SdXMLStylesContext::SetMasterPageSt
+
+ if(GetSdImport().GetLocalDocStyleFamilies().is() && GetSdImport().GetLocalDocStyleFamilies()->hasByName(rMaster.GetDisplayName()))
+ {
+- uno::Any aAny(GetSdImport().GetLocalDocStyleFamilies()->getByName(rMaster.GetDisplayName()));
+- uno::Reference< container::XNameAccess > xMasterPageStyles;
+- aAny >>= xMasterPageStyles;
+-
++ uno::Reference< container::XNameAccess > xMasterPageStyles( GetSdImport().GetLocalDocStyleFamilies()->getByName(rMaster.GetDisplayName()), UNO_QUERY );
+ if(xMasterPageStyles.is())
+ {
+ ImpSetGraphicStyles(xMasterPageStyles, XML_STYLE_FAMILY_SD_PRESENTATION_ID, sPrefix);
+@@ -1385,7 +1378,6 @@ void SdXMLStylesContext::ImpSetGraphicSt
+ const UniString& rPrefix) const
+ {
+ xub_StrLen nPrefLen(rPrefix.Len());
+- uno::Any aAny;
+
+ sal_uInt32 a;
+
+@@ -1408,88 +1400,85 @@ void SdXMLStylesContext::ImpSetGraphicSt
+ const SvXMLStyleContext* pStyle = GetStyle(a);
+ if(nFamily == pStyle->GetFamily() && !pStyle->IsDefaultStyle())
+ {
+- const UniString aStyleName(pStyle->GetDisplayName(), (sal_uInt16)pStyle->GetDisplayName().getLength());
+- sal_uInt16 nStylePrefLen = aStyleName.SearchBackward( sal_Unicode('-') ) + 1;
+-
+- if(!nPrefLen || ((nPrefLen == nStylePrefLen) && aStyleName.Equals(rPrefix, 0, nPrefLen)))
++ OUString aStyleName(pStyle->GetDisplayName());
++ if( nPrefLen )
+ {
+- uno::Reference< style::XStyle > xStyle;
+- const OUString aPureStyleName = nStylePrefLen ?
+- pStyle->GetDisplayName().copy((sal_Int32)nStylePrefLen) : pStyle->GetDisplayName();
+-
+- if(xPageStyles->hasByName(aPureStyleName))
+- {
+- aAny = xPageStyles->getByName(aPureStyleName);
+- aAny >>= xStyle;
++ sal_Int32 nStylePrefLen = aStyleName.lastIndexOf( sal_Unicode('-') ) + 1;
++ if( (nPrefLen != nStylePrefLen) || (aStyleName.compareTo( rPrefix, nPrefLen ) != 0) )
++ continue;
+
+- // set properties of existing styles to default
+- uno::Reference< beans::XPropertySet > xPropSet( xStyle, uno::UNO_QUERY );
+- uno::Reference< beans::XPropertySetInfo > xPropSetInfo;
+- if( xPropSet.is() )
+- xPropSetInfo = xPropSet->getPropertySetInfo();
++ aStyleName = aStyleName.copy( nPrefLen );
++ }
+
+- uno::Reference< beans::XPropertyState > xPropState( xStyle, uno::UNO_QUERY );
++ uno::Reference< style::XStyle > xStyle;
++ if(xPageStyles->hasByName(aStyleName))
++ {
++ xPageStyles->getByName(aStyleName) >>= xStyle;
+
+- if( xPropState.is() )
++ // set properties of existing styles to default
++ uno::Reference< beans::XPropertySet > xPropSet( xStyle, uno::UNO_QUERY );
++ uno::Reference< beans::XPropertySetInfo > xPropSetInfo;
++ if( xPropSet.is() )
++ xPropSetInfo = xPropSet->getPropertySetInfo();
++
++ uno::Reference< beans::XPropertyState > xPropState( xStyle, uno::UNO_QUERY );
++
++ if( xPropState.is() )
++ {
++ UniReference < XMLPropertySetMapper > xPrMap;
++ UniReference < SvXMLImportPropertyMapper > xImpPrMap = GetImportPropertyMapper( nFamily );
++ DBG_ASSERT( xImpPrMap.is(), "There is the import prop mapper" );
++ if( xImpPrMap.is() )
++ xPrMap = xImpPrMap->getPropertySetMapper();
++ if( xPrMap.is() )
+ {
+- UniReference < XMLPropertySetMapper > xPrMap;
+- UniReference < SvXMLImportPropertyMapper > xImpPrMap = GetImportPropertyMapper( nFamily );
+- DBG_ASSERT( xImpPrMap.is(), "There is the import prop mapper" );
+- if( xImpPrMap.is() )
+- xPrMap = xImpPrMap->getPropertySetMapper();
+- if( xPrMap.is() )
++ const sal_Int32 nCount = xPrMap->GetEntryCount();
++ for( sal_Int32 i = 0; i < nCount; i++ )
+ {
+- const sal_Int32 nCount = xPrMap->GetEntryCount();
+- for( sal_Int32 i = 0; i < nCount; i++ )
++ const OUString& rName = xPrMap->GetEntryAPIName( i );
++ if( xPropSetInfo->hasPropertyByName( rName ) && beans::PropertyState_DIRECT_VALUE == xPropState->getPropertyState( rName ) )
+ {
+- const OUString& rName = xPrMap->GetEntryAPIName( i );
+- if( xPropSetInfo->hasPropertyByName( rName ) && beans::PropertyState_DIRECT_VALUE == xPropState->getPropertyState( rName ) )
+- {
+- xPropState->setPropertyToDefault( rName );
+- }
++ xPropState->setPropertyToDefault( rName );
+ }
+ }
+ }
+ }
+- else
+- {
+- // graphics style does not exist, create and add it
+- uno::Reference< lang::XMultiServiceFactory > xServiceFact(GetSdImport().GetModel(), uno::UNO_QUERY);
+- if(xServiceFact.is())
+- {
+- uno::Reference< style::XStyle > xNewStyle(
+- xServiceFact->createInstance(
+- OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.style.Style"))),
+- uno::UNO_QUERY);
++ }
++ else
++ {
++ // graphics style does not exist, create and add it
++ uno::Reference< lang::XMultiServiceFactory > xServiceFact(GetSdImport().GetModel(), uno::UNO_QUERY);
++ if(xServiceFact.is())
++ {
++ uno::Reference< style::XStyle > xNewStyle(
++ xServiceFact->createInstance(
++ OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.style.Style"))),
++ uno::UNO_QUERY);
+
+- if(xNewStyle.is())
+- {
+- // remember style
+- xStyle = xNewStyle;
++ if(xNewStyle.is())
++ {
++ // remember style
++ xStyle = xNewStyle;
+
+- // add new style to graphics style pool
+- uno::Reference< container::XNameContainer > xInsertContainer(xPageStyles, uno::UNO_QUERY);
+- if(xInsertContainer.is())
+- {
+- aAny <<= xStyle;
+- xInsertContainer->insertByName(aPureStyleName, aAny);
+- }
+- }
++ // add new style to graphics style pool
++ uno::Reference< container::XNameContainer > xInsertContainer(xPageStyles, uno::UNO_QUERY);
++ if(xInsertContainer.is())
++ xInsertContainer->insertByName(aStyleName, uno::Any( xStyle ) );
+ }
+ }
++ }
+
+- if(xStyle.is())
+- {
+- // set properties at style
+- XMLShapeStyleContext* pPropStyle =
+- (pStyle->ISA(XMLShapeStyleContext)) ? (XMLShapeStyleContext*)pStyle : 0L;
+- uno::Reference< beans::XPropertySet > xPropSet(xStyle, uno::UNO_QUERY);
++ if(xStyle.is())
++ {
++ // set properties at style
++ XMLShapeStyleContext* pPropStyle =
++ (pStyle->ISA(XMLShapeStyleContext)) ? (XMLShapeStyleContext*)pStyle : 0L;
++ uno::Reference< beans::XPropertySet > xPropSet(xStyle, uno::UNO_QUERY);
+
+- if(xPropSet.is() && pPropStyle)
+- {
+- pPropStyle->FillPropertySet(xPropSet);
+- pPropStyle->SetStyle(xStyle);
+- }
++ if(xPropSet.is() && pPropStyle)
++ {
++ pPropStyle->FillPropertySet(xPropSet);
++ pPropStyle->SetStyle(xStyle);
+ }
+ }
+ }
+@@ -1507,35 +1496,40 @@ void SdXMLStylesContext::ImpSetGraphicSt
+ {
+ const SvXMLStyleContext* pStyle = GetStyle(a);
+
+- if(pStyle && nFamily == pStyle->GetFamily())
++ if(pStyle && pStyle->GetName().getLength() && (nFamily == pStyle->GetFamily())) try
+ {
+- const UniString aStyleName(pStyle->GetDisplayName(), (sal_uInt16)pStyle->GetDisplayName().getLength());
+- sal_uInt16 nStylePrefLen = aStyleName.SearchBackward( sal_Unicode('-') ) + 1;
+-
+- if(pStyle->GetName().getLength() && (!nPrefLen || ((nPrefLen == nStylePrefLen) && aStyleName.Equals(rPrefix, 0, nPrefLen))))
++ OUString aStyleName(pStyle->GetDisplayName());
++ if( nPrefLen )
+ {
+- try
+- {
++ sal_Int32 nStylePrefLen = aStyleName.lastIndexOf( sal_Unicode('-') ) + 1;
++ if( (nPrefLen != nStylePrefLen) || (aStyleName.compareTo( rPrefix, nPrefLen ) != 0) )
++ continue;
+
+- uno::Reference< style::XStyle > xStyle;
+- const OUString aPureStyleName = nPrefLen ? pStyle->GetDisplayName().copy((sal_Int32)nPrefLen) : pStyle->GetDisplayName();
+- xPageStyles->getByName(aPureStyleName) >>= xStyle;
++ aStyleName = aStyleName.copy( nPrefLen );
++ }
+
+- if(xStyle.is())
+- {
+- // set parent style name
+- ::rtl::OUString sParentStyleDisplayName = const_cast< SvXMLImport& >( GetImport() ).GetStyleDisplayName( pStyle->GetFamily(), pStyle->GetParentName() );
+- xStyle->setParentStyle( sParentStyleDisplayName );
+- }
+- }
+- catch( Exception& e )
++ uno::Reference< style::XStyle > xStyle( xPageStyles->getByName(aStyleName), UNO_QUERY );
++ if(xStyle.is())
++ {
++ // set parent style name
++ ::rtl::OUString sParentStyleDisplayName( const_cast< SvXMLImport& >( GetImport() ).GetStyleDisplayName( pStyle->GetFamily(), pStyle->GetParentName() ) );
++ if( nPrefLen )
+ {
+- (void)e;
+- uno::Sequence<OUString> aSeq(0);
+- const_cast<SdXMLImport*>(&GetSdImport())->SetError( XMLERROR_FLAG_WARNING | XMLERROR_API, aSeq, e.Message, NULL );
++ sal_Int32 nStylePrefLen = sParentStyleDisplayName.lastIndexOf( sal_Unicode('-') ) + 1;
++ if( (nPrefLen != nStylePrefLen) || (sParentStyleDisplayName.compareTo( rPrefix, nPrefLen ) != 0) )
++ continue;
++
++ sParentStyleDisplayName = sParentStyleDisplayName.copy( nPrefLen );
+ }
++ xStyle->setParentStyle( sParentStyleDisplayName );
+ }
+ }
++ catch( Exception& e )
++ {
++ (void)e;
++ uno::Sequence<OUString> aSeq(0);
++ const_cast<SdXMLImport*>(&GetSdImport())->SetError( XMLERROR_FLAG_WARNING | XMLERROR_API, aSeq, e.Message, NULL );
++ }
+ }
+ }
+
+@@ -1603,8 +1597,7 @@ SvXMLImportContext* SdXMLMasterStylesCon
+ else
+ {
+ // existing page, use it
+- uno::Any aAny(xMasterPages->getByIndex(GetSdImport().GetNewMasterPageCount()));
+- aAny >>= xNewMasterPage;
++ xMasterPages->getByIndex(GetSdImport().GetNewMasterPageCount()) >>= xNewMasterPage;
+ }
+
+ // increment global import page counter
diff --git a/patches/src680/sw-ww8-redlining.diff b/patches/src680/sw-ww8-redlining.diff
new file mode 100644
index 000000000..816b34acb
--- /dev/null
+++ b/patches/src680/sw-ww8-redlining.diff
@@ -0,0 +1,23 @@
+Index: source/filter/ww8/ww8par4.cxx
+===================================================================
+RCS file: /cvs/sw/sw/source/filter/ww8/ww8par4.cxx,v
+retrieving revision 1.53
+diff -u -r1.53 ww8par4.cxx
+--- sw/source/filter/ww8/ww8par4.cxx 19 Apr 2006 13:42:38 -0000 1.53
++++ sw/source/filter/ww8/ww8par4.cxx 14 Jul 2006 14:55:18 -0000
+@@ -590,6 +590,7 @@
+ {
+ pPlcxMan->HasCharSprm(69, aResult);
+ pSprmCIbstRMark = aResult.empty() ? 0 : aResult.back();
++ aResult.clear();
+ pPlcxMan->HasCharSprm(70, aResult);
+ pSprmCDttmRMark = aResult.empty() ? 0 : aResult.back();
+ }
+@@ -597,6 +598,7 @@
+ {
+ pPlcxMan->HasCharSprm( bIns ? 0x4804 : 0x4863, aResult);
+ pSprmCIbstRMark = aResult.empty() ? 0 : aResult.back();
++ aResult.clear();
+ pPlcxMan->HasCharSprm( bIns ? 0x6805 : 0x6864, aResult);
+ pSprmCDttmRMark = aResult.empty() ? 0 : aResult.back();
+ }
diff --git a/patches/src680/system-neon-0.26.diff b/patches/src680/system-neon-0.26.diff
new file mode 100644
index 000000000..ac2c72fb7
--- /dev/null
+++ b/patches/src680/system-neon-0.26.diff
@@ -0,0 +1,278 @@
+--- config_office/configure.in.orig 2006-04-26 22:44:35.000000000 +0200
++++ config_office/configure.in 2006-04-26 23:04:34.000000000 +0200
+@@ -3723,7 +3723,8 @@
+ test "$with_system_neon" != "no"; then
+ AC_MSG_RESULT([external])
+ PKG_CHECK_MODULES(NEON, neon >= 0.24.0)
+- PKG_CHECK_MODULES(NEON, neon < 0.26.0, , AC_MSG_ERROR([you need neon 0.24.x or 0.25.x for system-neon]))
++ PKG_CHECK_MODULES(NEON, neon < 0.27.0, , AC_MSG_ERROR([you need neon 0.24.x to 0.26.x for system-neon]))
++ NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
+ NEON_CFLAGS="$NEON_CFLAGS -DSYSTEM_NEON -DUSE_DAV_LOCKS=1"
+ SYSTEM_NEON=YES
+ else
+@@ -3731,9 +3732,11 @@
+ SYSTEM_NEON=NO
+ NEON_LIBS=-lneon
+ NEON_CFLAGS=
++ NEON_VERSION=0247
+ BUILD_TYPE="$BUILD_TYPE NEON"
+ fi
+ AC_SUBST(SYSTEM_NEON)
++AC_SUBST(NEON_VERSION)
+ AC_SUBST(NEON_LIBS)
+ AC_SUBST(NEON_CFLAGS)
+ fi
+--- config_office/set_soenv.in.orig 2006-04-26 22:52:38.000000000 +0200
++++ config_office/set_soenv.in 2006-04-26 22:53:15.000000000 +0200
+@@ -1804,6 +1804,7 @@
+ ToFile( "SYSTEM_SNDFILE", "@SYSTEM_SNDFILE@", "e" );
+ ToFile( "SYSTEM_PORTAUDIO", "@SYSTEM_PORTAUDIO@", "e" );
+ ToFile( "SYSTEM_NEON", "@SYSTEM_NEON@", "e" );
++ToFile( "NEON_VERSION", "@NEON_VERSION@", "e" );
+ ToFile( "NEON_LIBS", "@NEON_LIBS@", "e" );
+ ToFile( "NEON_CFLAGS", "@NEON_CFLAGS@", "e" );
+ ToFile( "DISABLE_NEON", "@DISABLE_NEON@", "e" );
+diff -Nur ucb.orig/source/ucp/webdav/LinkSequence.cxx ucb/source/ucp/webdav/LinkSequence.cxx
+--- ucb.orig/source/ucp/webdav/LinkSequence.cxx 2006-04-26 22:46:11.000000000 +0200
++++ ucb/source/ucp/webdav/LinkSequence.cxx 2006-04-26 23:00:53.000000000 +0200
+@@ -177,7 +177,7 @@
+ rInData.getStr() + nStart,
+ nEnd - nStart + TOKEN_LENGTH );
+
+-#ifdef NEONTWOFIVE
++#if NEON_VERSION >= 0250
+ success = !ne_xml_failed( parser );
+ #else
+ success = !!ne_xml_valid( parser );
+diff -Nur ucb.orig/source/ucp/webdav/LockEntrySequence.cxx ucb/source/ucp/webdav/LockEntrySequence.cxx
+--- ucb.orig/source/ucp/webdav/LockEntrySequence.cxx 2006-04-26 22:46:11.000000000 +0200
++++ ucb/source/ucp/webdav/LockEntrySequence.cxx 2006-04-26 23:00:53.000000000 +0200
+@@ -202,7 +202,7 @@
+ rInData.getStr() + nStart,
+ nEnd - nStart + TOKEN_LENGTH );
+
+-#ifdef NEONTWOFIVE
++#if NEON_VERSION >= 0250
+ success = !ne_xml_failed( parser );
+ #else
+ success = !!ne_xml_valid( parser );
+diff -Nur ucb.orig/source/ucp/webdav/LockSequence.cxx ucb/source/ucp/webdav/LockSequence.cxx
+--- ucb.orig/source/ucp/webdav/LockSequence.cxx 2006-04-26 22:46:11.000000000 +0200
++++ ucb/source/ucp/webdav/LockSequence.cxx 2006-04-26 23:00:53.000000000 +0200
+@@ -335,7 +335,7 @@
+ rInData.getStr() + nStart,
+ nEnd - nStart + TOKEN_LENGTH );
+
+-#ifdef NEONTWOFIVE
++#if NEON_VERSION >= 0250
+ success = !ne_xml_failed( parser );
+ #else
+ success = !!ne_xml_valid( parser );
+diff -Nur ucb.orig/source/ucp/webdav/makefile.mk ucb/source/ucp/webdav/makefile.mk
+--- ucb.orig/source/ucp/webdav/makefile.mk 2006-04-26 22:46:11.000000000 +0200
++++ ucb/source/ucp/webdav/makefile.mk 2006-04-26 22:56:47.000000000 +0200
+@@ -61,12 +61,9 @@
+ CFLAGS+= $(LIBXML_CFLAGS)
+ .ENDIF
+
++CFLAGS+= -DNEON_VERSION=$(NEON_VERSION)
+ .IF "$(SYSTEM_NEON)" == "YES"
+ CFLAGS+= $(NEON_CFLAGS)
+-TWOFIVE:=$(shell pkg-config --atleast-version=0.25.0 neon && echo YES || echo NO)
+-.IF "$(TWOFIVE)" == "YES"
+-CFLAGS+=-DNEONTWOFIVE
+-.ENDIF
+ .ELSE
+ NEONINCDIR=external$/neon
+ CFLAGS+= -I$(SOLARINCDIR)$/$(NEONINCDIR)
+diff -Nur ucb.orig/source/ucp/webdav/NeonHeadRequest.cxx ucb/source/ucp/webdav/NeonHeadRequest.cxx
+--- ucb.orig/source/ucp/webdav/NeonHeadRequest.cxx 2006-04-26 22:46:11.000000000 +0200
++++ ucb/source/ucp/webdav/NeonHeadRequest.cxx 2006-04-26 23:00:53.000000000 +0200
+@@ -51,7 +51,7 @@
+ using namespace webdav_ucp;
+ using namespace com::sun::star;
+
+-#ifdef NEONTWOFIVE
++#if NEON_VERSION >= 0250
+ static void process_headers(ne_request *req,
+ DAVResource &rResource,
+ const std::vector< ::rtl::OUString > &rHeaderNames)
+@@ -190,14 +190,14 @@
+ inPath,
+ RTL_TEXTENCODING_UTF8 ) );
+
+-#ifndef NEONTWOFIVE
++#if NEON_VERSION < 0250
+ NeonHeadRequestContext aCtx( &ioResource, &inHeaderNames );
+ ne_add_response_header_catcher( req, NHR_ResponseHeaderCatcher, &aCtx );
+ #endif
+
+ nError = ne_request_dispatch( req );
+
+-#ifdef NEONTWOFIVE
++#if NEON_VERSION >= 0250
+ process_headers(req, ioResource, inHeaderNames);
+ #endif
+
+diff -Nur ucb.orig/source/ucp/webdav/NeonPropFindRequest.cxx ucb/source/ucp/webdav/NeonPropFindRequest.cxx
+--- ucb.orig/source/ucp/webdav/NeonPropFindRequest.cxx 2006-04-26 22:46:11.000000000 +0200
++++ ucb/source/ucp/webdav/NeonPropFindRequest.cxx 2006-04-26 23:08:37.000000000 +0200
+@@ -175,11 +175,19 @@
+
+ // -------------------------------------------------------------------
+ extern "C" void NPFR_propfind_results( void* userdata,
++#if NEON_VERSION >= 0260
++ const ne_uri* href_uri,
++#else
+ const char* href,
++#endif
+ const NeonPropFindResultSet* set )
+ {
+ // @@@ href is not the uri! DAVResource ctor wants uri!
+
++#if NEON_VERSION >= 0260
++ // href should be free'd? says header ...
++ char* href = ne_uri_unparse(href_uri);
++#endif
+ DAVResource theResource(
+ OStringToOUString( href, RTL_TEXTENCODING_UTF8 ) );
+
+@@ -209,11 +217,19 @@
+
+ // -------------------------------------------------------------------
+ extern "C" void NPFR_propnames_results( void* userdata,
++#if NEON_VERSION >= 0260
++ const ne_uri* href_uri,
++#else
+ const char* href,
++#endif
+ const NeonPropFindResultSet* results )
+ {
+ // @@@ href is not the uri! DAVResourceInfo ctor wants uri!
+
++#if NEON_VERSION >= 0260
++ // href should be free'd? says header ...
++ char* href = ne_uri_unparse(href_uri);
++#endif
+ // Create entry for the resource.
+ DAVResourceInfo theResource(
+ OStringToOUString( href, RTL_TEXTENCODING_UTF8 ) );
+diff -Nur ucb.orig/source/ucp/webdav/NeonSession.cxx ucb/source/ucp/webdav/NeonSession.cxx
+--- ucb.orig/source/ucp/webdav/NeonSession.cxx 2006-04-26 22:46:11.000000000 +0200
++++ ucb/source/ucp/webdav/NeonSession.cxx 2006-04-26 23:00:53.000000000 +0200
+@@ -221,7 +221,7 @@
+ // ResponseBlockReader
+ // A simple Neon response_block_reader for use with an XInputStream
+ // -------------------------------------------------------------------
+-#ifdef NEONTWOFIVE
++#if NEON_VERSION >= 0250
+ extern "C" int NeonSession_ResponseBlockReader
+ #else
+ extern "C" void NeonSession_ResponseBlockReader
+@@ -244,7 +244,7 @@
+ xInputStream->AddToStream( inBuf, inLen );
+ }
+ }
+-#ifdef NEONTWOFIVE
++#if NEON_VERSION >= 0250
+ return 0;
+ #endif
+ }
+@@ -253,7 +253,7 @@
+ // ResponseBlockWriter
+ // A simple Neon response_block_reader for use with an XOutputStream
+ // -------------------------------------------------------------------
+-#ifdef NEONTWOFIVE
++#if NEON_VERSION >= 0250
+ extern "C" int NeonSession_ResponseBlockWriter
+ #else
+ extern "C" void NeonSession_ResponseBlockWriter
+@@ -273,7 +273,7 @@
+ xOutputStream->writeBytes( aSeq );
+ }
+ }
+-#ifdef NEONTWOFIVE
++#if NEON_VERSION >= 0250
+ return 0;
+ #endif
+ }
+@@ -1538,7 +1538,7 @@
+ }
+ */
+
+-#ifdef NEONTWOFIVE
++#if NEON_VERSION >= 0250
+ static void run_header_handler(ne_request *req, ne_header_handler handler, void *userdata)
+ {
+ void *cursor = NULL;
+@@ -1566,13 +1566,13 @@
+ //struct get_context ctx;
+ ne_request * req = ne_request_create( sess, "GET", uri );
+ int ret;
+-#ifndef NEONTWOFIVE
++#if NEON_VERSION < 0250
+ ne_add_response_header_catcher( req, handler, userdata );
+ #endif
+ ne_add_response_body_reader( req, ne_accept_2xx, reader, userdata );
+
+ ret = ne_request_dispatch( req );
+-#ifdef NEONTWOFIVE
++#if NEON_VERSION >= 0250
+ run_header_handler(req, handler, userdata);
+ #endif
+
+diff -Nur ucb.orig/source/ucp/webdav/NeonSession.hxx ucb/source/ucp/webdav/NeonSession.hxx
+--- ucb.orig/source/ucp/webdav/NeonSession.hxx 2006-04-26 22:46:11.000000000 +0200
++++ ucb/source/ucp/webdav/NeonSession.hxx 2006-04-26 22:59:20.000000000 +0200
+@@ -49,7 +49,7 @@
+ #include "NeonTypes.hxx"
+ #endif
+
+-#ifdef NEONTWOFIVE
++#if NEON_VERSION >= 0250
+ typedef void (*ne_header_handler)(void *userdata, const char *value);
+ #endif
+
+diff -Nur ucb.orig/source/ucp/webdav/NeonUri.cxx ucb/source/ucp/webdav/NeonUri.cxx
+--- ucb.orig/source/ucp/webdav/NeonUri.cxx 2006-04-26 22:46:11.000000000 +0200
++++ ucb/source/ucp/webdav/NeonUri.cxx 2006-04-26 23:08:37.000000000 +0200
+@@ -54,9 +54,15 @@
+
+ using namespace webdav_ucp;
+
++#if NEON_VERSION >= 0260
++ne_uri NeonUri::sUriDefaultsHTTP = { "http", NULL, NULL, DEFAULT_HTTP_PORT };
++ne_uri NeonUri::sUriDefaultsHTTPS = { "https", NULL, NULL, DEFAULT_HTTPS_PORT };
++ne_uri NeonUri::sUriDefaultsFTP = { "ftp", NULL, NULL, DEFAULT_FTP_PORT };
++#else
+ ne_uri NeonUri::sUriDefaultsHTTP = { "http", NULL, DEFAULT_HTTP_PORT, NULL };
+ ne_uri NeonUri::sUriDefaultsHTTPS = { "https", NULL, DEFAULT_HTTPS_PORT, NULL };
+ ne_uri NeonUri::sUriDefaultsFTP = { "ftp", NULL, DEFAULT_FTP_PORT, NULL };
++#endif
+
+ // -------------------------------------------------------------------
+ // Constructor
+@@ -132,7 +138,11 @@
+ pUri->scheme ? pUri->scheme : pUriDefs->scheme,
+ RTL_TEXTENCODING_UTF8 );
+ mUserInfo = rtl::OStringToOUString(
++#if NEON_VERSION >= 0260
++ pUri->userinfo ? pUri->userinfo : pUriDefs->userinfo,
++#else
+ pUri->authinfo ? pUri->authinfo : pUriDefs->authinfo,
++#endif
+ RTL_TEXTENCODING_UTF8 );
+ mHostName = rtl::OStringToOUString(
+ pUri->host ? pUri->host : pUriDefs->host,
+diff -Nur ucb.orig/source/ucp/webdav/UCBDeadPropertyValue.cxx ucb/source/ucp/webdav/UCBDeadPropertyValue.cxx
+--- ucb.orig/source/ucp/webdav/UCBDeadPropertyValue.cxx 2006-04-26 22:46:11.000000000 +0200
++++ ucb/source/ucp/webdav/UCBDeadPropertyValue.cxx 2006-04-26 23:00:53.000000000 +0200
+@@ -390,7 +390,7 @@
+
+ ne_xml_parse( parser, rInData.getStr(), rInData.getLength() );
+
+-#ifdef NEONTWOFIVE
++#if NEON_VERSION >= 0250
+ success = !ne_xml_failed( parser );
+ #else
+ success = !!ne_xml_valid( parser );
diff --git a/patches/src680/vcl-fontconfig-hints.diff b/patches/src680/vcl-fontconfig-hints.diff
new file mode 100644
index 000000000..a8628274c
--- /dev/null
+++ b/patches/src680/vcl-fontconfig-hints.diff
@@ -0,0 +1,618 @@
+Index: psprint/inc/psprint/fontmanager.hxx
+===================================================================
+RCS file: /cvs/gsl/psprint/inc/psprint/fontmanager.hxx,v
+retrieving revision 1.28
+retrieving revision 1.28.4.1
+diff -u -p -r1.28 -r1.28.4.1
+--- psprint/inc/psprint/fontmanager.hxx 19 Jan 2006 17:36:34 -0000 1.28
++++ psprint/inc/psprint/fontmanager.hxx 16 Feb 2006 13:23:58 -0000 1.28.4.1
+@@ -143,6 +143,15 @@ enum type {
+ };
+ }
+
++namespace fcstatus
++{
++enum type {
++ istrue,
++ isunset,
++ isfalse
++};
++}
++
+ /*
+ * the difference between FastPrintFontInfo and PrintFontInfo
+ * is that the information in FastPrintFontInfo can usually
+@@ -168,6 +177,8 @@ struct FastPrintFontInfo
+ weight::type m_eWeight;
+ pitch::type m_ePitch;
+ rtl_TextEncoding m_aEncoding;
++ fcstatus::type m_eEmbeddedbitmap;
++ fcstatus::type m_eAntialias;
+
+ FastPrintFontInfo() :
+ m_nID( 0 ),
+@@ -177,7 +188,9 @@ struct FastPrintFontInfo
+ m_eWidth( width::Unknown ),
+ m_eWeight( weight::Unknown ),
+ m_ePitch( pitch::Unknown ),
+- m_aEncoding( RTL_TEXTENCODING_DONTKNOW )
++ m_aEncoding( RTL_TEXTENCODING_DONTKNOW ),
++ m_eEmbeddedbitmap( fcstatus::isunset ),
++ m_eAntialias( fcstatus::isunset )
+ {}
+ };
+
+@@ -291,6 +304,10 @@ class PrintFontManager
+ int m_nYMax;
+ bool m_bHaveVerticalSubstitutedGlyphs;
+ bool m_bUserOverride;
++
++ fcstatus::type m_eEmbeddedbitmap;
++ fcstatus::type m_eAntialias;
++
+ std::map< sal_Unicode, sal_Int32 > m_aEncodingVector;
+ std::map< sal_Unicode, rtl::OString > m_aNonEncoded;
+
+cvs diff: Diffing psprint/prj
+cvs diff: Diffing psprint/source
+cvs diff: Diffing psprint/source/fontmanager
+Index: psprint/source/fontmanager/fontcache.cxx
+===================================================================
+RCS file: /cvs/gsl/psprint/source/fontmanager/fontcache.cxx,v
+retrieving revision 1.19
+retrieving revision 1.18.14.2
+diff -u -p -r1.19 -r1.18.14.2
+--- psprint/source/fontmanager/fontcache.cxx 9 Feb 2006 12:33:17 -0000 1.19
++++ psprint/source/fontmanager/fontcache.cxx 16 Feb 2006 13:23:32 -0000 1.18.14.2
+@@ -55,7 +55,7 @@
+ #endif
+
+ #define FONTCACHEFILE "/user/psprint/pspfontcache"
+-#define CACHE_MAGIC "PspFontCacheFile format 2"
++#define CACHE_MAGIC "PspFontCacheFile format 3"
+
+ using namespace std;
+ using namespace rtl;
+@@ -168,7 +168,7 @@ void FontCache::flush()
+ /*
+ * for each font entry write:
+ * name[;name[;name]]
+- * fontnr;PSName;italic;weight;width;pitch;encoding;ascend;descend;leading;vsubst;gxw;gxh;gyw;gyh;useroverrride[;{metricfile,typeflags}][;stylename]
++ * fontnr;PSName;italic;weight;width;pitch;encoding;ascend;descend;leading;vsubst;gxw;gxh;gyw;gyh;useroverrride;embed;antialias[;{metricfile,typeflags}][;stylename]
+ */
+ if( nEntrySize > 1 )
+ nSubEntry = static_cast<const PrintFontManager::TrueTypeFontFile*>(*it)->m_nCollectionEntry;
+@@ -219,6 +219,10 @@ void FontCache::flush()
+ aLine.Append( ByteString::CreateFromInt32( (*it)->m_aGlobalMetricY.height ) );
+ aLine.Append( ';' );
+ aLine.Append( (*it)->m_bUserOverride ? "1" : "0" );
++ aLine.Append( ';' );
++ aLine.Append( ByteString::CreateFromInt32( (*it)->m_eEmbeddedbitmap ) );
++ aLine.Append( ';' );
++ aLine.Append( ByteString::CreateFromInt32( (*it)->m_eAntialias ) );
+
+ switch( (*it)->m_eType )
+ {
+@@ -387,8 +391,8 @@ void FontCache::read()
+ pLine = aLine.GetBuffer();
+ nLen = aLine.Len();
+
+- // get up to 18 token positions
+- const int nMaxTokens = 18;
++ // get up to 20 token positions
++ const int nMaxTokens = 20;
+ int nTokenPos[nMaxTokens];
+ nTokenPos[0] = 0;
+ int nTokens = 1;
+@@ -401,7 +405,7 @@ void FontCache::read()
+ break;
+ }
+ }
+- if( nTokens < 16 )
++ if( nTokens < 18 )
+ {
+ delete pFont;
+ continue;
+@@ -428,11 +432,14 @@ void FontCache::read()
+ = atoi( pLine + nTokenPos[14] );
+ pFont->m_bUserOverride
+ = (atoi( pLine + nTokenPos[15] ) != 0);
+- int nStyleTokenNr = 16;
++ pFont->m_eEmbeddedbitmap
++ = (fcstatus::type)atoi(pLine+nTokenPos[16]);
++ pFont->m_eAntialias = (fcstatus::type)atoi(pLine+nTokenPos[17]);
++ int nStyleTokenNr = 18;
+ switch( eType )
+ {
+ case fonttype::TrueType:
+- static_cast<PrintFontManager::TrueTypeFontFile*>(pFont)->m_nTypeFlags = atoi( pLine + nTokenPos[16] );
++ static_cast<PrintFontManager::TrueTypeFontFile*>(pFont)->m_nTypeFlags = atoi( pLine + nTokenPos[18] );
+ static_cast<PrintFontManager::TrueTypeFontFile*>(pFont)->m_nCollectionEntry = nCollEntry;
+ static_cast<PrintFontManager::TrueTypeFontFile*>(pFont)->m_nDirectory = nDir;
+ static_cast<PrintFontManager::TrueTypeFontFile*>(pFont)->m_aFontFile = aFile;
+@@ -440,7 +447,7 @@ void FontCache::read()
+ break;
+ case fonttype::Type1:
+ {
+- int nTokLen = (nTokens > 17 ) ? nTokenPos[17]-nTokenPos[16]-1 : nLen - nTokenPos[16];
++ int nTokLen = (nTokens > 19 ) ? nTokenPos[19]-nTokenPos[18]-1 : nLen - nTokenPos[18];
+ static_cast<PrintFontManager::Type1FontFile*>(pFont)->m_aMetricFile = OString( pLine + nTokenPos[16], nTokLen );
+ static_cast<PrintFontManager::Type1FontFile*>(pFont)->m_nDirectory = nDir;
+ static_cast<PrintFontManager::Type1FontFile*>(pFont)->m_aFontFile = aFile;
+@@ -557,6 +564,8 @@ void FontCache::copyPrintFont( const Pri
+ pTo->m_nYMax = pFrom->m_nYMax;
+ pTo->m_bHaveVerticalSubstitutedGlyphs = pFrom->m_bHaveVerticalSubstitutedGlyphs;
+ pTo->m_bUserOverride = pFrom->m_bUserOverride;
++ pTo->m_eEmbeddedbitmap = pFrom->m_eEmbeddedbitmap;
++ pTo->m_eAntialias = pFrom->m_eAntialias;
+ }
+
+ /*
+@@ -618,7 +627,9 @@ bool FontCache::equalsPrintFont( const P
+ pRight->m_nXMax != pLeft->m_nXMax ||
+ pRight->m_nYMax != pLeft->m_nYMax ||
+ pRight->m_bHaveVerticalSubstitutedGlyphs != pLeft->m_bHaveVerticalSubstitutedGlyphs ||
+- pRight->m_bUserOverride != pLeft->m_bUserOverride
++ pRight->m_bUserOverride != pLeft->m_bUserOverride ||
++ pRight->m_eEmbeddedbitmap != pLeft->m_eEmbeddedbitmap ||
++ pRight->m_eAntialias != pLeft->m_eAntialias
+ )
+ return false;
+ std::list< int >::const_iterator lit, rit;
+Index: psprint/source/fontmanager/fontconfig.cxx
+===================================================================
+RCS file: /cvs/gsl/psprint/source/fontmanager/fontconfig.cxx,v
+retrieving revision 1.16
+retrieving revision 1.16.2.1
+diff -u -p -r1.16 -r1.16.2.1
+--- psprint/source/fontmanager/fontconfig.cxx 25 Jan 2006 11:35:42 -0000 1.16
++++ psprint/source/fontmanager/fontconfig.cxx 16 Feb 2006 13:23:32 -0000 1.16.2.1
+@@ -97,6 +97,7 @@ class FontCfgWrapper
+ FcResult (*m_pFcPatternGetBool)(const FcPattern*,const char*,int,FcBool*);
+ void (*m_pFcDefaultSubstitute)(FcPattern *);
+ FcPattern* (*m_pFcFontMatch)(FcConfig*,FcPattern*,FcResult*);
++ FcPattern* (*m_pFcFontSetMatch)(FcConfig*,FcFontSet**, int, FcPattern*,FcResult*);
+ FcBool (*m_pFcConfigSubstitute)(FcConfig*,FcPattern*,FcMatchKind);
+ FcBool (*m_pFcPatternAddInteger)(FcPattern*,const char*,int);
+ FcBool (*m_pFcPatternAddString)(FcPattern*,const char*,const FcChar8*);
+@@ -166,6 +167,8 @@ public:
+ { m_pFcDefaultSubstitute( pPattern ); }
+ FcPattern* FcFontMatch( FcConfig* pConfig, FcPattern* pPattern, FcResult* pResult )
+ { return m_pFcFontMatch( pConfig, pPattern, pResult ); }
++ FcPattern* FcFontSetMatch( FcConfig* pConfig, FcFontSet **ppFontSet, int nset, FcPattern* pPattern, FcResult* pResult )
++ { return m_pFcFontSetMatch ? m_pFcFontSetMatch( pConfig, ppFontSet, nset, pPattern, pResult ) : 0; }
+ FcBool FcConfigSubstitute( FcConfig* pConfig, FcPattern* pPattern, FcMatchKind eKind )
+ { return m_pFcConfigSubstitute( pConfig, pPattern, eKind ); }
+ FcBool FcPatternAddInteger( FcPattern* pPattern, const char* pObject, int nValue )
+@@ -238,6 +241,8 @@ FontCfgWrapper::FontCfgWrapper()
+ loadSymbol( "FcDefaultSubstitute" );
+ m_pFcFontMatch = (FcPattern*(*)(FcConfig*,FcPattern*,FcResult*))
+ loadSymbol( "FcFontMatch" );
++ m_pFcFontSetMatch = (FcPattern*(*)(FcConfig*,FcFontSet**,int,FcPattern*,FcResult*))
++ loadSymbol( "FcFontSetMatch" );
+ m_pFcConfigSubstitute = (FcBool(*)(FcConfig*,FcPattern*,FcMatchKind))
+ loadSymbol( "FcConfigSubstitute" );
+ m_pFcPatternAddInteger = (FcBool(*)(FcPattern*,const char*,int))
+@@ -307,6 +312,10 @@ void FontCfgWrapper::release()
+ }
+ }
+
++#ifndef FC_EMBEDDED_BITMAP
++#define FC_EMBEDDED_BITMAP "embeddedbitmap"
++#endif
++
+ /*
+ * PrintFontManager::initFontconfig
+ */
+@@ -346,7 +355,7 @@ bool PrintFontManager::initFontconfig()
+ int weight = 0;
+ int spacing = 0;
+ int nCollectionEntry = -1;
+- FcBool outline = false;
++ FcBool outline = false, embitmap = true, antialias = true;
+
+ FcResult eFileRes = rWrapper.FcPatternGetString( pFSet->fonts[i], FC_FILE, 0, &file );
+ FcResult eFamilyRes = rWrapper.FcPatternGetString( pFSet->fonts[i], FC_FAMILY, 0, &family );
+@@ -356,6 +365,24 @@ bool PrintFontManager::initFontconfig()
+ FcResult eSpacRes = rWrapper.FcPatternGetInteger( pFSet->fonts[i], FC_SPACING, 0, &spacing );
+ FcResult eOutRes = rWrapper.FcPatternGetBool( pFSet->fonts[i], FC_OUTLINE, 0, &outline );
+ FcResult eIndexRes = rWrapper.FcPatternGetInteger( pFSet->fonts[i], FC_INDEX, 0, &nCollectionEntry );
++
++ FcResult eEmbeddedBitmap = FcResultNoMatch;
++ FcResult eAntialias = FcResultNoMatch;
++
++ if (eFamilyRes == FcResultMatch)
++ {
++ FcPattern *pMatch = rWrapper.FcPatternCreate();
++ rWrapper.FcPatternAddString(pMatch, FC_FAMILY, family);
++ rWrapper.FcConfigSubstitute( NULL, pMatch, FcMatchPattern );
++ FcResult eResult;
++ if (FcPattern* pResult = rWrapper.FcFontSetMatch( NULL, &pFSet, 1, pMatch, &eResult ))
++ {
++ eEmbeddedBitmap = rWrapper.FcPatternGetBool( pResult, FC_EMBEDDED_BITMAP, 0, &embitmap );
++ eAntialias = rWrapper.FcPatternGetBool( pResult, FC_ANTIALIAS, 0, &antialias );
++ rWrapper.FcPatternDestroy(pResult);
++ }
++ rWrapper.FcPatternDestroy(pMatch);
++ }
+
+ if( eFileRes != FcResultMatch || eFamilyRes != FcResultMatch || eOutRes != FcResultMatch )
+ continue;
+@@ -491,6 +518,15 @@ bool PrintFontManager::initFontconfig()
+ {
+ pUpdate->m_aStyleName = OStringToOUString( OString( (sal_Char*)style ), RTL_TEXTENCODING_UTF8 );
+ }
++ if( eEmbeddedBitmap == FcResultMatch )
++ {
++ pUpdate->m_eEmbeddedbitmap = embitmap ? fcstatus::istrue : fcstatus::isfalse;
++ }
++ if( eAntialias == FcResultMatch )
++ {
++ pUpdate->m_eAntialias = antialias ? fcstatus::istrue : fcstatus::isfalse;
++ }
++
+
+ // update font cache
+ m_pFontCache->updateFontCacheEntry( pUpdate, false );
+Index: psprint/source/fontmanager/fontmanager.cxx
+===================================================================
+RCS file: /cvs/gsl/psprint/source/fontmanager/fontmanager.cxx,v
+retrieving revision 1.64
+retrieving revision 1.64.6.1
+diff -u -p -r1.64 -r1.64.6.1
+--- psprint/source/fontmanager/fontmanager.cxx 16 Jan 2006 12:54:13 -0000 1.64
++++ psprint/source/fontmanager/fontmanager.cxx 16 Feb 2006 13:23:33 -0000 1.64.6.1
+@@ -379,7 +379,9 @@ PrintFontManager::PrintFont::PrintFont(
+ m_nXMax( 0 ),
+ m_nYMax( 0 ),
+ m_bHaveVerticalSubstitutedGlyphs( false ),
+- m_bUserOverride( false )
++ m_bUserOverride( false ),
++ m_eEmbeddedbitmap( fcstatus::isunset ),
++ m_eAntialias( fcstatus::isunset )
+ {
+ }
+
+@@ -2591,6 +2593,8 @@ void PrintFontManager::fillPrintFontInfo
+ rInfo.m_eWeight = pFont->m_eWeight;
+ rInfo.m_ePitch = pFont->m_ePitch;
+ rInfo.m_aEncoding = pFont->m_aEncoding;
++ rInfo.m_eEmbeddedbitmap = pFont->m_eEmbeddedbitmap;
++ rInfo.m_eAntialias = pFont->m_eAntialias;
+ rInfo.m_aAliases.clear();
+ for( ::std::list< int >::iterator it = pFont->m_aAliases.begin(); it != pFont->m_aAliases.end(); ++it )
+ rInfo.m_aAliases.push_back( m_pAtoms->getString( ATOM_FAMILYNAME, *it ) );
+Index: vcl/inc/outfont.hxx
+===================================================================
+RCS file: /cvs/gsl/vcl/inc/outfont.hxx,v
+retrieving revision 1.19
+retrieving revision 1.19.108.1
+diff -u -p -r1.19 -r1.19.108.1
+--- vcl/inc/outfont.hxx 17 Oct 2005 14:49:15 -0000 1.19
++++ vcl/inc/outfont.hxx 16 Feb 2006 13:28:40 -0000 1.19.108.1
+@@ -112,20 +112,24 @@ public: // TODO: hide members behind acc
+ class ImplDevFontAttributes : public ImplFontAttributes
+ {
+ public: // TODO: create matching interface class
+- const String& GetAliasNames() const { return maMapNames; }
+- int GetQuality() const { return mnQuality; }
+- bool IsRotatable() const { return mbOrientation; }
+- bool IsDeviceFont() const { return mbDevice; }
+- bool IsEmbeddable() const { return mbEmbeddable; }
+- bool IsSubsettable() const { return mbSubsettable; }
++ const String& GetAliasNames() const { return maMapNames; }
++ int GetQuality() const { return mnQuality; }
++ bool IsRotatable() const { return mbOrientation; }
++ bool IsDeviceFont() const { return mbDevice; }
++ bool IsEmbeddable() const { return mbEmbeddable; }
++ bool IsSubsettable() const { return mbSubsettable; }
++ FontEmbeddedBitmap UseEmbeddedBitmap() const { return meEmbeddedBitmap; }
++ FontAntiAlias UseAntiAlias() const { return meAntiAlias; }
+
+ public: // TODO: hide members behind accessor methods
+- String maMapNames; // List of family name aliass separated with ';'
+- int mnQuality; // Quality (used when similar fonts compete)
+- bool mbOrientation; // true: physical font can be rotated
+- bool mbDevice; // true: built in font
+- bool mbSubsettable; // true: a subset of the font can be created
+- bool mbEmbeddable; // true: the font can be embedded
++ String maMapNames; // List of family name aliass separated with ';'
++ int mnQuality; // Quality (used when similar fonts compete)
++ bool mbOrientation; // true: physical font can be rotated
++ bool mbDevice; // true: built in font
++ bool mbSubsettable; // true: a subset of the font can be created
++ bool mbEmbeddable; // true: the font can be embedded
++ FontEmbeddedBitmap meEmbeddedBitmap; // whether the embedded bitmaps should be used
++ FontAntiAlias meAntiAlias; // whether the font should be antialiased
+ };
+
+ // ----------------
+Index: vcl/inc/vclenum.hxx
+===================================================================
+RCS file: /cvs/gsl/vcl/inc/vclenum.hxx,v
+retrieving revision 1.6
+retrieving revision 1.6.156.1
+diff -u -p -r1.6 -r1.6.156.1
+--- vcl/inc/vclenum.hxx 9 Sep 2005 11:34:53 -0000 1.6
++++ vcl/inc/vclenum.hxx 16 Feb 2006 13:28:41 -0000 1.6.156.1
+@@ -275,6 +275,20 @@ enum FontType { TYPE_DONTKNOW, TYPE_RAST
+
+ #endif
+
++#ifndef ENUM_FONTEMBEDDEDBITMAP_DECLARED
++#define ENUM_FONTEMBEDDEDBITMAP_DECLARED
++
++enum FontEmbeddedBitmap { EMBEDDEDBITMAP_DONTKNOW, EMBEDDEDBITMAP_FALSE, EMBEDDEDBITMAP_TRUE };
++
++#endif
++
++#ifndef ENUM_FONTANTIALIAS_DECLARED
++#define ENUM_FONTANTIALIAS_DECLARED
++
++enum FontAntiAlias { ANTIALIAS_DONTKNOW, ANTIALIAS_FALSE, ANTIALIAS_TRUE };
++
++#endif
++
+ // ------------------------------------------------------------
+
+ #ifndef ENUM_KEYFUNCTYPE_DECLARED
+
+
+Index: vcl/source/glyphs/gcach_ftyp.cxx
+===================================================================
+RCS file: /cvs/gsl/vcl/source/glyphs/gcach_ftyp.cxx,v
+retrieving revision 1.119
+retrieving revision 1.119.26.1
+diff -u -p -r1.119 -r1.119.26.1
+--- vcl/source/glyphs/gcach_ftyp.cxx 25 Jan 2006 11:39:36 -0000 1.119
++++ vcl/source/glyphs/gcach_ftyp.cxx 16 Feb 2006 13:28:41 -0000 1.119.26.1
+@@ -153,9 +153,9 @@ namespace { struct vclFontFileList : pub
+ // if (AA prio <= AH prio) => antialias + autohint
+ // if (AH<AA) => do not autohint when antialiasing
+ // if (EB<AH) => do not autohint for monochrome
+-static int nPrioEmbedded = 2;
+-static int nPrioAutoHint = 1;
+-static int nPrioAntiAlias = 1;
++static int nDefaultPrioEmbedded = 2;
++static int nDefaultPrioAutoHint = 1;
++static int nDefaultPrioAntiAlias = 1;
+
+ // =======================================================================
+ // FreetypeManager
+@@ -470,7 +470,7 @@ FreetypeManager::FreetypeManager()
+ // requested by env var below because it crashes StarOffice on RH9
+ // TODO: investigate
+ if( nFTVERSION == 2103 )
+- nPrioEmbedded = 0;
++ nDefaultPrioEmbedded = 0;
+
+ #else // RTLD_DEFAULT
+ // assume systems where dlsym is not possible use supplied library
+@@ -481,13 +481,13 @@ FreetypeManager::FreetypeManager()
+ char* pEnv;
+ pEnv = ::getenv( "SAL_EMBEDDED_BITMAP_PRIORITY" );
+ if( pEnv )
+- nPrioEmbedded = pEnv[0] - '0';
++ nDefaultPrioEmbedded = pEnv[0] - '0';
+ pEnv = ::getenv( "SAL_ANTIALIASED_TEXT_PRIORITY" );
+ if( pEnv )
+- nPrioAntiAlias = pEnv[0] - '0';
++ nDefaultPrioAntiAlias = pEnv[0] - '0';
+ pEnv = ::getenv( "SAL_AUTOHINTING_PRIORITY" );
+ if( pEnv )
+- nPrioAutoHint = pEnv[0] - '0';
++ nDefaultPrioAutoHint = pEnv[0] - '0';
+
+ InitGammaTable();
+ }
+@@ -593,6 +593,9 @@ long FreetypeManager::AddFontDir( const
+ aDFA.mbSubsettable= false;
+ aDFA.mbEmbeddable = false;
+
++ aDFA.meEmbeddedBitmap = EMBEDDEDBITMAP_DONTKNOW;
++ aDFA.meAntiAlias = ANTIALIAS_DONTKNOW;
++
+ FT_Done_Face( aFaceFT );
+ AddFontFile( aCFileName, nFaceNum, ++mnNextFontId, aDFA, NULL );
+ ++nCount;
+@@ -687,6 +690,7 @@ ImplFontEntry* ImplFTSFontData::CreateFo
+
+ FreetypeServerFont::FreetypeServerFont( const ImplFontSelectData& rFSD, FtFontInfo* pFI )
+ : ServerFont( rFSD ),
++ mnPrioEmbedded(nDefaultPrioEmbedded), mnPrioAntiAlias(nDefaultPrioAntiAlias),
+ mpFontInfo( pFI ),
+ maFaceFT( NULL ),
+ maSizeFT( NULL ),
+@@ -831,8 +835,13 @@ FreetypeServerFont::FreetypeServerFont(
+ mnLoadFlags |= FT_LOAD_NO_HINTING;
+ mnLoadFlags |= FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH; //#88334#
+
++ if (mpFontInfo->DontUseAntiAlias())
++ mnPrioAntiAlias = 0;
++ if (mpFontInfo->DontUseEmbeddedBitmaps())
++ mnPrioEmbedded = 0;
++
+ #if (FTVERSION >= 2005) || defined(TT_CONFIG_OPTION_BYTECODE_INTERPRETER)
+- if( nPrioAutoHint <= 0 )
++ if( nDefaultPrioAutoHint <= 0 )
+ #endif
+ mnLoadFlags |= FT_LOAD_NO_HINTING;
+
+@@ -842,7 +851,7 @@ FreetypeServerFont::FreetypeServerFont(
+ mnLoadFlags |= FT_LOAD_TARGET_LIGHT;
+ #endif
+
+- if( ((mnCos != 0) && (mnSin != 0)) || (nPrioEmbedded <= 0) )
++ if( ((mnCos != 0) && (mnSin != 0)) || (mnPrioEmbedded <= 0) )
+ mnLoadFlags |= FT_LOAD_NO_BITMAP;
+ }
+
+@@ -1273,7 +1282,7 @@ void FreetypeServerFont::InitGlyphData(
+
+ bool FreetypeServerFont::GetAntialiasAdvice( void ) const
+ {
+- if( GetFontSelData().mbNonAntialiased || (nPrioAntiAlias<=0) )
++ if( GetFontSelData().mbNonAntialiased || (mnPrioAntiAlias<=0) )
+ return false;
+ bool bAdviseAA = true;
+ // TODO: also use GASP info
+@@ -1298,11 +1307,11 @@ bool FreetypeServerFont::GetGlyphBitmap1
+ #if (FTVERSION >= 2002)
+ // for 0/90/180/270 degree fonts enable autohinting even if not advisable
+ // non-hinted and non-antialiased bitmaps just look too ugly
+- if( (mnCos==0 || mnSin==0) && (nPrioAutoHint > 0) )
++ if( (mnCos==0 || mnSin==0) && (nDefaultPrioAutoHint > 0) )
+ nLoadFlags &= ~FT_LOAD_NO_HINTING;
+ #endif
+
+- if( nPrioEmbedded <= nPrioAutoHint )
++ if( mnPrioEmbedded <= nDefaultPrioAutoHint )
+ nLoadFlags |= FT_LOAD_NO_BITMAP;
+
+ FT_Error rc = -1;
+@@ -1449,11 +1458,11 @@ bool FreetypeServerFont::GetGlyphBitmap8
+ // autohinting in FT<=2.0.4 makes antialiased glyphs look worse
+ nLoadFlags |= FT_LOAD_NO_HINTING;
+ #else
+- if( (nGlyphFlags & GF_UNHINTED) || (nPrioAutoHint < nPrioAntiAlias) )
++ if( (nGlyphFlags & GF_UNHINTED) || (nDefaultPrioAutoHint < mnPrioAntiAlias) )
+ nLoadFlags |= FT_LOAD_NO_HINTING;
+ #endif
+
+- if( nPrioEmbedded <= nPrioAntiAlias )
++ if( mnPrioEmbedded <= mnPrioAntiAlias )
+ nLoadFlags |= FT_LOAD_NO_BITMAP;
+
+ FT_Error rc = -1;
+Index: vcl/source/glyphs/gcach_ftyp.hxx
+===================================================================
+RCS file: /cvs/gsl/vcl/source/glyphs/gcach_ftyp.hxx,v
+retrieving revision 1.33
+retrieving revision 1.33.38.1
+diff -u -p -r1.33 -r1.33.38.1
+--- vcl/source/glyphs/gcach_ftyp.hxx 14 Dec 2005 09:12:02 -0000 1.33
++++ vcl/source/glyphs/gcach_ftyp.hxx 16 Feb 2006 13:28:42 -0000 1.33.38.1
+@@ -93,7 +93,10 @@ public:
+ int GetFaceNum() const { return mnFaceNum; }
+ int GetSynthetic() const { return mnSynthetic; }
+ int GetFontId() const { return mnFontId; }
+-
++ bool DontUseAntiAlias() const
++ { return maDevFontAttributes.UseAntiAlias() == ANTIALIAS_FALSE; }
++ bool DontUseEmbeddedBitmaps() const
++ { return maDevFontAttributes.UseEmbeddedBitmap() == EMBEDDEDBITMAP_FALSE; }
+ bool IsSymbolFont() const { return maDevFontAttributes.IsSymbolFont(); }
+ const ImplFontAttributes& GetFontAttributes() const { return maDevFontAttributes; }
+
+@@ -207,6 +210,8 @@ protected:
+
+ private:
+ int mnWidth;
++ int mnPrioEmbedded;
++ int mnPrioAntiAlias;
+ FtFontInfo* mpFontInfo;
+ FT_Int mnLoadFlags;
+ double mfStretch;
+
+Index: vcl/unx/source/gdi/pspgraphics.cxx
+===================================================================
+RCS file: /cvs/gsl/vcl/unx/source/gdi/pspgraphics.cxx,v
+retrieving revision 1.13
+retrieving revision 1.13.88.1
+diff -u -p -r1.13 -r1.13.88.1
+--- vcl/unx/source/gdi/pspgraphics.cxx 2 Nov 2005 13:34:27 -0000 1.13
++++ vcl/unx/source/gdi/pspgraphics.cxx 16 Feb 2006 13:28:43 -0000 1.13.88.1
+@@ -1226,6 +1226,32 @@ ImplDevFontAttributes PspGraphics::Info2
+ aDFA.mePitch = ToFontPitch (rInfo.m_ePitch);
+ aDFA.mbSymbolFlag = (rInfo.m_aEncoding == RTL_TEXTENCODING_SYMBOL);
+
++ switch (rInfo.m_eEmbeddedbitmap)
++ {
++ default:
++ aDFA.meEmbeddedBitmap = EMBEDDEDBITMAP_DONTKNOW;
++ break;
++ case psp::fcstatus::istrue:
++ aDFA.meEmbeddedBitmap = EMBEDDEDBITMAP_TRUE;
++ break;
++ case psp::fcstatus::isfalse:
++ aDFA.meEmbeddedBitmap = EMBEDDEDBITMAP_FALSE;
++ break;
++ }
++
++ switch (rInfo.m_eAntialias)
++ {
++ default:
++ aDFA.meAntiAlias = ANTIALIAS_DONTKNOW;
++ break;
++ case psp::fcstatus::istrue:
++ aDFA.meAntiAlias = ANTIALIAS_TRUE;
++ break;
++ case psp::fcstatus::isfalse:
++ aDFA.meAntiAlias = ANTIALIAS_FALSE;
++ break;
++ }
++
+ // special case for the ghostscript fonts
+ if( aDFA.maName.CompareIgnoreCaseToAscii( "itc ", 4 ) == COMPARE_EQUAL )
+ aDFA.maName = aDFA.maName.Copy( 4 );
+
+
+
+Index: vcl/unx/source/gdi/xlfd_extd.cxx
+===================================================================
+RCS file: /cvs/gsl/vcl/unx/source/gdi/xlfd_extd.cxx,v
+retrieving revision 1.25
+retrieving revision 1.25.90.1
+diff -u -p -r1.25 -r1.25.90.1
+--- vcl/unx/source/gdi/xlfd_extd.cxx 1 Nov 2005 10:40:06 -0000 1.25
++++ vcl/unx/source/gdi/xlfd_extd.cxx 16 Feb 2006 13:28:44 -0000 1.25.90.1
+@@ -113,6 +113,10 @@ ExtendedXlfd::ExtendedXlfd( bool bScalab
+ mbDevice = false;
+ mbSubsettable = false;
+ mbEmbeddable = false;
++
++ meEmbeddedBitmap = EMBEDDEDBITMAP_DONTKNOW;
++ meAntiAlias = ANTIALIAS_DONTKNOW;
++
+ mnQuality = -1;
+ }
+
+Index: vcl/win/source/gdi/salgdi3.cxx
+===================================================================
+RCS file: /cvs/gsl/vcl/win/source/gdi/salgdi3.cxx,v
+retrieving revision 1.75
+retrieving revision 1.75.10.1
+diff -u -p -r1.75 -r1.75.10.1
+--- vcl/win/source/gdi/salgdi3.cxx 27 Jan 2006 13:50:33 -0000 1.75
++++ vcl/win/source/gdi/salgdi3.cxx 16 Feb 2006 13:28:45 -0000 1.75.10.1
+@@ -407,7 +407,10 @@ static ImplDevFontAttributes WinFont2Dev
+ || aDFA.maName.EqualsAscii( "ZapfChancery" )
+ || aDFA.maName.EqualsAscii( "ZapfDingbats" ) )
+ aDFA.mnQuality += 500;
+- }
++ }
++
++ aDFA.meEmbeddedBitmap = EMBEDDEDBITMAP_DONTKNOW;
++ aDFA.meAntiAlias = ANTIALIAS_DONTKNOW;
+
+ // TODO: add alias names
+
+@@ -488,6 +491,9 @@ static ImplDevFontAttributes WinFont2Dev
+ aDFA.mnQuality += 500;
+ }
+
++ aDFA.meEmbeddedBitmap = EMBEDDEDBITMAP_DONTKNOW;
++ aDFA.meAntiAlias = ANTIALIAS_DONTKNOW;
++
+ // TODO: add alias names
+ return aDFA;
+ }
+@@ -1870,6 +1876,8 @@ bool WinSalGraphics::AddTempDevFont( Imp
+ aDFA.mePitch = PITCH_DONTKNOW;;
+ aDFA.mbSubsettable= false;
+ aDFA.mbEmbeddable = false;
++ aDFA.meEmbeddedBitmap = EMBEDDEDBITMAP_DONTKNOW;
++ aDFA.meAntiAlias = ANTIALIAS_DONTKNOW;
+
+ /*
+ // TODO: improve ImplDevFontAttributes using "FONTRES:" from *.fot file
diff --git a/patches/src680/vcl-freetype-2.2.x-2.0.2.diff b/patches/src680/vcl-freetype-2.2.x-2.0.2.diff
new file mode 100644
index 000000000..d3c4ea694
--- /dev/null
+++ b/patches/src680/vcl-freetype-2.2.x-2.0.2.diff
@@ -0,0 +1,83 @@
+--- vcl/source/glyphs/gcach_ftyp.cxx.ark 2006-05-17 20:01:52.000000000 +0200
++++ vcl/source/glyphs/gcach_ftyp.cxx 2006-05-17 23:13:07.000000000 +0200
+@@ -91,21 +91,25 @@
+ #define strncasecmp strnicmp
+ #endif
+
+-#include "freetype/internal/ftobjs.h"
+-#include "freetype/internal/sfnt.h"
+-#include "freetype/internal/ftstream.h"
+-
+ #include <svapp.hxx>
+ #include <settings.hxx>
+ #include <tools/lang.hxx>
+
+-#if defined( FT_NEXT_SHORT ) && !defined( NEXT_Short )
+-// Account for differing versions of freetype...
+-#define NEXT_Short( x ) FT_NEXT_SHORT( x )
+-#define NEXT_UShort( x ) FT_NEXT_USHORT( x )
+-#define NEXT_Long( x ) FT_NEXT_LONG( x )
+-#define NEXT_ULong( x ) FT_NEXT_ULONG( x )
+-#endif
++#define NEXT_Short( x ) \
++ ( x += 2, \
++ ( (short)( (signed char)x[-2] << 8 ) | \
++ (unsigned char)x[-1] ) )
++
++#define NEXT_UShort( x ) ( (unsigned short)NEXT_Short( x ) )
++
++#define NEXT_Long( x ) \
++ ( x += 4, \
++ ( ( (long)(signed char)x[-4] << 24 ) | \
++ ( (long)(unsigned char)x[-3] << 16 ) | \
++ ( (long)(unsigned char)x[-2] << 8 ) | \
++ (long)(unsigned char)x[-1] ) )
++
++#define NEXT_ULong( x ) ( (unsigned long)NEXT_Long( x ) )
+
+ static FT_Library aLibFT = 0;
+
+@@ -2074,7 +2078,16 @@
+ // TODO: wait till all compilers accept that calling conventions
+ // for functions are the same independent of implementation constness,
+ // then uncomment the const-tokens in the function interfaces below
+-static int FT_move_to( FT_Vector* /*const*/ p0, void* vpPolyArgs )
++//
++// Starting with FreeType 2.2, the const-ness is actually needed - it has
++// been added to the function definitions and a cast from const to non-const
++// is never explicit.
++#if FTVERSION >= 2200
++#define FT_CONST const
++#else
++#define FT_CONST
++#endif
++static int FT_move_to( FT_Vector FT_CONST* p0, void* vpPolyArgs )
+ {
+ PolyArgs& rA = *reinterpret_cast<PolyArgs*>(vpPolyArgs);
+
+@@ -2085,14 +2098,14 @@
+ return 0;
+ }
+
+-static int FT_line_to( FT_Vector* /*const*/ p1, void* vpPolyArgs )
++static int FT_line_to( FT_Vector FT_CONST* p1, void* vpPolyArgs )
+ {
+ PolyArgs& rA = *reinterpret_cast<PolyArgs*>(vpPolyArgs);
+ rA.AddPoint( p1->x, p1->y, POLY_NORMAL );
+ return 0;
+ }
+
+-static int FT_conic_to( FT_Vector* /*const*/ p1, FT_Vector* /*const*/ p2, void* vpPolyArgs )
++static int FT_conic_to( FT_Vector FT_CONST* p1, FT_Vector FT_CONST* p2, void* vpPolyArgs )
+ {
+ PolyArgs& rA = *reinterpret_cast<PolyArgs*>(vpPolyArgs);
+
+@@ -2109,7 +2122,7 @@
+ return 0;
+ }
+
+-static int FT_cubic_to( FT_Vector* /*const*/ p1, FT_Vector* /*const*/ p2, FT_Vector* /*const*/ p3, void* vpPolyArgs )
++static int FT_cubic_to( FT_Vector FT_CONST* p1, FT_Vector FT_CONST* p2, FT_Vector FT_CONST* p3, void* vpPolyArgs )
+ {
+ PolyArgs& rA = *reinterpret_cast<PolyArgs*>(vpPolyArgs);
+ rA.AddPoint( p1->x, p1->y, POLY_CONTROL );
diff --git a/patches/src680/vcl-gnome-screensaver-poke.diff b/patches/src680/vcl-gnome-screensaver-poke.diff
new file mode 100644
index 000000000..63aa8411d
--- /dev/null
+++ b/patches/src680/vcl-gnome-screensaver-poke.diff
@@ -0,0 +1,242 @@
+--- vcl/unx/gtk/a11y/makefile.mk.orig 2006-05-26 12:26:01.000000000 +0200
++++ vcl/unx/gtk/a11y/makefile.mk 2006-05-26 12:26:30.000000000 +0200
+@@ -59,7 +59,11 @@ dummy:
+
+ .IF "$(ENABLE_GTK)" != ""
+
+-PKGCONFIG_MODULES=gtk+-2.0
++.IF "$(ENABLE_DBUS)" == "YES"
++CDEFS+= -DENABLE_DBUS
++.ENDIF
++
++PKGCONFIG_MODULES=gtk+-2.0 $(DBUS_PACKAGE)
+ .INCLUDE : pkg_config.mk
+
+ CFLAGS+=-DVERSION=\"$(UPD)$(LAST_MINOR)\"
+diff -rup ../src680-m165-orig/vcl/unx/gtk/app/makefile.mk vcl/unx/gtk/app/makefile.mk
+--- ../src680-m165-orig/vcl/unx/gtk/app/makefile.mk 2005-09-09 14:36:54.000000000 +0200
++++ vcl/unx/gtk/app/makefile.mk 2006-05-25 09:22:07.000000000 +0200
+@@ -58,7 +58,11 @@ dummy:
+
+ .IF "$(ENABLE_GTK)" != ""
+
+-PKGCONFIG_MODULES=gtk+-2.0
++.IF "$(ENABLE_DBUS)" == "YES"
++CDEFS+= -DENABLE_DBUS
++.ENDIF
++
++PKGCONFIG_MODULES=gtk+-2.0 $(DBUS_PACKAGE)
+ .INCLUDE : pkg_config.mk
+
+ SLOFILES=\
+diff -rup ../src680-m165-orig/vcl/unx/gtk/gdi/makefile.mk vcl/unx/gtk/gdi/makefile.mk
+--- ../src680-m165-orig/vcl/unx/gtk/gdi/makefile.mk 2005-09-09 14:37:10.000000000 +0200
++++ vcl/unx/gtk/gdi/makefile.mk 2006-05-25 09:22:07.000000000 +0200
+@@ -55,7 +55,11 @@ dummy:
+
+ .IF "$(ENABLE_GTK)" != ""
+
+-PKGCONFIG_MODULES=gtk+-2.0
++.IF "$(ENABLE_DBUS)" == "YES"
++CDEFS+= -DENABLE_DBUS
++.ENDIF
++
++PKGCONFIG_MODULES=gtk+-2.0 $(DBUS_PACKAGE)
+ .INCLUDE : pkg_config.mk
+
+ SLOFILES=\
+diff -rup ../src680-m165-orig/vcl/unx/gtk/window/gtkframe.cxx vcl/unx/gtk/window/gtkframe.cxx
+--- ../src680-m165-orig/vcl/unx/gtk/window/gtkframe.cxx 2006-05-25 10:55:26.000000000 +0200
++++ vcl/unx/gtk/window/gtkframe.cxx 2006-05-25 10:38:25.000000000 +0200
+@@ -66,6 +66,10 @@
+
+ using namespace com::sun::star;
+
++#ifdef ENABLE_DBUS
++#include <dbus/dbus-glib-lowlevel.h>
++#endif
++
+ int GtkSalFrame::m_nFloats = 0;
+
+ static USHORT GetKeyModCode( guint state )
+@@ -491,6 +493,10 @@ void GtkSalFrame::InitCommon()
+ m_hBackgroundPixmap = None;
+ m_nSavedScreenSaverTimeout = 0;
+ m_nExtStyle = 0;
++#ifdef ENABLE_DBUS
++ m_nGnomeScreenSaverPokeTimeoutId = 0;
++ m_pDBusConnection = NULL;
++#endif
+
+ gtk_widget_set_app_paintable( GTK_WIDGET(m_pWindow), TRUE );
+ gtk_widget_set_double_buffered( GTK_WIDGET(m_pWindow), FALSE );
+@@ -1559,6 +1563,44 @@ void GtkSalFrame::setAutoLock( bool bLoc
+ sizeof( nMessage ) );
+ }
+
++#ifdef ENABLE_DBUS
++#define GS_SERVICE "org.gnome.ScreenSaver"
++#define GS_PATH "/org/gnome/ScreenSaver"
++#define GS_INTERFACE "org.gnome.ScreenSaver"
++
++static gboolean
++pokeGnomeScreenSaver( gpointer data )
++{
++ DBusConnection *pConnection = (DBusConnection*) data;
++ DBusMessage *pMessage;
++ DBusError pError;
++
++ g_return_val_if_fail( pConnection != NULL, FALSE );
++
++ dbus_error_init( &pError );
++
++ pMessage = dbus_message_new_method_call (GS_SERVICE, GS_PATH, GS_INTERFACE, "Poke");
++ if( pMessage == NULL ) {
++ OSL_TRACE( "Couldn't allocate the dbus message" );
++ return FALSE;
++ }
++
++ if( !dbus_connection_send( pConnection, pMessage, NULL ) )
++ OSL_TRACE( "could not send dbus message" );
++
++ dbus_connection_flush( pConnection );
++
++ dbus_message_unref( pMessage );
++
++ if( dbus_error_is_set( &pError ) )
++ dbus_error_free( &pError );
++
++ OSL_TRACE( "Poke message sent" );
++
++ return TRUE;
++}
++#endif
++
+ void GtkSalFrame::StartPresentation( BOOL bStart )
+ {
+ Display *pDisplay = GDK_DISPLAY_XDISPLAY( getGdkDisplay() );
+@@ -1571,6 +1611,7 @@ void GtkSalFrame::StartPresentation( BOO
+ &bPreferBlanking, &bAllowExposures );
+ if( bStart )
+ {
++ /* disable X server built-in screensaver */
+ if ( nTimeout )
+ {
+ m_nSavedScreenSaverTimeout = nTimeout;
+@@ -1578,14 +1619,55 @@ void GtkSalFrame::StartPresentation( BOO
+ XSetScreenSaver( pDisplay, 0, nInterval,
+ bPreferBlanking, bAllowExposures );
+ }
++
++#ifdef ENABLE_DBUS
++ /* setup 30 seconds timeout to poke gnome-screensaver thru DBus connection */
++ if( !m_pDBusConnection ) {
++ DBusError pDBusError;
++
++ OSL_TRACE( "trying to create dbus connection" );
++
++ dbus_error_init( &pDBusError );
++ m_pDBusConnection = dbus_bus_get( DBUS_BUS_SESSION, &pDBusError );
++
++ if( dbus_error_is_set( &pDBusError ) )
++ dbus_error_free( &pDBusError );
++
++ if( m_pDBusConnection ) {
++ dbus_connection_setup_with_g_main( m_pDBusConnection, NULL );
++ OSL_TRACE( "dbus connection created" );
++
++ /* poke the screensaver now so that it doesn't kick in in the first 30 seconds of slideshow */
++ pokeGnomeScreenSaver( m_pDBusConnection );
++ }
++ }
++
++ if( m_pDBusConnection )
++ m_nGnomeScreenSaverPokeTimeoutId = g_timeout_add( 30000, pokeGnomeScreenSaver, m_pDBusConnection );
++#endif
+ }
+ else
+ {
++ /* restore X server built-in screensaver settings */
+ if( m_nSavedScreenSaverTimeout )
+ XSetScreenSaver( pDisplay, m_nSavedScreenSaverTimeout,
+ nInterval, bPreferBlanking,
+ bAllowExposures );
+ m_nSavedScreenSaverTimeout = 0;
++
++#ifdef ENABLE_DBUS
++ /* remove timeout for poking gnome-screensaver */
++ if( m_nGnomeScreenSaverPokeTimeoutId ) {
++ g_source_remove( m_nGnomeScreenSaverPokeTimeoutId );
++ m_nGnomeScreenSaverPokeTimeoutId = 0;
++ OSL_TRACE( "screensaver poking timeout removed" );
++
++ dbus_connection_disconnect( m_pDBusConnection );
++ dbus_connection_unref( m_pDBusConnection );
++ m_pDBusConnection = NULL;
++ OSL_TRACE( "dbus connection disconnected and unrefed" );
++ }
++#endif
+ }
+ }
+
+diff -rup ../src680-m165-orig/vcl/unx/gtk/window/makefile.mk vcl/unx/gtk/window/makefile.mk
+--- ../src680-m165-orig/vcl/unx/gtk/window/makefile.mk 2005-09-09 14:38:24.000000000 +0200
++++ vcl/unx/gtk/window/makefile.mk 2006-05-25 09:22:07.000000000 +0200
+@@ -58,7 +58,11 @@ dummy:
+
+ .IF "$(ENABLE_GTK)" != ""
+
+-PKGCONFIG_MODULES=gtk+-2.0
++.IF "$(ENABLE_DBUS)" == "YES"
++CDEFS+= -DENABLE_DBUS
++.ENDIF
++
++PKGCONFIG_MODULES=gtk+-2.0 $(DBUS_PACKAGE)
+ .INCLUDE : pkg_config.mk
+
+ SLOFILES=\
+diff -rup ../src680-m165-orig/vcl/unx/inc/plugins/gtk/gtkframe.hxx vcl/unx/inc/plugins/gtk/gtkframe.hxx
+--- ../src680-m165-orig/vcl/unx/inc/plugins/gtk/gtkframe.hxx 2006-05-25 10:55:26.000000000 +0200
++++ vcl/unx/inc/plugins/gtk/gtkframe.hxx 2006-05-25 09:22:07.000000000 +0200
+@@ -46,6 +46,12 @@
+ #include <com/sun/star/uno/Reference.hxx>
+ #include <com/sun/star/accessibility/XAccessible.hdl>
+
++#ifdef ENABLE_DBUS
++#define DBUS_API_SUBJECT_TO_CHANGE
++#include <dbus/dbus.h>
++#include <dbus/dbus-glib.h>
++#endif
++
+ #ifndef _SV_SALFRAME_HXX
+ #include <salframe.hxx>
+ #endif
+@@ -201,6 +205,11 @@ class GtkSalFrame : public SalFrame
+ Size m_aMaxSize;
+ Size m_aMinSize;
+ Rectangle m_aRestorePosSize;
++
++#ifdef ENABLE_DBUS
++ DBusConnection *m_pDBusConnection;
++ guint m_nGnomeScreenSaverPokeTimeoutId;
++#endif
+
+ void Init( SalFrame* pParent, ULONG nStyle );
+ void Init( SystemParentData* pSysData );
+diff -rup ../src680-m165-orig/vcl/util/makefile.mk vcl/util/makefile.mk
+--- ../src680-m165-orig/vcl/util/makefile.mk 2006-05-25 10:55:26.000000000 +0200
++++ vcl/util/makefile.mk 2006-05-25 09:22:07.000000000 +0200
+@@ -352,7 +352,11 @@ SHL3STDLIBS=\
+
+ # gtk plugin
+ .IF "$(ENABLE_GTK)" != ""
+-PKGCONFIG_MODULES=gtk+-2.0 gthread-2.0
++.IF "$(ENABLE_DBUS)" == "YES"
++CDEFS+= -DENABLE_DBUS
++.ENDIF
++
++PKGCONFIG_MODULES=gtk+-2.0 gthread-2.0 $(DBUS_PACKAGE)
+ .INCLUDE: pkg_config.mk
+
+ LIB4TARGET=$(SLB)$/igtk_plug_
+
diff --git a/patches/src680/win32-activex-disable.diff b/patches/src680/win32-activex-disable.diff
new file mode 100644
index 000000000..a7de1f1ee
--- /dev/null
+++ b/patches/src680/win32-activex-disable.diff
@@ -0,0 +1,278 @@
+--- config_office/configure.in Wed May 3 15:15:00 2006
++++ /mnt/pippi/src/2.0.2/build/OOO_2_0_2/config_office/configure.in Wed May 3 14:38:03 2006
+@@ -74,4 +74,8 @@
+ set.
+ ],,with_agfa_monotype_fonts="yes")
++AC_ARG_ENABLE(activex,
++[ --disable-activex Remove support for ActiveX embedding of
++ OOo components
++],,enable_activex=yes)
+ AC_ARG_ENABLE(epm,
+ [ --disable-epm OO.o includes self-packaging code, that requires
+@@ -4268,6 +4272,19 @@
+ fi
+ AC_SUBST(WITH_AGFA_MONOTYPE_FONTS)
+-
+ AC_SUBST(SCPDEFS)
++
++if test "$_os" = "WINNT"; then
++ AC_MSG_CHECKING([whether to enable ActiveX embedding of OOo components])
++ if test "$enable_activex" = "yes" -o "$enable_activex" = "TRUE" -o "$enable_activex" = ""; then
++ ENABLE_ACTIVEX="TRUE"
++ AC_MSG_RESULT([yes])
++ SCPDEFS="$SCPDEFS -DWITH_ACTIVEX"
++ else
++ ENABLE_ACTIVEX=""
++ AC_MSG_RESULT([no])
++ fi
++ AC_SUBST(ENABLE_ACTIVEX)
++ AC_SUBST(SCPDEFS)
++fi
+
+ AC_MSG_CHECKING([whether to include PPDs])
+--- scp2/source/activex/file_activex.scp Thu Oct 27 17:08:13 2005
++++ /mnt/pippi/src/2.0.2/build/OOO_2_0_2/scp2/source/activex/file_activex.scp Wed May 3 14:24:12 2006
+@@ -36,4 +36,6 @@
+ #include "macros.inc"
+
++#ifdef WITH_ACTIVEX
++
+ File gid_File_Lib_Soactivex
+ TXT_FILE_BODY;
+@@ -50,2 +52,3 @@
+ End
+
++#endif // WITH_ACTIVEX
+--- scp2/source/activex/module_activex.scp Fri Sep 9 04:17:32 2005
++++ /mnt/pippi/src/2.0.2/build/OOO_2_0_2/scp2/source/activex/module_activex.scp Wed May 3 14:24:29 2006
+@@ -36,4 +36,6 @@
+ #include "macros.inc"
+
++#ifdef WITH_ACTIVEX
++
+ Module gid_Module_Optional_Activexcontrol
+ MOD_NAME_DESC ( MODULE_OPTIONAL_ACTIVEXCONTROL );
+@@ -43,2 +45,4 @@
+ Files = (gid_File_Lib_Soactivex, gid_File_Lib_Regactivex_Msi);
+ End
++
++#endif // WITH_ACTIVEX
+--- scp2/source/calc/registryitem_calc.scp Thu Nov 10 18:18:08 2005
++++ /mnt/pippi/src/2.0.2/build/OOO_2_0_2/scp2/source/calc/registryitem_calc.scp Wed May 3 14:25:20 2006
+@@ -36,4 +36,6 @@
+ #include "macros.inc"
+
++#ifdef WITH_ACTIVEX
++
+ // MSOLE embedded object in SO7 file format
+ RegistryItem gid_Regitem_Clsid__7b342dc4_139a_4a46_8a93_Db0827ccee9c_
+@@ -272,4 +274,6 @@
+ End
+
++#endif // WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Sdc_Contenttype
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -359,4 +363,6 @@
+ End
+
++#ifdef WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Soffice_Starcalcdocument_6_Clsid
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -366,4 +372,6 @@
+ End
+
++#endif // WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Soffice_Starcalcdocument_6_Defaulticon
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -688,4 +696,6 @@
+ End
+
++#ifdef WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Openoffice_Calcdocument_1_Clsid
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -694,4 +704,6 @@
+ Value = "{7FA8AE11-B3E3-4D88-AABF-255526CD1CE8}";
+ End
++
++#endif // WITH_ACTIVEX
+
+ RegistryItem gid_Regitem_Openoffice_Calcdocument_1_Defaulticon
+--- scp2/source/draw/registryitem_draw.scp Thu Nov 10 18:18:21 2005
++++ /mnt/pippi/src/2.0.2/build/OOO_2_0_2/scp2/source/draw/registryitem_draw.scp Wed May 3 14:25:46 2006
+@@ -36,4 +36,6 @@
+ #include "macros.inc"
+
++#ifdef WITH_ACTIVEX
++
+ // MSOLE embedded object in SO7 file format
+ RegistryItem gid_Regitem_Clsid__41662fc2_0d57_4aff_Ab27_Ad2e12e7c273_
+@@ -272,5 +274,5 @@
+ End
+
+-
++#endif // WITH_ACTIVEX
+
+ RegistryItem gid_Regitem_Sda_Contenttype
+@@ -361,4 +363,6 @@
+ End
+
++#ifdef WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Soffice_Stardrawdocument_6_Clsid
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -368,4 +372,6 @@
+ End
+
++#endif // WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Soffice_Stardrawdocument_6_Defaulticon
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -690,4 +696,6 @@
+ End
+
++#ifdef WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Openoffice_Drawdocument_1_Clsid
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -696,4 +704,6 @@
+ Value = "{448BB771-CFE2-47C4-BCDF-1FBF378E202C}";
+ End
++
++#endif // WITH_ACTIVEX
+
+ RegistryItem gid_Regitem_Openoffice_Drawdocument_1_Defaulticon
+--- scp2/source/impress/registryitem_impress.scp Thu Nov 10 18:18:33 2005
++++ /mnt/pippi/src/2.0.2/build/OOO_2_0_2/scp2/source/impress/registryitem_impress.scp Wed May 3 14:26:13 2006
+@@ -36,4 +36,6 @@
+ #include "macros.inc"
+
++#ifdef WITH_ACTIVEX
++
+ // MSOLE embedded object in SO7 file format
+ RegistryItem gid_Regitem_Clsid__E5a0b632_Dfba_4549_9346_E414da06e6f8_
+@@ -272,5 +274,5 @@
+ End
+
+-
++#endif // WITH_ACTIVEX
+
+ RegistryItem gid_Regitem_Sdd_Contenttype
+@@ -377,4 +379,6 @@
+ End
+
++#ifdef WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Soffice_Starimpressdocument_6_Clsid
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -384,4 +388,6 @@
+ End
+
++#endif // WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Soffice_Starimpressdocument_6_Defaulticon
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -727,4 +733,6 @@
+ End
+
++#ifdef WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Openoffice_Impressdocument_1_Clsid
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -733,4 +741,6 @@
+ Value = "{EE5D1EA4-D445-4289-B2FC-55FC93693917}";
+ End
++
++#endif // WITH_ACTIVEX
+
+ RegistryItem gid_Regitem_Openoffice_Impressdocument_1_Defaulticon
+--- scp2/source/math/registryitem_math.scp Thu Nov 10 18:18:46 2005
++++ /mnt/pippi/src/2.0.2/build/OOO_2_0_2/scp2/source/math/registryitem_math.scp Wed May 3 14:26:36 2006
+@@ -35,4 +35,6 @@
+ #include "macros.inc"
+
++#ifdef WITH_ACTIVEX
++
+ // MSOLE embedded object in SO7 file format
+ RegistryItem gid_Regitem_Clsid__D0484de6_Aaee_468a_991f_8d4b0737b57a_
+@@ -271,5 +273,5 @@
+ End
+
+-
++#endif // WITH_ACTIVEX
+
+ RegistryItem gid_Regitem_Smf_Contenttype
+@@ -360,4 +362,6 @@
+ End
+
++#ifdef WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Soffice_Starmathdocument_6_Clsid
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -367,4 +371,6 @@
+ End
+
++#endif // WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Soffice_Starmathdocument_6_Defaulticon
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -582,4 +588,6 @@
+ End
+
++#ifdef WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Openoffice_Mathdocument_1_Clsid
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -588,4 +596,6 @@
+ Value = "{D2D59CD1-0A6A-4D36-AE20-47817077D57C}";
+ End
++
++#endif // WITH_ACTIVEX
+
+ RegistryItem gid_Regitem_Openoffice_Mathdocument_1_Defaulticon
+--- scp2/source/writer/registryitem_writer.scp Thu Nov 10 18:19:00 2005
++++ /mnt/pippi/src/2.0.2/build/OOO_2_0_2/scp2/source/writer/registryitem_writer.scp Wed May 3 14:27:50 2006
+@@ -36,4 +36,6 @@
+ #include "macros.inc"
+
++#ifdef WITH_ACTIVEX
++
+ // MSOLE embedded object in SO7 file format
+ RegistryItem gid_Regitem_Clsid__30a2652a_Ddf7_45e7_Aca6_3eab26fc8a4e_
+@@ -272,4 +274,5 @@
+ End
+
++#endif // WITH_ACTIVEX
+
+ RegistryItem gid_Regitem_Sdw_Contenttype
+@@ -376,4 +379,6 @@
+ End
+
++#ifdef WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Soffice_Starwriterdocument_6_Clsid
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -383,4 +388,6 @@
+ End
+
++#endif // WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Soffice_Starwriterdocument_6_Defaulticon
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -882,4 +889,6 @@
+ End
+
++#ifdef WITH_ACTIVEX
++
+ RegistryItem gid_Regitem_Openoffice_Writerdocument_1_Clsid
+ ParentID = PREDEFINED_HKEY_CLASSES_ROOT;
+@@ -888,4 +897,6 @@
+ Value = "{F616B81F-7BB8-4F22-B8A5-47428D59F8AD}";
+ End
++
++#endif // WITH_ACTIVEX
+
+ RegistryItem gid_Regitem_Openoffice_Writerdocument_1_Defaulticon
diff --git a/patches/src680/win32-multi-lang-installer.diff b/patches/src680/win32-multi-lang-installer.diff
new file mode 100644
index 000000000..edc23a3ba
--- /dev/null
+++ b/patches/src680/win32-multi-lang-installer.diff
@@ -0,0 +1,826 @@
+--- ../../../2.0.2-pristine/build/OOO_2_0_2/scp2/source/ooo/file_library_ooo.scp 2006-06-02 13:06:38.003914500 +0000
++++ scp2/source/ooo/file_library_ooo.scp 2006-05-31 16:15:01.893875000 +0000
+@@ -2414,3 +2425,13 @@
+ End
+
+
++#ifdef WNT
++
++File gid_File_Lib_sellangmsi
++ TXT_FILE_BODY;
++ Styles = (PACKED, BINARYTABLE, BINARYTABLE_ONLY);
++ Dir = gid_Dir_Program;
++ Name = "sellangmsi.dll";
++End
++
++#endif
+--- ../../../2.0.2-pristine/build/OOO_2_0_2/scp2/source/ooo/windowscustomaction_ooo.scp 2006-02-16 14:16:57.000000000 +0000
++++ scp2/source/ooo/windowscustomaction_ooo.scp 2006-06-02 08:03:48.643875000 +0000
+@@ -316,3 +316,12 @@
+ Assignment1 = ("InstallExecuteSequence", "Not REMOVE=\"ALL\" And Not PATCH", "CostInitialize");
+ Assignment2 = ("InstallUISequence", "Not REMOVE=\"ALL\" And Not PATCH", "CostInitialize");
+ End
++
++WindowsCustomAction gid_Customaction_SelectLanguage
++ Name = "SelectLanguage";
++ Typ = "321";
++ Source = "sellangmsi.dll";
++ Target = "SelectLanguage";
++ Inbinarytable = 1;
++ Assignment1 = ("ControlEvent", "SetupType", "Next", "DoAction", "SelectLanguage", "1", "1");
++End
+--- ../../../2.0.2-pristine/build/OOO_2_0_2/setup_native/prj/build.lst 2006-02-16 14:15:43.000000000 +0000
++++ setup_native/prj/build.lst 2006-05-31 12:16:31.550125000 +0000
+@@ -5,6 +5,7 @@
+ pk setup_native\source\win32\customactions\regactivex nmake - w sn_regactivex NULL
+ pk setup_native\source\win32\customactions\reg4msdoc nmake - w sn_reg4msdoc NULL
+ pk setup_native\source\win32\customactions\regpython nmake - w sn_regpython NULL
++pk setup_native\source\win32\customactions\sellang nmake - w sn_sellang NULL
+ pk setup_native\source\win32\customactions\javafilter nmake - w sn_javafilter NULL
+ pk setup_native\source\win32\customactions\quickstarter nmake - w sn_quickstarter NULL
+ pk setup_native\source\win32\customactions\shellextensions nmake - w sn_shellextensions NULL
+--- /dev/null
++++ setup_native/source/win32/customactions/sellang/exports.dxp 2006-05-31 12:15:54.268875000 +0000
+@@ -0,0 +1 @@
++SelectLanguage
+--- /dev/null
++++ setup_native/source/win32/customactions/sellang/makefile.mk 2006-05-31 12:13:28.331375000 +0000
+@@ -0,0 +1,86 @@
++#*************************************************************************
++#
++# OpenOffice.org - a multi-platform office productivity suite
++#
++# $RCSfile$
++#
++# $Revision$
++#
++# last change: $Author$ $Date$
++#
++# The Contents of this file are made available subject to
++# the terms of GNU Lesser General Public License Version 2.1.
++#
++#
++# GNU Lesser General Public License Version 2.1
++# =============================================
++# Copyright 2005 by Sun Microsystems, Inc.
++# 901 San Antonio Road, Palo Alto, CA 94303, USA
++#
++# This library is free software; you can redistribute it and/or
++# modify it under the terms of the GNU Lesser General Public
++# License version 2.1, as published by the Free Software Foundation.
++#
++# This library is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# Lesser General Public License for more details.
++#
++# You should have received a copy of the GNU Lesser General Public
++# License along with this library; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++#*************************************************************************
++
++PRJ=..$/..$/..$/..
++PRJNAME=setup_native
++TARGET=sellangmsi
++
++.IF "$(GUI)"=="WNT"
++
++# --- Settings -----------------------------------------------------
++
++ENABLE_EXCEPTIONS=TRUE
++NO_DEFAULT_STL=TRUE
++DYNAMIC_CRT=
++USE_DEFFILE=TRUE
++
++.INCLUDE : settings.mk
++
++CFLAGS+=-D_STLP_USE_STATIC_LIB
++
++# --- Files --------------------------------------------------------
++
++UWINAPILIB=
++
++SLOFILES = \
++ $(SLO)$/sellang.obj
++
++SHL1STDLIBS= kernel32.lib\
++ user32.lib\
++ advapi32.lib\
++ shell32.lib\
++ msi.lib\
++ $(LIBSTLPORTST)
++
++SHL1LIBS = $(SLB)$/$(TARGET).lib
++
++SHL1TARGET = $(TARGET)
++SHL1IMPLIB = i$(TARGET)
++
++SHL1DEF = $(MISC)$/$(SHL1TARGET).def
++SHL1DEPN = $(SLB)$/$(TARGET).lib
++SHL1BASE = 0x1c000000
++DEF1NAME=$(SHL1TARGET)
++DEF1EXPORTFILE=exports.dxp
++
++# --- Targets --------------------------------------------------------------
++
++.INCLUDE : target.mk
++
++# -------------------------------------------------------------------------
++
++
++.ENDIF
++
+--- /dev/null
++++ setup_native/source/win32/customactions/sellang/sellang.cxx 2006-06-02 09:13:53.893875000 +0000
+@@ -0,0 +1,261 @@
++/*************************************************************************
++ *
++ * OpenOffice.org - a multi-platform office productivity suite
++ *
++ * $RCSfile$
++ *
++ * $Revision$
++ *
++ * last change: $Author$ $Date$
++ *
++ * The Contents of this file are made available subject to
++ * the terms of GNU Lesser General Public License Version 2.1.
++ *
++ *
++ * GNU Lesser General Public License Version 2.1
++ * =============================================
++ * Copyright 2005 by Sun Microsystems, Inc.
++ * 901 San Antonio Road, Palo Alto, CA 94303, USA
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License version 2.1, as published by the Free Software Foundation.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ *
++ ************************************************************************/
++
++#define WIN32_LEAN_AND_MEAN
++#define _WIN32_WINNT 0x0500
++#define WINVER 0x0500
++
++#include <windows.h>
++#include <msiquery.h>
++#include <malloc.h>
++
++#ifdef UNICODE
++#define _UNICODE
++#define _tstring wstring
++#else
++#define _tstring string
++#endif
++#include <tchar.h>
++#include <string>
++#include <stdio.h>
++
++#include <systools/win32/uwinapi.h>
++
++static const char *
++langid_to_string( LANGID langid, int *have_default_lang )
++{
++ /* Map from LANGID to string. Same order as in
++ * setup_native/source/win32/msi-encodinglist.txt.
++ */
++ switch (langid) {
++#define CASE(primary, sub, name) \
++ case MAKELANGID(LANG_##primary, SUBLANG_##sub): return #name
++
++ case MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT): if (have_default_lang) *have_default_lang = 1; return "en-US";
++ case MAKELANGID(LANG_SERBIAN, 0x05): return "bs";
++ CASE(PORTUGUESE, PORTUGUESE, pt);
++ CASE(RUSSIAN, DEFAULT, ru);
++ CASE(GREEK, DEFAULT, el);
++ CASE(DUTCH, DEFAULT, nl);
++ CASE(FRENCH, DEFAULT, fr);
++ CASE(FRENCH, FRENCH_CANADIAN, fr-CA);
++ CASE(SPANISH, DEFAULT, es);
++ CASE(FINNISH, DEFAULT, fi);
++ CASE(HUNGARIAN, DEFAULT, hu);
++ CASE(CATALAN, DEFAULT, ca);
++ CASE(ITALIAN, DEFAULT, it);
++ CASE(CZECH, DEFAULT, cs);
++ CASE(SLOVAK, DEFAULT, sk);
++ CASE(ENGLISH, ENGLISH_UK, en-GB);
++ CASE(ENGLISH, ENGLISH_SOUTH_AFRICA, en-ZA);
++ CASE(DANISH, DEFAULT, da);
++ CASE(SWEDISH, DEFAULT, sv);
++ CASE(NORWEGIAN, NORWEGIAN_BOKMAL, nb);
++ CASE(NORWEGIAN, NORWEGIAN_NYNORSK, nn);
++ CASE(POLISH, DEFAULT, pl);
++ CASE(GERMAN, DEFAULT, de);
++ CASE(PORTUGUESE, PORTUGUESE_BRAZILIAN, pt-BR);
++ CASE(THAI, DEFAULT, th);
++ CASE(ESTONIAN, DEFAULT, et);
++ CASE(JAPANESE, DEFAULT, ja);
++ CASE(KOREAN, DEFAULT, ko);
++ // CASE(KHMER, DEFAULT, km);
++ // CASE(WELSH, DEFAULT, cy);
++ CASE(CHINESE, CHINESE_SIMPLIFIED, zh-CN);
++ CASE(CHINESE, CHINESE_TRADITIONAL, zh-TW);
++ CASE(TURKISH, DEFAULT, tr);
++ CASE(HINDI, DEFAULT, hi-IN);
++ CASE(PUNJABI, DEFAULT, pa-IN);
++ CASE(TAMIL, DEFAULT, ta-IN);
++ CASE(ARABIC, DEFAULT, ar);
++ CASE(HEBREW, DEFAULT, he);
++ CASE(AFRIKAANS, DEFAULT, af);
++ CASE(ALBANIAN, DEFAULT, sq);
++ CASE(ARMENIAN, DEFAULT, hy);
++ CASE(BASQUE, DEFAULT, eu);
++ CASE(BELARUSIAN, DEFAULT, be-BY);
++ case MAKELANGID(LANG_BENGALI, 0x02): return "bn-BD";
++ CASE(BENGALI, DEFAULT, bn-IN);
++ CASE(BULGARIAN, DEFAULT, bg);
++ CASE(ICELANDIC, DEFAULT, is);
++ CASE(INDONESIAN, DEFAULT, id);
++ // CASE(LAO, DEFAULT, lo);
++ CASE(LATVIAN, DEFAULT, lv);
++ CASE(LITHUANIAN, DEFAULT, lt);
++ // CASE(MALTESE, DEFAULT, mt);
++ CASE(MARATHI, DEFAULT, mr);
++ // CASE(ROMANSH, DEFAULT, rm);
++ CASE(ROMANIAN, DEFAULT, ro);
++ // CASE(KINYARWANDA, DEFAULT, rw);
++ CASE(SANSKRIT, DEFAULT, sa);
++ // CASE(SERBIAN, SERBIAN_CYRILLIC, sr-SP);
++ // CASE(SETSWANA, DEFAULT, tn);
++ CASE(SERBIAN, DEFAULT, hr);
++ CASE(FARSI, DEFAULT, fa);
++ CASE(FAEROESE, DEFAULT, fo);
++ CASE(SLOVENIAN, DEFAULT, sl);
++ // CASE(SORBIAN, DEFAULT, sb);
++ // CASE(SUTU, DEFAULT, st);
++ CASE(SWAHILI, DEFAULT, sw-TZ); // MSFT says Kenya, but OOo has Tanzania
++ CASE(TATAR, DEFAULT, tt);
++ // CASE(TSONGA, DEFAULT, ts);
++ CASE(UKRAINIAN, DEFAULT, uk);
++ CASE(URDU, DEFAULT, ur);
++ CASE(VIETNAMESE, DEFAULT, vi);
++ // CASE(XHOSA, DEFAULT, xh);
++ // CASE(SOTHO, DEFAULT, ns);
++ // CASE(YIDDISH, DEFAULT, yi);
++ // CASE(ZULU, DEFAULT, zu);
++ CASE(GUJARATI, DEFAULT, gu-IN);
++ // CASE(BRETON, DEFAULT, br);
++ CASE(ORIYA, DEFAULT, or);
++ CASE(NEPALI, DEFAULT, ne);
++ CASE(SERBIAN, SERBIAN_LATIN, sh-YU);
++ CASE(SERBIAN, SERBIAN_CYRILLIC, sr-CS);
++ // CASE(NDEBELE, DEFAULT, nr);
++ // CASE(SWAZI, DEFAULT, ss);
++ // CASE(SOTHO, SOTHO_SOUTHERN, st);
++ // CASE(VENDA, DEFAULT, ve);
++ // CASE(IRISH, DEFAULT, ga);
++ CASE(MACEDONIAN, DEFAULT, mk);
++ CASE(GALICIAN, DEFAULT, gl);
++ CASE(KANNADA, DEFAULT, kn);
++ CASE(MALAY, DEFAULT, ms);
++#undef CASE
++ default: return "";
++ }
++}
++
++extern "C" UINT __stdcall SelectLanguage( MSIHANDLE handle )
++{
++ // char tem[200];
++ char feature[100];
++ MSIHANDLE database, view, record;
++ DWORD length;
++ int nlangs = 0;
++ /* Keeping this code simple and stupid... won't bother with any
++ * dynamic arrays or whatnot. 100 is more than enough for this purpose.
++ */
++ char langs[100][6];
++
++ database = MsiGetActiveDatabase(handle);
++
++ if (MsiDatabaseOpenViewA(database, "SELECT Feature from Feature", &view) != ERROR_SUCCESS) {
++ MsiCloseHandle(database);
++ return ERROR_SUCCESS;
++ }
++
++ // MessageBoxA(NULL, "MsiDatabaseOpenViewA success!", "SelectLanguage", MB_OK);
++
++ if (MsiViewExecute(view, NULL) != ERROR_SUCCESS) {
++ MsiCloseHandle(view);
++ MsiCloseHandle(database);
++ return ERROR_SUCCESS;
++ }
++
++ // MessageBoxA(NULL, "MsiViewExecute success!", "SelectLanguage", MB_OK);
++
++ while (MsiViewFetch(view, &record) == ERROR_SUCCESS) {
++ length = sizeof(feature);
++ if (MsiRecordGetStringA(record, 1, feature, &length) != ERROR_SUCCESS) {
++ MsiCloseHandle(record);
++ MsiCloseHandle(view);
++ MsiCloseHandle(database);
++ return ERROR_SUCCESS;
++ }
++
++ /* Keep track of what languages are included in this installer, if
++ * it is a multilangiage one.
++ */
++ if (strncmp (feature, "gm_Dynamic_Language_", strlen ("gm_Dynamic_Language_")) == 0 &&
++ strcmp(feature, "gm_Dynamic_Language_TOP") != 0 &&
++ strcmp(feature, "gm_Dynamic_Language_en-US") != 0 &&
++ strlen(feature) <= strlen("gm_Dynamic_Language_xx-XX"))
++ strcpy(langs[nlangs++], feature + strlen("gm_Dynamic_Language_"));
++
++ MsiCloseHandle(record);
++ }
++
++ MsiCloseHandle(view);
++
++ if (nlangs > 0) {
++ /* Deselect those languages that don't match the system
++ * default UI language.
++ */
++
++ int i;
++ int have_system_default_lang = 0;
++ const char *system_default_lang = langid_to_string(GetSystemDefaultUILanguage(), &have_system_default_lang);
++ const char *user_locale_lang = langid_to_string(LANGIDFROMLCID(GetThreadLocale()), NULL);
++
++ // sprintf(tem, "GetSystemDefaultUILanguage(): %#x = %s", GetSystemDefaultUILanguage(), system_default_lang);
++ // MessageBoxA(NULL, tem, "SelectLanguage", MB_OK);
++
++ /* If one of the alternative languages in a multi-language installer
++ * is the system default UI language, deselect the other languages.
++ */
++ if (system_default_lang[0]) {
++ for (i = 0; i < nlangs; i++) {
++ if (strcmp (system_default_lang, langs[i]) == 0) {
++ // sprintf(tem, "We have the system default language %s in the installer", system_default_lang);
++ // MessageBoxA(NULL, tem, "SelectLanguage", MB_OK);
++ have_system_default_lang = 1;
++ }
++ }
++ }
++
++ if (have_system_default_lang) {
++ for (i = 0; i < nlangs; i++) {
++ if (strcmp(system_default_lang, langs[i]) != 0 &&
++ strcmp(user_locale_lang, langs[i]) != 0) {
++ UINT rc;
++ sprintf(feature, "gm_Dynamic_Language_%s", langs[i]);
++ rc = MsiSetFeatureStateA(handle, feature, INSTALLSTATE_ABSENT);
++ if (rc != ERROR_SUCCESS) {
++ // sprintf(tem, "MsiSetFeatureStateA %s failed: %d", feature, rc);
++ // MessageBoxA(NULL, tem, "SelectLanguage", MB_OK);
++ } else {
++ // sprintf(tem, "MsiSetFeatureStateA %s OK!", feature);
++ // MessageBoxA(NULL, tem, "SelectLanguage", MB_OK);
++ }
++ }
++ }
++ }
++ }
++
++ MsiCloseHandle(database);
++
++ return ERROR_SUCCESS;
++}
+--- /cygdrive/c/src/2.0.2-pristine/build/OOO_2_0_2/instsetoo_native/inc_openoffice/windows/msi_languages/Langpack.ulf 2006-01-05 14:51:00.000000000 +0000
++++ instsetoo_native/inc_openoffice/windows/msi_languages/Langpack.ulf 2006-06-07 14:57:37.346875000 +0000
+@@ -321,3 +321,244 @@
+ [OOO_LANGPACK_DESC_1121]
+ en-US = "Installs Nepali support in %PRODUCTNAME %PRODUCTVERSION"
+ de = "Nepali"
++
++[OOO_LANGPACK_NAME_1025]
++en-US = "Arabic"
++de = "Arabisch"
++
++[OOO_LANGPACK_DESC_1025]
++en-US = "Installs Arabic support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Arabisch"
++
++[OOO_LANGPACK_NAME_1029]
++en-US = "Catalan"
++de = "Katalanisch"
++
++[OOO_LANGPACK_DESC_1029]
++en-US = "Installs Catalan support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Katalanisch"
++
++[OOO_LANGPACK_NAME_1030]
++en-US = "Danish"
++de = "Dänisch"
++
++[OOO_LANGPACK_DESC_1030]
++en-US = "Installs Danish support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Dänisch"
++
++[OOO_LANGPACK_NAME_1035]
++en-US = "Finnish"
++de = "Finnisch"
++
++[OOO_LANGPACK_DESC_1035]
++en-US = "Installs Finnish support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Finnisch"
++
++[OOO_LANGPACK_NAME_1037]
++en-US = "Hebrew"
++de = "Hebräisch"
++
++[OOO_LANGPACK_DESC_1037]
++en-US = "Installs Hebrew support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Hebräisch"
++
++[OOO_LANGPACK_NAME_1039]
++en-US = "Icelandic"
++de = "Isländisch"
++
++[OOO_LANGPACK_DESC_1039]
++en-US = "Installs Icelandic support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Isländisch"
++
++[OOO_LANGPACK_NAME_1044]
++en-US = "Norwegian (Bokmål)"
++de = "Norwegisch (Bokmål)"
++
++[OOO_LANGPACK_DESC_1044]
++en-US = "Installs Norwegian (Bokmål) support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Norwegisch (Bokmål)"
++
++[OOO_LANGPACK_NAME_1047]
++en-US = "Raeto-Romance"
++de = "Rätoromanisch"
++
++[OOO_LANGPACK_DESC_1047]
++en-US = "Installs Raeto-Romance support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Rätoromanisch"
++
++[OOO_LANGPACK_NAME_1048]
++en-US = "Romanian"
++de = "Rumänisch"
++
++[OOO_LANGPACK_DESC_1048]
++en-US = "Installs Romanian support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Rumänisch"
++
++[OOO_LANGPACK_NAME_1052]
++en-US = "Albanian"
++de = "Albanisch"
++
++[OOO_LANGPACK_DESC_1052]
++en-US = "Installs Albanian support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Albanisch"
++
++[OOO_LANGPACK_NAME_1054]
++en-US = "Thai"
++de = "Thailändisch"
++
++[OOO_LANGPACK_DESC_1054]
++en-US = "Installs Thai support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Thailändisch"
++
++[OOO_LANGPACK_NAME_1055]
++en-US = "Turkish"
++de = "Türkisch"
++
++[OOO_LANGPACK_DESC_1055]
++en-US = "Installs Turkish support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Türkisch"
++
++[OOO_LANGPACK_NAME_1056]
++en-US = "Urdu"
++de = "Urdu"
++
++[OOO_LANGPACK_DESC_1056]
++en-US = "Installs Urdu support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Urdu"
++
++[OOO_LANGPACK_NAME_1057]
++en-US = "Indonesian"
++de = "Indonesisch"
++
++[OOO_LANGPACK_DESC_1057]
++en-US = "Installs Indonesian support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Indonesisch"
++
++[OOO_LANGPACK_NAME_1058]
++en-US = "Ukrainian"
++de = "Ukrainisch"
++
++[OOO_LANGPACK_DESC_1058]
++en-US = "Installs Ukrainian support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Ukrainisch"
++
++[OOO_LANGPACK_NAME_1059]
++en-US = "Belarusian"
++de = "Belarussisch"
++
++[OOO_LANGPACK_DESC_1059]
++en-US = "Installs Belarusian support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Belarusian"
++
++[OOO_LANGPACK_NAME_1060]
++en-US = "Slovenian"
++de = "Slowenisch"
++
++[OOO_LANGPACK_DESC_1060]
++en-US = "Installs Slovenian support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Slowenisch"
++
++[OOO_LANGPACK_NAME_1062]
++en-US = "Latvian"
++de = "Lettisch"
++
++[OOO_LANGPACK_DESC_1062]
++en-US = "Installs Latvian support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Lettisch"
++
++[OOO_LANGPACK_NAME_1063]
++en-US = "Lithuanian"
++de = "Litauisch"
++
++[OOO_LANGPACK_DESC_1063]
++en-US = "Installs Lithuanian support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Litauisch"
++
++[OOO_LANGPACK_NAME_1067]
++en-US = "Armenian"
++de = "Armenisch"
++
++[OOO_LANGPACK_DESC_1067]
++en-US = "Installs Armenian support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Armenisch"
++
++[OOO_LANGPACK_NAME_1069]
++en-US = "Basque"
++de = "Baskisch"
++
++[OOO_LANGPACK_DESC_1069]
++en-US = "Installs Basque support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Baskisch"
++
++[OOO_LANGPACK_NAME_1071]
++en-US = "Macedonian"
++de = "Mazedonisch"
++
++[OOO_LANGPACK_DESC_1071]
++en-US = "Installs Macedonian support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Mazedonisch"
++
++[OOO_LANGPACK_NAME_1082]
++en-US = "Maltese"
++de = "Maltesisch"
++
++[OOO_LANGPACK_DESC_1082]
++en-US = "Installs Maltese support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Maltesisch"
++
++[OOO_LANGPACK_NAME_1102]
++en-US = "Marathi"
++de = "Marathi"
++
++[OOO_LANGPACK_DESC_1102]
++en-US = "Installs Marathi support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Marathi"
++
++[OOO_LANGPACK_NAME_1106]
++en-US = "Welsh"
++de = "Walisisch"
++
++[OOO_LANGPACK_DESC_1106]
++en-US = "Installs Welsh support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Walisisch"
++
++[OOO_LANGPACK_NAME_1110]
++en-US = "Galician"
++de = "Galicisch"
++
++[OOO_LANGPACK_DESC_1110]
++en-US = "Installs Galician support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Galicisch"
++
++[OOO_LANGPACK_NAME_2068]
++en-US = "Norwegian (Nynorsk)"
++de = "Norwegisch (Nynorsk)"
++
++[OOO_LANGPACK_DESC_2068]
++en-US = "Installs Norwegian (Nynorsk) support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Norwegisch (Nynorsk)"
++
++[OOO_LANGPACK_NAME_2074]
++en-US = "Serbian (Latin)"
++de = "Serbisch (Latinisch)"
++
++[OOO_LANGPACK_DESC_2074]
++en-US = "Installs Serbian (Latin) support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Serbisch (Latinisch)"
++
++[OOO_LANGPACK_NAME_2108]
++en-US = "Irish"
++de = "Irisch"
++
++[OOO_LANGPACK_DESC_2108]
++en-US = "Installs Irish support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Irisch"
++
++[OOO_LANGPACK_NAME_3098]
++en-US = "Serbian (Cyrillic)"
++de = "Serbisch (Kyrillisch)"
++
++[OOO_LANGPACK_DESC_3098]
++en-US = "Installs Serbian (Cyrillic) support in %PRODUCTNAME %PRODUCTVERSION"
++de = "Serbisch (Kyrillisch)"
++
+--- /cygdrive/c/src/2.0.2-pristine/build/OOO_2_0_2/config_office/configure.in 2006-06-02 13:07:07.207039500 +0000
++++ config_office/configure.in 2006-06-06 09:00:38.128125000 +0000
+@@ -473,6 +473,13 @@
+
+ Usage: --with-lang="es sw tu cs sk"
+ ],,)
++AC_ARG_WITH(poor-help-localizations,
++[ --with-poor-help-localizations Use this option to specify which languages
++ have unusable help localizations. Separate
++ multiple languages with space.
++
++ Usage: --with-poor-help-localizations="af ar be-BY ca cy fi"
++],,)
+ AC_ARG_WITH(dict,
+ [ --with-dict Use this option to build OpenOffice.org with
+ dictionary support. ALL dictionaries are always
+@@ -4484,6 +4491,15 @@
+ fi
+ AC_SUBST(WITH_LANG)
+
++AC_MSG_CHECKING([which languages have poor help localizations])
++WITH_POOR_HELP_LOCALIZATIONS="$with_poor_help_localizations"
++if test -z "$WITH_POOR_HELP_LOCALIZATIONS"; then
++ AC_MSG_RESULT([none])
++else
++ AC_MSG_RESULT([$WITH_POOR_HELP_LOCALIZATIONS])
++fi
++AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
++
+ AC_MSG_CHECKING([which dictionaries to include])
+ if test -z "$with_dict"; then
+ WITH_DICT=,ALL,
+--- /cygdrive/c/src/2.0.2-pristine/build/OOO_2_0_2/config_office/set_soenv.in 2006-06-02 13:07:07.238289500 +0000
++++ config_office/set_soenv.in 2006-06-06 09:00:38.159375000 +0000
+@@ -1476,6 +1476,7 @@
+ }
+ # Languages
+ ToFile( "WITH_LANG", "@WITH_LANG@", "e" );
++ToFile( "WITH_POOR_HELP_LOCALIZATIONS", "@WITH_POOR_HELP_LOCALIZATIONS@", "e" );
+
+ ToFile( "CALL_CDECL", $CALL_CDECL, "e" );
+ ToFile( "COMMON_OUTDIR", $COMMON_OUTDIR, "e" );
+--- /cygdrive/c/src/2.0.2-pristine/build/OOO_2_0_2/scp2/macros/macro.pl 2005-09-09 01:16:18.000000000 +0000
++++ scp2/macros/macro.pl 2006-06-06 12:01:38.659375000 +0000
+@@ -42,6 +42,12 @@
+ exit 1;
+ }
+
++my $poorhelplocalizations_var = $ENV{WITH_POOR_HELP_LOCALIZATIONS};
++my %poorhelplocalizations;
++foreach $lang (split (/ /, $poorhelplocalizations_var)) {
++ $poorhelplocalizations{$lang}++;
++}
++
+ startup_check();
+ if ( "$completelangiso_var" eq "$lastcompletelangiso_var" ) {
+ print STDERR "No new languages. Keeping old file\n";
+@@ -61,6 +67,7 @@
+ write_DIR_ISOLANGUAGE_ALL_LANG();
+ write_DIR_IDENT_ALL_LANG();
+ write_EXTRA_ALL_LANG();
++write_EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG();
+ write_EXTRA_IDENT_ALL_LANG();
+ write_RESFILE_ALL_LANG();
+ write_SHORT_RESFILE_ALL_LANG();
+@@ -130,6 +137,19 @@
+ print OUTFILE "\n\n";
+ }
+
++sub write_EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG
++{
++ my $first = 1;
++ print OUTFILE "#define EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG(name) ";
++ foreach $lang (@completelangiso) {
++ next if ( $poorhelplocalizations{$lang} );
++ print OUTFILE ";" unless $first;
++ $first = 0;
++ print OUTFILE "\\\n\tName ($lang) = EXTRAFILENAME(name,_$lang)";
++ }
++ print OUTFILE "\n\n";
++}
++
+ sub write_EXTRA_IDENT_ALL_LANG
+ {
+ print OUTFILE "#define EXTRA_IDENT_ALL_LANG(name) ";
+--- /cygdrive/c/src/2.0.2-pristine/build/OOO_2_0_2/scp2/source/base/file_base.scp 2006-02-10 11:48:24.000000000 +0000
++++ scp2/source/base/file_base.scp 2006-06-05 20:18:39.737500000 +0000
+@@ -68,7 +68,7 @@
+ File gid_File_Help_Sdatabase_Zip
+ Dir = gid_Dir_Help_Isolanguage;
+ ARCHIVE_TXT_FILE_BODY_PATCH;
+- EXTRA_ALL_LANG(sdatabase);
++ EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG(sdatabase);
+ Patchfiles = ("sdatabase.db",
+ "sdatabase.ht",
+ "sdatabase.jar",
+--- /cygdrive/c/src/2.0.2-pristine/build/OOO_2_0_2/scp2/source/calc/file_calc.scp 2006-02-10 11:48:40.000000000 +0000
++++ scp2/source/calc/file_calc.scp 2006-06-05 20:18:50.221875000 +0000
+@@ -82,7 +82,7 @@
+ File gid_File_Help_Scalc_Zip
+ Dir = gid_Dir_Help_Isolanguage;
+ ARCHIVE_TXT_FILE_BODY_PATCH;
+- EXTRA_ALL_LANG(scalc);
++ EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG(scalc);
+ Patchfiles = ("scalc.db",
+ "scalc.ht",
+ "scalc.jar",
+--- /cygdrive/c/src/2.0.2-pristine/build/OOO_2_0_2/scp2/source/draw/file_draw.scp 2006-02-10 11:48:53.000000000 +0000
++++ scp2/source/draw/file_draw.scp 2006-06-05 20:19:05.331250000 +0000
+@@ -47,7 +47,7 @@
+ File gid_File_Help_Sdraw_Zip
+ Dir = gid_Dir_Help_Isolanguage;
+ ARCHIVE_TXT_FILE_BODY_PATCH;
+- EXTRA_ALL_LANG(sdraw);
++ EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG(sdraw);
+ Patchfiles = ("sdraw.db",
+ "sdraw.ht",
+ "sdraw.jar",
+--- /cygdrive/c/src/2.0.2-pristine/build/OOO_2_0_2/scp2/source/impress/file_impress.scp 2006-02-10 11:49:08.000000000 +0000
++++ scp2/source/impress/file_impress.scp 2006-06-05 20:19:18.596875000 +0000
+@@ -58,7 +58,7 @@
+ Dir = gid_Dir_Help_Isolanguage;
+ TXT_FILE_BODY;
+ Styles = (ARCHIVE,DONT_OVERWRITE,PATCH);
+- EXTRA_ALL_LANG(simpress);
++ EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG(simpress);
+ Patchfiles = ("simpress.db",
+ "simpress.ht",
+ "simpress.jar",
+--- /cygdrive/c/src/2.0.2-pristine/build/OOO_2_0_2/scp2/source/math/file_math.scp 2006-02-10 12:42:16.000000000 +0000
++++ scp2/source/math/file_math.scp 2006-06-05 20:19:37.221875000 +0000
+@@ -82,7 +82,7 @@
+ File gid_File_Help_Smath_Zip
+ Dir = gid_Dir_Help_Isolanguage;
+ ARCHIVE_TXT_FILE_BODY_PATCH;
+- EXTRA_ALL_LANG(smath);
++ EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG(smath);
+ Patchfiles=("smath.ht");
+ End
+
+--- /cygdrive/c/src/2.0.2-pristine/build/OOO_2_0_2/scp2/source/ooo/file_ooo.scp 2006-06-02 13:05:20.847664500 +0000
++++ scp2/source/ooo/file_ooo.scp 2006-06-06 08:58:54.425000000 +0000
+@@ -581,7 +581,7 @@
+ File gid_File_Help_Common_Zip
+ Dir = gid_Dir_Help_Isolanguage;
+ ARCHIVE_TXT_FILE_BODY_PATCH;
+- EXTRA_ALL_LANG(shared);
++ EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG(shared);
+ Patchfiles = ("shared.db",
+ "shared.ht",
+ "shared.jar",
+@@ -599,7 +599,7 @@
+ File gid_File_Help_Sbasic_Zip
+ Dir = gid_Dir_Help_Isolanguage;
+ ARCHIVE_TXT_FILE_BODY_PATCH;
+- EXTRA_ALL_LANG(sbasic);
++ EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG(sbasic);
+ Patchfiles = ("sbasic.db",
+ "sbasic.ht",
+ "sbasic.jar",
+@@ -619,7 +619,7 @@
+ File gid_File_Help_Schart_Zip
+ Dir = gid_Dir_Help_Isolanguage;
+ ARCHIVE_TXT_FILE_BODY_PATCH;
+- EXTRA_ALL_LANG(schart);
++ EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG(schart);
+ End
+
+ #endif
+--- /cygdrive/c/src/2.0.2-pristine/build/OOO_2_0_2/scp2/source/writer/file_writer.scp 2006-02-10 11:49:54.000000000 +0000
++++ scp2/source/writer/file_writer.scp 2006-06-05 20:07:17.346875000 +0000
+@@ -79,7 +79,7 @@
+ File gid_File_Help_Swriter_Zip
+ Dir = gid_Dir_Help_Isolanguage;
+ ARCHIVE_TXT_FILE_BODY_PATCH;
+- EXTRA_ALL_LANG(swriter);
++ EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG(swriter);
+ Patchfiles = ("swriter.db",
+ "swriter.ht",
+ "swriter.jar",
+
diff --git a/patches/src680/wizard-evo-local.diff b/patches/src680/wizard-evo-local.diff
index 6b03892c6..f66b301e3 100644
--- a/patches/src680/wizard-evo-local.diff
+++ b/patches/src680/wizard-evo-local.diff
@@ -66,7 +66,7 @@ diff -u -p -u -r1.54 abspilot.src
RadioButton RB_THUNDERBIRD
{
Pos = MAP_APPFONT ( 15, 79 ) ;
-@@ -145,6 +146,22 @@ TabPage RID_PAGE_SELECTABTYPE
+@@ -145,6 +146,29 @@ TabPage RID_PAGE_SELECTABTYPE
Text [ de ] = "Evolution";
Text [ en-US ] = "Evolution";
};
@@ -83,8 +83,15 @@ diff -u -p -u -r1.54 abspilot.src
+ Pos = MAP_APPFONT ( 15, 90 ) ;
+ Size = MAP_APPFONT ( WINDOW_SIZE_X - 30, 8 ) ;
+
-+ Text [ de ] = "Evolution LDAP";
+ Text [ en-US ] = "Evolution LDAP";
++ Text[ de ] = "Evolution: LDAP";
++ Text[ es ] = "LDAP de Evolution";
++ Text[ fr ] = "LDAP Evolution";
++ Text[ it ] = "LDAP Evolution";
++ Text[ ja ] = "Evolution LDAP ";
++ Text[ pt-BR ] = "LDAP do Evolution";
++ Text[ zh-CN ] = "Evolution LDAP";
++ Text[ zh-TW ] = "Evolution LDAP";
+ };
RadioButton RB_KAB
{
diff --git a/patches/test/ooxml-filter.diff b/patches/test/ooxml-filter.diff
new file mode 100644
index 000000000..8406c0889
--- /dev/null
+++ b/patches/test/ooxml-filter.diff
@@ -0,0 +1,61 @@
+--- /dev/null 2006-04-07 20:25:18.000000000 +0100
++++ filter/source/config/fragments/filters/OfficeOpen.xcu 2006-04-19 13:57:17.000000000 +0100
+@@ -0,0 +1,13 @@
++ <node oor:name="Office Open XML" oor:op="replace">
++ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE</value></prop>
++ <prop oor:name="UIComponent"/>
++ <prop oor:name="FilterService"/>
++ <prop oor:name="UserData"><value></value></prop>
++ <prop oor:name="FileFormatVersion"><value>6800</value></prop>
++ <prop oor:name="Type"><value>calc_OfficeOpen</value></prop>
++ <prop oor:name="TemplateName"/>
++ <prop oor:name="DocumentService"><value>com.sun.star.sheet.SpreadsheetDocument</value></prop>
++ <prop oor:name="UIName">
++ <value xml:lang="x-default">ECMA Office Open</value>
++ </prop>
++ </node>
+--- /dev/null 2006-04-07 20:25:18.000000000 +0100
++++ filter/source/config/fragments/types/calc_OfficeOpen.xcu 2006-04-19 13:55:29.000000000 +0100
+@@ -0,0 +1,12 @@
++ <node oor:name="calc_OfficeOpen" oor:op="replace">
++ <prop oor:name="DetectService"><value>com.sun.star.comp.calc.FormatDetector</value></prop>
++ <prop oor:name="URLPattern"/>
++ <prop oor:name="Extensions"><value>xlsx</value></prop>
++ <prop oor:name="MediaType"><value>application/vnd.ms-excel-FIXME</value></prop>
++ <prop oor:name="Preferred"><value>false</value></prop>
++ <prop oor:name="PreferredFilter"><value>Office Open XML</value></prop>
++ <prop oor:name="UIName">
++ <value>ECMA Office Open</value>
++ </prop>
++ <prop oor:name="ClipboardFormat"><value>OfficeOpen</value></prop>
++ </node>
+Index: sc/source/ui/docshell/docsh.cxx
+===================================================================
+RCS file: /cvs/sc/sc/source/ui/docshell/docsh.cxx,v
+retrieving revision 1.83
+diff -u -p -u -r1.83 docsh.cxx
+--- sc/source/ui/docshell/docsh.cxx 27 Jan 2006 15:51:57 -0000 1.83
++++ sc/source/ui/docshell/docsh.cxx 20 Apr 2006 10:51:09 -0000
+@@ -185,6 +185,7 @@ static const sal_Char __FAR_DATA pFilter
+ static const sal_Char __FAR_DATA pFilterHtml[] = "HTML (StarCalc)";
+ static const sal_Char __FAR_DATA pFilterHtmlWebQ[] = "calc_HTML_WebQuery";
+ static const sal_Char __FAR_DATA pFilterRtf[] = "Rich Text Format (StarCalc)";
++static const sal_Char __FAR_DATA pFilterOOXml[] = "ooxml";
+
+ //----------------------------------------------------------------------
+
+@@ -886,6 +888,14 @@ BOOL __EXPORT ScDocShell::ConvertFrom( S
+ bSetColWidths = TRUE;
+ bSetRowHeights = TRUE;
+ }
++ else if (aFltName.EqualsAscii(pFilterOOXml))
++ {
++ fprintf (stderr, "Load OO.o XML\n");
++ ScColumn::bDoubleAlloc = TRUE;
++ FltError eError = ScImportECMA( rMedium, &aDocument);
++ ScColumn::bDoubleAlloc = FALSE;
++ bRet = TRUE;
++ }
+ else if ( aFltName.EqualsAscii(pFilterExcel4) || aFltName.EqualsAscii(pFilterExcel5) ||
+ aFltName.EqualsAscii(pFilterExcel95) || aFltName.EqualsAscii(pFilterExcel97) ||
+ aFltName.EqualsAscii(pFilterEx4Temp) || aFltName.EqualsAscii(pFilterEx5Temp) ||
diff --git a/patches/test/sc-source-filter-ecma-ecma-cxx.diff b/patches/test/sc-source-filter-ecma-ecma-cxx.diff
new file mode 100644
index 000000000..712c99e16
--- /dev/null
+++ b/patches/test/sc-source-filter-ecma-ecma-cxx.diff
@@ -0,0 +1,318 @@
+--- /dev/null
++++ sc/source/filter/ecma/ecma.cxx
+@@ -0,0 +1,315 @@
++#include <sal/config.h>
++#include <stdio.h>
++#include <sfx2/docfile.hxx>
++
++#include "global.hxx"
++#include "docpool.hxx"
++#include "patattr.hxx"
++#include "document.hxx"
++#include "cell.hxx"
++#include "biff.hxx"
++#include <tools/stream.hxx>
++#include <com/sun/star/embed/ElementModes.hpp>
++#include <com/sun/star/container/XNameAccess.hpp>
++#include <comphelper/processfactory.hxx>
++#include <unotools/streamwrap.hxx>
++#include <comphelper/processfactory.hxx>
++#include <parsebase.hxx>
++
++#define SCHEMA_OFFICEDOCUMENT "http://schemas.microsoft.com/office/2006/relationships/officeDocument"
++
++using namespace com::sun::star;
++
++namespace {
++ inline rtl::OUString getBase (const rtl::OUString &rPath)
++ {
++ return rtl::OUString (rPath.copy (0, rPath.lastIndexOf('/')));
++ }
++ inline rtl::OUString getSuffix (const rtl::OUString &rPath)
++ {
++ return rtl::OUString (rPath.copy (rPath.lastIndexOf('/') + 1));
++ }
++};
++
++class ScECMAParseRel : public ScECMAParseBase
++{
++ struct Rel {
++ rtl::OUString m_aId;
++ rtl::OUString m_aType;
++ rtl::OUString m_aTarget;
++ };
++ std::list<Rel> m_aRels;
++ public:
++ ScECMAParseRel() :
++ ScECMAParseBase(),
++ m_aRels()
++ {
++ }
++ virtual ~ScECMAParseRel() {}
++
++ rtl::OUString getDocument()
++ {
++ std::list<Rel>::const_iterator iter;
++ for (iter = m_aRels.begin(); iter != m_aRels.end(); iter++)
++ {
++ if (iter->m_aType.equalsAscii(SCHEMA_OFFICEDOCUMENT))
++ return iter->m_aTarget;
++ }
++ return rtl::OUString();
++ }
++ rtl::OUString getTargetById(const rtl::OUString &rId)
++ {
++ std::list<Rel>::const_iterator iter;
++ for (iter = m_aRels.begin(); iter != m_aRels.end(); iter++)
++ {
++ if (iter->m_aId == rId)
++ return iter->m_aTarget;
++ }
++ return rtl::OUString();
++ }
++ // rStreamPath is the stream for which to read the rels
++ FltError parseRels(const css::uno::Reference<css::lang::XMultiServiceFactory> &xServiceFactory,
++ const css::uno::Reference<css::embed::XStorage> &xStorage,
++ const rtl::OUString &rStreamPath)
++ {
++ return doParse(xServiceFactory, xStorage,
++ getBase (rStreamPath) + rtl::OUString::createFromAscii("/_rels/")
++ + getSuffix (rStreamPath) + rtl::OUString::createFromAscii(".rels"));
++ }
++ virtual void SAL_CALL startElement(const ::rtl::OUString& aName,
++ const css::uno::Reference< css::xml::sax::XAttributeList > & xAttribs)
++ throw( css::xml::sax::SAXException, css::uno::RuntimeException )
++ {
++ fprintf (stderr, "startElement '%s'\n", rtl::OUStringToOString(aName, RTL_TEXTENCODING_UTF8).getStr());
++ if (aName.equalsAscii ("Relationship"))
++ {
++ Rel aRel;
++ aRel.m_aId = xAttribs->getValueByName(rtl::OUString::createFromAscii("Id"));
++ aRel.m_aType = xAttribs->getValueByName(rtl::OUString::createFromAscii("Type"));
++ aRel.m_aTarget = xAttribs->getValueByName(rtl::OUString::createFromAscii("Target"));
++ m_aRels.push_back (aRel);
++ }
++ }
++};
++
++class ScECMAParseContentTypes : public ScECMAParseBase
++{
++ struct Override {
++ rtl::OUString m_aPartName;
++ rtl::OUString m_aType;
++ };
++ struct Default {
++ rtl::OUString m_aExtension;
++ rtl::OUString m_aType;
++ };
++ std::list<Default> m_aDefaults;
++ std::list<Override> m_aOverrides;
++ public:
++ ScECMAParseContentTypes() :
++ ScECMAParseBase(),
++ m_aDefaults(),
++ m_aOverrides()
++ {
++ }
++ virtual ~ScECMAParseContentTypes() {}
++ rtl::OUString getType (const rtl::OUString &aPath)
++ { // FIXME: implement me
++ return rtl::OUString();
++ }
++ virtual void SAL_CALL startElement (const ::rtl::OUString& aName,
++ const css::uno::Reference< css::xml::sax::XAttributeList > & xAttribs)
++ throw( css::xml::sax::SAXException, css::uno::RuntimeException )
++ {
++ fprintf (stderr, "startElement '%s'\n", rtl::OUStringToOString(aName, RTL_TEXTENCODING_UTF8).getStr());
++ }
++};
++
++class ScECMAParseSheet : public ScECMAParseBase
++{
++ css::uno::Reference<css::lang::XMultiServiceFactory> m_xServiceFactory;
++ css::uno::Reference<css::embed::XStorage> m_xStorage;
++ ScDocument *m_pDoc;
++ SCTAB m_nTab;
++
++ rtl::OUString m_aBasePath;
++ uno::Reference<ScECMAParseRel> m_xRels;
++
++ // Cell reading
++ rtl::OUString m_aContent;
++ ScAddress m_aAddr;
++ rtl::OUString m_aType;
++ public:
++ ScECMAParseSheet(const css::uno::Reference<css::lang::XMultiServiceFactory> &xServiceFactory,
++ const css::uno::Reference<css::embed::XStorage> &xStorage,
++ ScDocument *pDoc,
++ SCTAB nTab) :
++ ScECMAParseBase(),
++ m_xServiceFactory(xServiceFactory),
++ m_xStorage(xStorage),
++ m_pDoc(pDoc),
++ m_nTab(nTab),
++ m_xRels(),
++ m_aContent(),
++ m_aAddr(0, 0, nTab)
++ {
++ }
++ virtual ~ScECMAParseSheet() {}
++ void parseSheet (const rtl::OUString &rStreamPath)
++ {
++ doParse (m_xServiceFactory, m_xStorage, rStreamPath);
++ }
++ virtual void SAL_CALL startElement (const ::rtl::OUString& aName,
++ const css::uno::Reference< css::xml::sax::XAttributeList > & xAttribs)
++ throw( css::xml::sax::SAXException, css::uno::RuntimeException )
++ {
++ fprintf (stderr, "startElement '%s'\n", rtl::OUStringToOString(aName, RTL_TEXTENCODING_UTF8).getStr());
++ if (aName.equalsAscii("c"))
++ {
++ m_aAddr.Parse(xAttribs->getValueByName(rtl::OUString::createFromAscii("r")));
++ m_aType = xAttribs->getValueByName(rtl::OUString::createFromAscii("t"));
++ if (!m_aType.getLength()) // nice & slow
++ m_aType = rtl::OUString::createFromAscii("n");
++ }
++ }
++ virtual void SAL_CALL endElement(const ::rtl::OUString& aName)
++ throw( css::xml::sax::SAXException, css::uno::RuntimeException )
++ {
++ if (aName.equalsAscii("c"))
++ m_pDoc->PutCell( m_aAddr, new ScStringCell( m_aContent ), (BOOL) TRUE );
++ }
++ virtual void SAL_CALL characters(const ::rtl::OUString& aChars)
++ throw( css::xml::sax::SAXException, css::uno::RuntimeException )
++ {
++ m_aContent = aChars;
++ }
++};
++
++class ScECMAParseWorkbook : public ScECMAParseBase
++{
++ css::uno::Reference<css::lang::XMultiServiceFactory> m_xServiceFactory;
++ css::uno::Reference<css::embed::XStorage> m_xStorage;
++ ScDocument *m_pDoc;
++
++ rtl::OUString m_aBasePath;
++ uno::Reference<ScECMAParseRel> m_xRels;
++ public:
++ ScECMAParseWorkbook(const css::uno::Reference<css::lang::XMultiServiceFactory> &xServiceFactory,
++ const css::uno::Reference<css::embed::XStorage> &xStorage,
++ ScDocument *pDoc) :
++ ScECMAParseBase(),
++ m_xServiceFactory(xServiceFactory),
++ m_xStorage(xStorage),
++ m_pDoc(pDoc),
++ m_aBasePath(),
++ m_xRels(new ScECMAParseRel())
++ {
++ }
++ virtual ~ScECMAParseWorkbook() {}
++
++ FltError parseWorkbook(const rtl::OUString &rStreamPath)
++ {
++ FltError nErr;
++ nErr = m_xRels->parseRels (m_xServiceFactory, m_xStorage, rStreamPath);
++ if (nErr != eERR_OK)
++ return nErr;
++ m_aBasePath = getBase (rStreamPath) + rtl::OUString::createFromAscii ("/");
++ return doParse (m_xServiceFactory, m_xStorage, rStreamPath);
++ }
++
++ virtual void SAL_CALL startElement (const ::rtl::OUString& aName,
++ const css::uno::Reference< css::xml::sax::XAttributeList > & xAttribs)
++ throw( css::xml::sax::SAXException, css::uno::RuntimeException )
++ {
++ // FIXME: yes - a validation needed: workbook/sheets/sheet
++ if (aName.equalsAscii("sheet"))
++ {
++ // <sheet name="Sheet1" tabId="1" r:id="rId1"/>
++ sal_Int32 nTabId = xAttribs->getValueByName(rtl::OUString::createFromAscii("tabId")).toInt32();
++ // FIXME: hideous lack of namespace handling / hardcoding ! ...
++ rtl::OUString aTarget = m_xRels->getTargetById (
++ xAttribs->getValueByName(rtl::OUString::createFromAscii("r:id")));
++ rtl::OUString aName = m_xRels->getTargetById (
++ xAttribs->getValueByName(rtl::OUString::createFromAscii("name")));
++ // FIXME: why have a 'name' here ? ... is that the user-visible name ?
++ fprintf (stderr, "Sheet %d '%s'\n", nTabId,
++ rtl::OUStringToOString(m_aBasePath + aTarget, RTL_TEXTENCODING_UTF8).getStr());
++ // FIXME: WTF do we have to deal with an 'nTabId' instead of a pointer ?
++ m_pDoc->InsertTab (nTabId, aName);
++ SCTAB nTab;
++// if (!m_pDoc->GetTable (aName, nTab))
++// fprintf (stderr, "Failed to create sheet\n");
++// else
++ {
++ uno::Reference<ScECMAParseSheet> xSheet = new
++ ScECMAParseSheet(m_xServiceFactory, m_xStorage, m_pDoc, nTabId);
++ xSheet->parseSheet (m_aBasePath + aTarget);
++ }
++ }
++ }
++};
++
++static void
++recursiveDump (uno::Reference < embed::XStorage > xStorage, int nDepth = 0)
++{
++ uno::Reference< container::XNameAccess > xName ( xStorage, uno::UNO_QUERY );
++ if (!xName.is())
++ return;
++ uno::Sequence<rtl::OUString> aElements = xName->getElementNames();
++ for (int i = 0; i < aElements.getLength(); i++)
++ {
++ bool isDir = xStorage->isStorageElement(aElements[i]);
++ for (int j = 0; j < nDepth; j++)
++ fprintf (stderr, "\t");
++ fprintf (stderr, "Item '%s' (%s)\n",
++ rtl::OUStringToOString (aElements[i], RTL_TEXTENCODING_UTF8).getStr(),
++ isDir ? "storage" : "stream");
++ if (isDir)
++ {
++ uno::Reference < embed::XStorage > xSubStor;
++ xSubStor = xStorage->openStorageElement (aElements[i],
++ embed::ElementModes::READ);
++ recursiveDump (xSubStor, nDepth+1);
++ }
++ }
++}
++
++FltError ScImportECMA( SfxMedium &rMedium, ScDocument *pDoc )
++{
++ fprintf (stderr, "ScImportECMA\n");
++
++ uno::Reference < embed::XStorage > xStorage;
++
++ FltError eRet = eERR_OK;
++
++ xStorage = rMedium.GetStorage();
++ if ( !xStorage.is() )
++ {
++ fprintf (stderr, "No storage!\n");
++ return eERR_OPEN;
++ }
++
++ uno::Reference<lang::XMultiServiceFactory> xServiceFactory =
++ ::comphelper::getProcessServiceFactory();
++
++ // Common doc bits
++ uno::Reference<ScECMAParseContentTypes> xTypes = new ScECMAParseContentTypes();
++ xTypes->doParse(xServiceFactory, xStorage,
++ rtl::OUString::createFromAscii("[Content_Types].xml"));
++ // Dump the contents: FIXME: dump the types from Content_Types.xml etc.
++ recursiveDump (xStorage);
++
++ uno::Reference<ScECMAParseRel> xRootRel = new ScECMAParseRel();
++ xRootRel->parseRels (xServiceFactory, xStorage,
++ rtl::OUString::createFromAscii(""));
++
++ // XL specific foo
++ fprintf (stderr, "The doc path is: '%s'\n",
++ rtl::OUStringToOString(xRootRel->getDocument(), RTL_TEXTENCODING_UTF8).getStr());
++
++ uno::Reference<ScECMAParseWorkbook> xWorkbook = new ScECMAParseWorkbook(xServiceFactory, xStorage, pDoc);
++ xWorkbook->parseWorkbook (xRootRel->getDocument());
++
++ pDoc->CalcAfterLoad();
++
++ return eRet;
++}
diff --git a/patches/test/sc-source-filter-ecma-makefile-mk.diff b/patches/test/sc-source-filter-ecma-makefile-mk.diff
new file mode 100644
index 000000000..1ddf69f84
--- /dev/null
+++ b/patches/test/sc-source-filter-ecma-makefile-mk.diff
@@ -0,0 +1,71 @@
+--- /dev/null
++++ sc/source/filter/ecma/makefile.mk
+@@ -0,0 +1,68 @@
++#*************************************************************************
++#
++# OpenOffice.org - a multi-platform office productivity suite
++#
++# $RCSfile$
++#
++# $Revision$
++#
++# last change: $Author$ $Date$
++#
++# The Contents of this file are made available subject to
++# the terms of GNU Lesser General Public License Version 2.1.
++#
++#
++# GNU Lesser General Public License Version 2.1
++# =============================================
++# Copyright 2005 by Sun Microsystems, Inc.
++# 901 San Antonio Road, Palo Alto, CA 94303, USA
++#
++# This library is free software; you can redistribute it and/or
++# modify it under the terms of the GNU Lesser General Public
++# License version 2.1, as published by the Free Software Foundation.
++#
++# This library is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# Lesser General Public License for more details.
++#
++# You should have received a copy of the GNU Lesser General Public
++# License along with this library; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++#*************************************************************************
++
++PRJ=..$/..$/..
++
++PRJNAME=sc
++TARGET=ecma
++
++PROJECTPCH4DLL=TRUE
++PROJECTPCH=filt_pch
++PROJECTPCHSOURCE=..\pch\filt_pch
++
++AUTOSEG=true
++
++
++# --- Settings -----------------------------------------------------
++
++.INCLUDE : scpre.mk
++.INCLUDE : settings.mk
++.INCLUDE : sc.mk
++.INCLUDE : $(PRJ)$/util$/makefile.pmk
++
++# --- Files --------------------------------------------------------
++
++CXXFILES = ecma.cxx
++
++SLOFILES = \
++ $(SLO)$/ecma.obj \
++ $(SLO)$/parsebase.obj
++
++EXCEPTIONSFILES = $(SLOFILES)
++
++# --- Tagets -------------------------------------------------------
++
++.INCLUDE : target.mk
++
diff --git a/patches/test/sc-source-filter-ecma-parsebase-hxx.diff b/patches/test/sc-source-filter-ecma-parsebase-hxx.diff
new file mode 100644
index 000000000..80b184f63
--- /dev/null
+++ b/patches/test/sc-source-filter-ecma-parsebase-hxx.diff
@@ -0,0 +1,50 @@
+--- /dev/null
++++ sc/source/filter/ecma/parsebase.hxx
+@@ -0,0 +1,47 @@
++#ifndef SC_ECMA_PARSEBASE_HXX
++#define SC_ECMA_PARSEBASE_HXX
++
++#include "filter.hxx"
++#include "scerrors.hxx"
++#include <cppuhelper/implbase1.hxx>
++#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
++
++#define css ::com::sun::star
++
++class ScPathRefHolder;
++
++class ScECMAParseBase : public ::cppu::WeakImplHelper1<
++ css::xml::sax::XDocumentHandler >
++{
++ private:
++ ScPathRefHolder *m_pPath;
++ public:
++ ScECMAParseBase() : m_pPath(NULL) {}
++ virtual ~ScECMAParseBase();
++
++ FltError doParse(const css::uno::Reference<css::lang::XMultiServiceFactory> &xServiceFactory,
++ const css::uno::Reference<css::embed::XStorage> &xStorage,
++ const rtl::OUString &rStreamPath);
++
++ // css::xml::sax::XDocumentHandler
++ virtual void SAL_CALL startDocument(void)
++ throw( css::xml::sax::SAXException, css::uno::RuntimeException ) {}
++ virtual void SAL_CALL endDocument(void)
++ throw( css::xml::sax::SAXException, css::uno::RuntimeException ) {}
++ virtual void SAL_CALL startElement(const ::rtl::OUString& aName,
++ const css::uno::Reference< css::xml::sax::XAttributeList > & xAttribs)
++ throw( css::xml::sax::SAXException, css::uno::RuntimeException );
++ virtual void SAL_CALL endElement(const ::rtl::OUString& aName)
++ throw( css::xml::sax::SAXException, css::uno::RuntimeException ) {}
++ virtual void SAL_CALL characters(const ::rtl::OUString& aChars)
++ throw( css::xml::sax::SAXException, css::uno::RuntimeException ) {}
++ virtual void SAL_CALL ignorableWhitespace(const ::rtl::OUString& aWhitespaces)
++ throw( css::xml::sax::SAXException, css::uno::RuntimeException ) {}
++ virtual void SAL_CALL processingInstruction(const ::rtl::OUString& aTarget,
++ const ::rtl::OUString& aData)
++ throw( css::xml::sax::SAXException, css::uno::RuntimeException ) {}
++ virtual void SAL_CALL setDocumentLocator(const css::uno::Reference< css::xml::sax::XLocator > & xLocator)
++ throw( css::xml::sax::SAXException, css::uno::RuntimeException ) {}
++};
++
++#endif // SC_ECMA_PARSEBASE_HXX
diff --git a/scratch/sc-vba/makefile.mk b/scratch/sc-vba/makefile.mk
index 1cc2738a1..e74b7269c 100644
--- a/scratch/sc-vba/makefile.mk
+++ b/scratch/sc-vba/makefile.mk
@@ -45,13 +45,13 @@ SLOFILES= \
$(SLO)$/vbachartobjects.obj\
$(SLO)$/vbaseriescollection.obj\
$(SLO)$/vbacollectionimpl.obj\
- $(SLO)$/vbaarraywrapper.obj\
$(SLO)$/vbadialogs.obj \
$(SLO)$/vbadialog.obj \
$(SLO)$/vbapivottable.obj \
$(SLO)$/vbapivotcache.obj \
$(SLO)$/vbapivottables.obj \
$(SLO)$/vbawindows.obj \
+ $(SLO)$/vbapalette.obj \
$(SLO)$/vbacharacters.obj
diff --git a/scratch/sc-vba/vbaapplication.hxx b/scratch/sc-vba/vbaapplication.hxx
index bb9e61061..c332fabb6 100644
--- a/scratch/sc-vba/vbaapplication.hxx
+++ b/scratch/sc-vba/vbaapplication.hxx
@@ -23,12 +23,12 @@ public:
// XApplication
virtual ::sal_Int32 SAL_CALL getCalculation() throw (css::uno::RuntimeException);
virtual void SAL_CALL setCalculation( ::sal_Int32 _calculation ) throw (css::uno::RuntimeException);
- virtual css::uno::Reference< oo::vba::XRange > getSelection() throw (css::uno::RuntimeException);
- virtual css::uno::Reference< oo::vba::XWorkbook > getActiveWorkbook() throw (css::uno::RuntimeException);
- virtual css::uno::Reference< oo::vba::XRange > getActiveCell() throw ( css::uno::RuntimeException);
+ virtual css::uno::Reference< oo::vba::XRange > SAL_CALL getSelection() throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< oo::vba::XWorkbook > SAL_CALL getActiveWorkbook() throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< oo::vba::XRange > SAL_CALL getActiveCell() throw ( css::uno::RuntimeException);
virtual css::uno::Reference< oo::vba::XWindow > SAL_CALL getActiveWindow() throw (::com::sun::star::uno::RuntimeException);
- virtual sal_Bool getScreenUpdating() throw (css::uno::RuntimeException);
- virtual void setScreenUpdating(sal_Bool bUpdate) throw (css::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL getScreenUpdating() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setScreenUpdating(sal_Bool bUpdate) throw (css::uno::RuntimeException);
virtual css::uno::Reference< oo::vba::XWorkbook > SAL_CALL getThisWorkbook() throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL Workbooks( const css::uno::Any& aIndex ) throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL WorksheetFunction( ) throw (css::uno::RuntimeException);
diff --git a/scratch/sc-vba/vbacharacters.hxx b/scratch/sc-vba/vbacharacters.hxx
index a6f32dc8b..3cefbc856 100644
--- a/scratch/sc-vba/vbacharacters.hxx
+++ b/scratch/sc-vba/vbacharacters.hxx
@@ -8,7 +8,7 @@
#include <com/sun/star/text/XSimpleText.hpp>
#include "vbahelper.hxx"
-
+#include "vbapalette.hxx"
typedef ::cppu::WeakImplHelper1< oo::vba::XCharacters > ScVbaCharacters_BASE;
class ScVbaCharacters : public ScVbaCharacters_BASE
@@ -17,10 +17,11 @@ private:
css::uno::Reference< css::text::XTextRange > m_xTextRange;
css::uno::Reference< css::text::XSimpleText > m_xSimpleText;
css::uno::Reference< css::uno::XComponentContext > m_xContext;
+ ScVbaPalette m_aPalette;
sal_Int32 nLength;
sal_Int32 nStart;
public:
- ScVbaCharacters( const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Reference< css::text::XSimpleText >& xRange, const css::uno::Any& Start, const css::uno::Any& Length ) throw ( css::lang::IllegalArgumentException );
+ ScVbaCharacters( const css::uno::Reference< css::uno::XComponentContext >& xContext, const ScVbaPalette& dPalette, const css::uno::Reference< css::text::XSimpleText >& xRange, const css::uno::Any& Start, const css::uno::Any& Length ) throw ( css::lang::IllegalArgumentException );
virtual ~ScVbaCharacters() {}
// Attributes
diff --git a/scratch/sc-vba/vbachart.hxx b/scratch/sc-vba/vbachart.hxx
index 56a1c432b..b9ca0c4f7 100644
--- a/scratch/sc-vba/vbachart.hxx
+++ b/scratch/sc-vba/vbachart.hxx
@@ -16,7 +16,7 @@ class ScVbaChart : public ChartImpl_BASE
public:
ScVbaChart( const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Reference< css::chart::XChartDocument >& xChartDoc ) : m_xContext(xContext), m_xChartDoc( xChartDoc ) {}
virtual ::rtl::OUString SAL_CALL getName() throw (css::uno::RuntimeException);
- virtual css::uno::Any SeriesCollection(const css::uno::Any&) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL SeriesCollection(const css::uno::Any&) throw (css::uno::RuntimeException);
};
diff --git a/scratch/sc-vba/vbacollectionimpl.hxx b/scratch/sc-vba/vbacollectionimpl.hxx
index 43269eeff..312da0db0 100644
--- a/scratch/sc-vba/vbacollectionimpl.hxx
+++ b/scratch/sc-vba/vbacollectionimpl.hxx
@@ -4,9 +4,11 @@
#include <org/openoffice/vba/XCollection.hpp>
#include <com/sun/star/container/XEnumerationAccess.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/script/XDefaultMethod.hpp>
#include <com/sun/star/container/XIndexAccess.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
+#include <cppuhelper/implbase3.hxx>
#include <cppuhelper/implbase2.hxx>
#include <cppuhelper/implbase1.hxx>
@@ -29,8 +31,8 @@ public:
-typedef ::cppu::WeakImplHelper2<oo::vba::XCollection,
-css::container::XEnumerationAccess > XCollection_BASE;
+typedef ::cppu::WeakImplHelper3<oo::vba::XCollection,
+css::container::XEnumerationAccess, css::script::XDefaultMethod > XCollection_BASE;
class ScVbaCollectionBaseImpl : public XCollection_BASE
{
@@ -53,6 +55,8 @@ public:
virtual css::uno::Reference< oo::vba::XApplication > SAL_CALL getApplication() throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL Item( const css::uno::Any& Index ) throw (css::uno::RuntimeException);
+ // XDefaultMethod
+ ::rtl::OUString SAL_CALL getName( ) throw (css::uno::RuntimeException);
// XEnumerationAccess
virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() throw (css::uno::RuntimeException) = 0;
diff --git a/scratch/sc-vba/vbafont.cxx b/scratch/sc-vba/vbafont.cxx
index a55030640..733a4fb6e 100644
--- a/scratch/sc-vba/vbafont.cxx
+++ b/scratch/sc-vba/vbafont.cxx
@@ -3,11 +3,188 @@
#include <com/sun/star/awt/FontUnderline.hpp>
#include <com/sun/star/awt/FontStrikeout.hpp>
#include <com/sun/star/awt/FontSlant.hpp>
+#include <org/openoffice/vba/Excel/Constants.hpp>
+#include <org/openoffice/vba/Excel/XlUnderlineStyle.hpp>
#include "vbafont.hxx"
using namespace ::org::openoffice;
using namespace ::com::sun::star;
+// use local constants there is no need to expose these constants
+// externally. Looking at the Format->Character dialog it seem that
+// these may infact be even be calculated. Leave hardcoded for now
+// #FIXEME #TBD investigate the code for dialog mentioned above
+
+// The font baseline is not specified.
+const short NORMAL = 0;
+
+// specifies a superscripted.
+const short SUPERSCRIPT = 33;
+
+// specifies a subscripted.
+const short SUBSCRIPT = -33;
+
+// specifies a hight of superscripted font
+ const sal_Int8 SUPERSCRIPTHEIGHT = 58;
+
+// specifies a hight of subscripted font
+const sal_Int8 SUBSCRIPTHEIGHT = 58;
+
+// specifies a hight of normal font
+const short NORMALHEIGHT = 100;
+
+void
+ScVbaFont::setSuperscript( sal_Bool bValue ) throw ( uno::RuntimeException )
+{
+ sal_Int16 nValue = NORMAL;
+ sal_Int8 nValue2 = NORMALHEIGHT;
+
+ if( bValue )
+ {
+ nValue = SUPERSCRIPT;
+ nValue2 = SUPERSCRIPTHEIGHT;
+ }
+ mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharEscapement" ) ), ( uno::Any )nValue );
+ mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharEscapementHeight" ) ), ( uno::Any )nValue2 );
+}
+
+sal_Bool
+ScVbaFont::getSuperscript() throw ( uno::RuntimeException )
+{
+ short nValue = 0;
+ mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharEscapement" ) ) ) >>= nValue;
+ return( nValue == SUPERSCRIPT );
+}
+
+void
+ScVbaFont::setSubscript( sal_Bool bValue ) throw ( uno::RuntimeException )
+{
+ sal_Int16 nValue = NORMAL;
+ sal_Int8 nValue2 = NORMALHEIGHT;
+
+ if( bValue )
+ {
+ nValue= SUBSCRIPT;
+ nValue2 = SUBSCRIPTHEIGHT;
+ }
+
+ mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharEscapementHeight" ) ), ( uno::Any )nValue2 );
+ mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharEscapement" ) ), ( uno::Any )nValue );
+
+}
+
+sal_Bool
+ScVbaFont::getSubscript() throw ( uno::RuntimeException )
+{
+ short nValue = NORMAL;
+ mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharEscapement" ) ) ) >>= nValue;
+ return( nValue == SUBSCRIPT );
+}
+
+void
+ScVbaFont::setSize( float fValue ) throw( uno::RuntimeException )
+{
+ mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharHeight" ) ), ( uno::Any )fValue );
+}
+
+float
+ScVbaFont::getSize() throw ( uno::RuntimeException )
+{
+ float fValue = 0.0;
+ mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharHeight" ) ) ) >>= fValue;
+ return fValue;
+}
+
+void
+ScVbaFont::setColorIndex( sal_Int32 lValue ) throw( uno::RuntimeException )
+{
+ // #TODO #FIXME is behavior random or just default, maybe it depends
+ // on the parent object ( which we don't really take care of right now
+ if ( lValue == vba::Excel::Constants::xlColorIndexAutomatic )
+ lValue = 0;
+ mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharColor" ) ), ( uno::Any )mPalette.getPalette()->getByIndex( --lValue ) );
+}
+
+
+sal_Int32
+ScVbaFont::getColorIndex() throw ( uno::RuntimeException )
+{
+//XXX
+ sal_Int32 nColor = -1;
+ uno::Any aValue= mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharColor" ) ) );
+ aValue >>= nColor;
+ uno::Reference< container::XIndexAccess > xIndex = mPalette.getPalette();
+ sal_Int32 nElems = xIndex->getCount();
+ sal_Int32 nIndex = -1;
+ for ( sal_Int32 count=0; count<nElems; ++count )
+ {
+ sal_Int32 nPaletteColor;
+ xIndex->getByIndex( count ) >>= nPaletteColor;
+ if ( nPaletteColor == nColor )
+ {
+ nIndex = count + 1; // 1 based
+ break;
+ }
+ }
+ return nIndex;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////
+void
+ScVbaFont::setStandardFontSize( float fValue ) throw( uno::RuntimeException )
+{
+//XXX
+ //mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharSize" ) ), ( uno::Any )fValue );
+ throw uno::RuntimeException(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("setStandardFontSize not supported") ), uno::Reference< uno::XInterface >() );
+}
+
+
+float
+ScVbaFont::getStandardFontSize() throw ( uno::RuntimeException )
+{
+//XXX
+ throw uno::RuntimeException(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("getStandardFontSize not supported") ), uno::Reference< uno::XInterface >() );
+}
+
+
+void
+ScVbaFont::setStandardFont( const ::rtl::OUString &rString ) throw( uno::RuntimeException )
+{
+//XXX
+ //mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharSize" ) ), ( uno::Any )aValue );
+ throw uno::RuntimeException(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("setStandardFont not supported") ), uno::Reference< uno::XInterface >() );
+}
+
+
+::rtl::OUString
+ScVbaFont::getStandardFont() throw ( uno::RuntimeException )
+{
+//XXX
+ throw uno::RuntimeException(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("getStandardFont not supported") ), uno::Reference< uno::XInterface >() );
+}
+
+void
+ScVbaFont::setFontStyle( const ::rtl::OUString &rString ) throw( uno::RuntimeException )
+{
+//XXX
+ //mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharSize" ) ), ( uno::Any )aValue );
+ throw uno::RuntimeException(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("setFontStyle not supported") ), uno::Reference< uno::XInterface >() );
+}
+
+
+::rtl::OUString
+ScVbaFont::getFontStyle() throw ( uno::RuntimeException )
+{
+//XXX
+ throw uno::RuntimeException(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("getFontStyle not supported") ), uno::Reference< uno::XInterface >() );
+}
+
void
ScVbaFont::setBold( sal_Bool bValue ) throw( uno::RuntimeException )
{
@@ -22,27 +199,65 @@ sal_Bool
ScVbaFont::getBold() throw ( uno::RuntimeException )
{
double fValue;
- uno::Any aValue = mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharWeight" ) ) );
- aValue >>= fValue;
+ mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharWeight" ) ) ) >>= fValue;
return( fValue == awt::FontWeight::BOLD );
}
void
-ScVbaFont::setUnderline( sal_Bool bValue ) throw ( uno::RuntimeException )
+ScVbaFont::setUnderline( const uno::Any& aValue ) throw ( uno::RuntimeException )
{
- short nValue = awt::FontUnderline::NONE;
- if( bValue )
- nValue = awt::FontUnderline::SINGLE;
+ // default
+ sal_Int32 nValue = vba::Excel::XlUnderlineStyle::xlUnderlineStyleNone;
+ aValue >>= nValue;
+ switch ( nValue )
+ {
+// NOTE:: #TODO #FIMXE
+// xlUnderlineStyleDoubleAccounting & xlUnderlineStyleSingleAccounting
+// don't seem to be supported in Openoffice.
+// The import filter converts them to single or double underlines as appropriate
+// So, here at the moment we are similarly silently converting
+// xlUnderlineStyleSingleAccounting to xlUnderlineStyleSingle.
+
+ case vba::Excel::XlUnderlineStyle::xlUnderlineStyleNone:
+ nValue = awt::FontUnderline::NONE;
+ break;
+ case vba::Excel::XlUnderlineStyle::xlUnderlineStyleSingle:
+ case vba::Excel::XlUnderlineStyle::xlUnderlineStyleSingleAccounting:
+ nValue = awt::FontUnderline::SINGLE;
+ break;
+ case vba::Excel::XlUnderlineStyle::xlUnderlineStyleDouble:
+ case vba::Excel::XlUnderlineStyle::xlUnderlineStyleDoubleAccounting:
+ nValue = awt::FontUnderline::DOUBLE;
+ break;
+ default:
+ throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Unknown value for Underline")), uno::Reference< uno::XInterface >() );
+ }
+
mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharUnderline" ) ), ( uno::Any )nValue );
+
}
-sal_Bool
+uno::Any
ScVbaFont::getUnderline() throw ( uno::RuntimeException )
{
- short nValue = 0;
- uno::Any aValue = mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharUnderline" ) ) );
- aValue >>= nValue;
- return( nValue == awt::FontUnderline::SINGLE );
+ sal_Int32 nValue = awt::FontUnderline::NONE;
+ mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharUnderline" ) ) ) >>= nValue;
+ switch ( nValue )
+ {
+ case awt::FontUnderline::DOUBLE:
+ nValue = vba::Excel::XlUnderlineStyle::xlUnderlineStyleDouble;
+ break;
+ case awt::FontUnderline::SINGLE:
+ nValue = vba::Excel::XlUnderlineStyle::xlUnderlineStyleSingle;
+ break;
+ case awt::FontUnderline::NONE:
+ nValue = vba::Excel::XlUnderlineStyle::xlUnderlineStyleNone;
+ break;
+ default:
+ throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Unknown value retrieved for Underline") ), uno::Reference< uno::XInterface >() );
+
+ }
+ return uno::makeAny( nValue );
}
void
@@ -58,9 +273,8 @@ sal_Bool
ScVbaFont::getStrikethrough() throw ( uno::RuntimeException )
{
short nValue = 0;
- uno::Any aValue = mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharStrikeout" ) ) );
- aValue >>= nValue;
- return( nValue == awt::FontStrikeout::SINGLE );
+ mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharStrikeout" ) ) ) >>= nValue;
+ return( nValue == awt::FontStrikeout::SINGLE );
}
void
@@ -73,8 +287,7 @@ sal_Bool
ScVbaFont::getShadow() throw (uno::RuntimeException)
{
sal_Bool bValue = false;
- uno::Any aValue = mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharShadowed" ) ) );
- aValue >>= bValue;
+ mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharShadowed" ) ) ) >>= bValue;
return bValue;
}
@@ -91,8 +304,7 @@ sal_Bool
ScVbaFont::getItalic() throw ( uno::RuntimeException )
{
short nValue = 0;
- uno::Any aValue = mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharPosture" ) ) );
- aValue >>= nValue;
+ mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharPosture" ) ) ) >>= nValue;
return( nValue == awt::FontSlant_ITALIC );
}
@@ -106,7 +318,6 @@ ScVbaFont::setName( const ::rtl::OUString &rString ) throw ( uno::RuntimeExcepti
ScVbaFont::getName() throw ( uno::RuntimeException )
{
::rtl::OUString rString;
- uno::Any aValue = mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharFontName" ) ) );
- aValue >>= rString;
+ mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharFontName" ) ) ) >>= rString;
return rString;
}
diff --git a/scratch/sc-vba/vbaglobals.cxx b/scratch/sc-vba/vbaglobals.cxx
index e71f6963c..cfae0ac3d 100644
--- a/scratch/sc-vba/vbaglobals.cxx
+++ b/scratch/sc-vba/vbaglobals.cxx
@@ -9,7 +9,7 @@
#include "vbaapplication.hxx"
#include "vbaworksheet.hxx"
#include "vbarange.hxx"
-
+#include <cppuhelper/bootstrap.hxx>
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::org::openoffice;
@@ -33,11 +33,32 @@ namespace vbaobj
return *pImplName;
}
+ uno::Reference< XComponentContext > getComponentContextFromMSF( uno::Reference< lang::XMultiServiceFactory > const& xFactory )
+ {
+ uno::Reference< XComponentContext > xContext;
+
+ uno::Reference< beans::XPropertySet > xProps( xFactory, UNO_QUERY );
+ if (xProps.is())
+ {
+ xProps->getPropertyValue(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("DefaultContext") ) ) >>= xContext;
+ }
+ return xContext;
+ }
+
+
uno::Reference< XInterface > SAL_CALL create(
- Reference< XComponentContext > const & xContext )
+// Reference< XComponentContext > const & xContext )
+ Reference< lang::XMultiServiceFactory > const & xMultiContext )
SAL_THROW( () )
{
- OSL_TRACE("In create component for vbaglobals");
+ uno::Reference< XComponentContext > xContext = getComponentContextFromMSF( xMultiContext );
+ if ( !xContext.is() )
+ {
+ OSL_TRACE("Failed to obtain context" );
+ throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("BARRRRRRF no context")), uno::Reference< uno::XInterface >() );
+ }
+ OSL_TRACE("In create component for vbaglobals");
return static_cast< lang::XTypeProvider * >( new ScVbaGlobals( xContext ) );
}
diff --git a/scratch/sc-vba/vbahelper.cxx b/scratch/sc-vba/vbahelper.cxx
index ce33f665b..0d02e2044 100644
--- a/scratch/sc-vba/vbahelper.cxx
+++ b/scratch/sc-vba/vbahelper.cxx
@@ -3,6 +3,7 @@
#include <com/sun/star/frame/XDispatchProvider.hpp>
#include <com/sun/star/frame/XModel.hpp>
#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/frame/XDesktop.hpp>
#include <com/sun/star/frame/XController.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/lang/XMultiComponentFactory.hpp>
@@ -254,7 +255,16 @@ org::openoffice::getCurrentDocument() throw (uno::RuntimeException)
if ( sal_False == ( aModel >>= xModel ) ||
!xModel.is() )
{
- OSL_TRACE("Failed to extract model from thisComponent ");
+ // trying last gasp try the current component
+ uno::Reference<uno::XComponentContext > xCtx( ::cppu::defaultBootstrap_InitialComponentContext(), uno::UNO_QUERY_THROW );
+ uno::Reference<lang::XMultiComponentFactory > xSMgr( xCtx->getServiceManager(), uno::UNO_QUERY_THROW );
+ uno::Reference< frame::XDesktop > xDesktop (xSMgr->createInstanceWithContext(::rtl::OUString::createFromAscii("com.sun.star.frame.Desktop"), xCtx), uno::UNO_QUERY_THROW );
+ xModel.set( xDesktop->getCurrentComponent(), uno::UNO_QUERY );
+ if ( !xModel.is() )
+ {
+ throw uno::RuntimeException(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Can't extract model from basic ( its obviously not set yet ) therefore don't know the currently selected document") ), uno::Reference< uno::XInterface >() );
+ }
return xModel;
}
else
@@ -267,6 +277,11 @@ org::openoffice::getCurrentDocument() throw (uno::RuntimeException)
else
{
OSL_TRACE("Failed to get ThisComponent");
+ throw uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "Can't determine the currently selected document") ),
+ uno::Reference< uno::XInterface >() );
}
return xModel;
}
diff --git a/scratch/sc-vba/vbapalette.cxx b/scratch/sc-vba/vbapalette.cxx
new file mode 100644
index 000000000..f8ea1058a
--- /dev/null
+++ b/scratch/sc-vba/vbapalette.cxx
@@ -0,0 +1,72 @@
+#include "vbapalette.hxx"
+#include <cppuhelper/implbase1.hxx>
+#include <com/sun/star/beans/XPropertySet.hpp>
+
+
+using namespace ::com::sun::star;
+using namespace ::org::openoffice;
+
+/** Standard EGA colors, bright. */
+#define EXC_PALETTE_EGA_COLORS_LIGHT \
+ 0x000000, 0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF
+/** Standard EGA colors, dark. */
+#define EXC_PALETTE_EGA_COLORS_DARK \
+ 0x800000, 0x008000, 0x000080, 0x808000, 0x800080, 0x008080, 0xC0C0C0, 0x808080
+
+static const ColorData spnDefColorTable8[] =
+{
+/* 8 */ EXC_PALETTE_EGA_COLORS_LIGHT,
+/* 16 */ EXC_PALETTE_EGA_COLORS_DARK,
+/* 24 */ 0x9999FF, 0x993366, 0xFFFFCC, 0xCCFFFF, 0x660066, 0xFF8080, 0x0066CC, 0xCCCCFF,
+/* 32 */ 0x000080, 0xFF00FF, 0xFFFF00, 0x00FFFF, 0x800080, 0x800000, 0x008080, 0x0000FF,
+/* 40 */ 0x00CCFF, 0xCCFFFF, 0xCCFFCC, 0xFFFF99, 0x99CCFF, 0xFF99CC, 0xCC99FF, 0xFFCC99,
+/* 48 */ 0x3366FF, 0x33CCCC, 0x99CC00, 0xFFCC00, 0xFF9900, 0xFF6600, 0x666699, 0x969696,
+/* 56 */ 0x003366, 0x339966, 0x003300, 0x333300, 0x993300, 0x993366, 0x333399, 0x333333
+};
+
+typedef ::cppu::WeakImplHelper1< container::XIndexAccess > XIndexAccess_BASE;
+
+class DefaultPalette : public XIndexAccess_BASE
+{
+public:
+ DefaultPalette(){}
+
+ // Methods XIndexAccess
+ virtual ::sal_Int32 SAL_CALL getCount() throw (uno::RuntimeException)
+ {
+ return sizeof(spnDefColorTable8) / sizeof(spnDefColorTable8[0]);
+ }
+
+ virtual uno::Any SAL_CALL getByIndex( ::sal_Int32 Index ) throw (lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException)
+ {
+ if ( Index < 0 || Index >= getCount() )
+ throw lang::IndexOutOfBoundsException();
+ return uno::makeAny( sal_Int32( spnDefColorTable8[ Index ] ) );
+ }
+
+ // Methods XElementAcess
+ virtual uno::Type SAL_CALL getElementType() throw (uno::RuntimeException)
+ {
+ return ::getCppuType( (sal_Int32*)0 );
+ }
+ virtual ::sal_Bool SAL_CALL hasElements() throw (uno::RuntimeException)
+ {
+ return sal_True;
+ }
+
+};
+
+uno::Reference< container::XIndexAccess >
+ScVbaPalette::getPalette()
+{
+ uno::Reference< container::XIndexAccess > xIndex;
+ uno::Reference< beans::XPropertySet > xProps;
+ if ( m_pShell )
+ xProps.set( m_pShell->GetModel(), uno::UNO_QUERY_THROW );
+ else
+ throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Can't extract palette, no doc shell" ) ), uno::Reference< uno::XInterface >() );
+ xIndex.set( xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ColorPalette") ) ), uno::UNO_QUERY );
+ if ( !xIndex.is() )
+ return new DefaultPalette();
+ return xIndex;
+}
diff --git a/scratch/sc-vba/vbapalette.hxx b/scratch/sc-vba/vbapalette.hxx
new file mode 100644
index 000000000..f74d60698
--- /dev/null
+++ b/scratch/sc-vba/vbapalette.hxx
@@ -0,0 +1,20 @@
+#ifndef SC_VBAPALETTE_HXX
+#define SC_VBAPALETTE_HXX
+
+#include "vbahelper.hxx"
+#include <document.hxx>
+#include <com/sun/star/container/XIndexAccess.hpp>
+
+class ScVbaPalette
+{
+private:
+ SfxObjectShell* m_pShell;
+public:
+ ScVbaPalette( SfxObjectShell* pShell ) : m_pShell( pShell ){}
+ // if no palette available e.g. because the document doesn't have a
+ // palette defined then a default palette will be returned.
+ css::uno::Reference< css::container::XIndexAccess > getPalette();
+};
+
+#endif //SC_VBAPALETTE_HXX
+
diff --git a/scratch/sc-vba/vbarange.cxx b/scratch/sc-vba/vbarange.cxx
index 5921ff01d..2df7b1ab3 100644
--- a/scratch/sc-vba/vbarange.cxx
+++ b/scratch/sc-vba/vbarange.cxx
@@ -1,6 +1,7 @@
#include <comphelper/processfactory.hxx>
#include <sfx2/objsh.hxx>
+#include <com/sun/star/script/ArrayWrapper.hpp>
#include <com/sun/star/sheet/XSheetOperation.hpp>
#include <com/sun/star/sheet/CellFlags.hpp>
#include <com/sun/star/table/XColumnRowRange.hpp>
@@ -34,6 +35,10 @@
#include <com/sun/star/util/XSortable.hpp>
#include <com/sun/star/sheet/XCellRangeMovement.hpp>
#include <com/sun/star/sheet/XCellRangeData.hpp>
+
+#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
+#include <com/sun/star/awt/XDevice.hpp>
+
//#include <com/sun/star/sheet/CellDeleteMode.hpp>
#include <com/sun/star/sheet/XCellRangeMovement.hpp>
@@ -50,6 +55,7 @@
#include <org/openoffice/vba/Excel/XlDirection.hpp>
#include <org/openoffice/vba/Excel/XlSortDataOption.hpp>
#include <org/openoffice/vba/Excel/XlDeleteShiftDirection.hpp>
+#include <org/openoffice/vba/Excel/XlReferenceStyle.hpp>
#include <scitems.hxx>
@@ -70,7 +76,6 @@
#include "vbafont.hxx"
#include "vbacomment.hxx"
#include "vbainterior.hxx"
-#include "vbaarraywrapper.hxx"
#include "vbacharacters.hxx"
#include <comphelper/anytostring.hxx>
@@ -206,7 +211,7 @@ public:
throw container::NoSuchElementException();
CellPos aPos = *(m_it)++;
uno::Reference< table::XCellRange > xCellRange( m_xRange->getCellByPosition( aPos.m_nCol, aPos.m_nRow ), uno::UNO_QUERY_THROW );
- return makeAny( uno::Reference< vba::XRange >( new ScVbaRange( m_xContext, xCellRange ) ) );
+ return uno::makeAny( uno::Reference< vba::XRange >( new ScVbaRange( m_xContext, xCellRange ) ) );
}
};
@@ -216,15 +221,16 @@ const sal_Int32 RANGE_PROPERTY_ID_DFLT=1;
// another property/method of the same name
const ::rtl::OUString RANGE_PROPERTY_DFLT( RTL_CONSTASCII_USTRINGPARAM( "_$DefaultProp" ) );
const ::rtl::OUString ISVISIBLE( RTL_CONSTASCII_USTRINGPARAM( "IsVisible"));
+const ::rtl::OUString WIDTH( RTL_CONSTASCII_USTRINGPARAM( "Width"));
-class CellValueSetter : public ArrayVisitor
+class CellValueSetter : public ValueSetter
{
protected:
uno::Any maValue;
uno::TypeClass mTypeClass;
- bool processValue( const uno::Any& aValue, const uno::Reference< table::XCell >& xCell );
public:
CellValueSetter( const uno::Any& aValue );
+ virtual bool processValue( const uno::Any& aValue, const uno::Reference< table::XCell >& xCell );
virtual void visitNode( sal_Int32 x, sal_Int32 y, const uno::Reference< table::XCell >& xCell );
};
@@ -285,15 +291,16 @@ CellValueSetter::processValue( const uno::Any& aValue, const uno::Reference< tab
}
-class CellValueGetter : public ArrayVisitor
+
+class CellValueGetter : public ValueGetter
{
protected:
uno::Any maValue;
uno::TypeClass mTypeClass;
- virtual void processValue( sal_Int32 x, sal_Int32 y, const uno::Any& aValue );
public:
CellValueGetter() {}
virtual void visitNode( sal_Int32 x, sal_Int32 y, const uno::Reference< table::XCell >& xCell );
+ virtual void processValue( sal_Int32 x, sal_Int32 y, const uno::Any& aValue );
const uno::Any& getValue() const { return maValue; }
};
@@ -338,9 +345,43 @@ void CellValueGetter::visitNode( sal_Int32 x, sal_Int32 y, const uno::Reference<
processValue( x,y,aValue );
}
-class Dim2ArrayValueGetter : public CellValueGetter
+class CellFormulaValueSetter : public CellValueSetter
+{
+public:
+ CellFormulaValueSetter( const uno::Any& aValue ):CellValueSetter( aValue ){}
+protected:
+ bool processValue( const uno::Any& aValue, const uno::Reference< table::XCell >& xCell )
+ {
+ rtl::OUString sFormula;
+ if ( aValue >>= sFormula )
+ {
+ xCell->setFormula( sFormula );
+ return true;
+ }
+ return false;
+ }
+
+};
+
+class CellFormulaValueGetter : public CellValueGetter
+{
+public:
+ CellFormulaValueGetter():CellValueGetter() {}
+ virtual void visitNode( sal_Int32 x, sal_Int32 y, const uno::Reference< table::XCell >& xCell )
+ {
+ uno::Any aValue;
+ aValue <<= xCell->getFormula();
+ processValue( x,y,aValue );
+ }
+
+};
+
+
+class Dim2ArrayValueGetter : public ArrayVisitor
{
protected:
+ uno::Any maValue;
+ ValueGetter& mValueGetter;
virtual void processValue( sal_Int32 x, sal_Int32 y, const uno::Any& aValue )
{
uno::Sequence< uno::Sequence< uno::Any > >& aMatrix = *( uno::Sequence< uno::Sequence< uno::Any > >* )( maValue.getValue() );
@@ -348,7 +389,7 @@ protected:
}
public:
- Dim2ArrayValueGetter(sal_Int32 nRowCount, sal_Int32 nColCount ):CellValueGetter()
+ Dim2ArrayValueGetter(sal_Int32 nRowCount, sal_Int32 nColCount, ValueGetter& rValueGetter ): mValueGetter(rValueGetter)
{
uno::Sequence< uno::Sequence< uno::Any > > aMatrix;
aMatrix.realloc( nRowCount );
@@ -356,16 +397,25 @@ public:
aMatrix[index].realloc( nColCount );
maValue <<= aMatrix;
}
+ void visitNode( sal_Int32 x, sal_Int32 y, const uno::Reference< table::XCell >& xCell )
+
+ {
+ mValueGetter.visitNode( x, y, xCell );
+ processValue( x, y, mValueGetter.getValue() );
+ }
+ const uno::Any& getValue() const { return maValue; }
+
};
const static rtl::OUString sNA = rtl::OUString::createFromAscii("#N/A");
-class Dim1ArrayValueSetter : public CellValueSetter
+class Dim1ArrayValueSetter : public ArrayVisitor
{
uno::Sequence< uno::Any > aMatrix;
sal_Int32 nColCount;
+ ValueSetter& mCellValueSetter;
public:
- Dim1ArrayValueSetter( const uno::Any& aValue ) : CellValueSetter( aValue )
+ Dim1ArrayValueSetter( const uno::Any& aValue, ValueSetter& rCellValueSetter ):mCellValueSetter( rCellValueSetter )
{
aValue >>= aMatrix;
nColCount = aMatrix.getLength();
@@ -373,32 +423,35 @@ public:
virtual void visitNode( sal_Int32 x, sal_Int32 y, const uno::Reference< table::XCell >& xCell )
{
if ( y < nColCount )
- processValue( aMatrix[ y ], xCell );
+ mCellValueSetter.processValue( aMatrix[ y ], xCell );
else
- processValue( uno::makeAny( sNA ), xCell );
+ mCellValueSetter.processValue( uno::makeAny( sNA ), xCell );
}
};
-class Dim2ArrayValueSetter : public CellValueSetter
+class Dim2ArrayValueSetter : public ArrayVisitor
{
uno::Sequence< uno::Sequence< uno::Any > > aMatrix;
+ ValueSetter& mCellValueSetter;
sal_Int32 nRowCount;
sal_Int32 nColCount;
public:
- Dim2ArrayValueSetter( const uno::Any& aValue ) : CellValueSetter( aValue )
+ Dim2ArrayValueSetter( const uno::Any& aValue, ValueSetter& rCellValueSetter ) : mCellValueSetter( rCellValueSetter )
{
aValue >>= aMatrix;
nRowCount = aMatrix.getLength();
nColCount = aMatrix[0].getLength();
}
+
virtual void visitNode( sal_Int32 x, sal_Int32 y, const uno::Reference< table::XCell >& xCell )
{
if ( x < nRowCount && y < nColCount )
- processValue( aMatrix[ x ][ y ], xCell );
+ mCellValueSetter.processValue( aMatrix[ x ][ y ], xCell );
else
- processValue( uno::makeAny( sNA ), xCell );
+ mCellValueSetter.processValue( uno::makeAny( sNA ), xCell );
+
}
};
@@ -454,6 +507,35 @@ public:
};
+table::CellRangeAddress getCellRangeAddress( const uno::Any& aParam,
+const uno::Reference< table::XCellRange >& xRanges )
+{
+ uno::Reference< table::XCellRange > xRangeParam;
+ switch ( aParam.getValueTypeClass() )
+ {
+ case uno::TypeClass_STRING:
+ {
+ rtl::OUString rString;
+ aParam >>= rString;
+ xRangeParam = xRanges->getCellRangeByName( rString );
+ break;
+ }
+ case uno::TypeClass_INTERFACE:
+ {
+ uno::Reference< vba::XRange > xRange;
+ aParam >>= xRange;
+ if ( xRange.is() )
+ xRange->getCellRange() >>= xRangeParam;
+ break;
+ }
+ default:
+ throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Can't extact CellRangeAddress from type" ) ), uno::Reference< uno::XInterface >() );
+ }
+ uno::Reference< sheet::XCellRangeAddressable > xAddressable( xRangeParam, uno::UNO_QUERY_THROW );
+ return xAddressable->getRangeAddress();
+}
+
+
ScVbaRange::ScVbaRange( const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< table::XCellRange >& xRange, sal_Bool bIsRows, sal_Bool bIsColumns ) throw( lang::IllegalArgumentException )
:OPropertyContainer(GetBroadcastHelper())
,mxRange( xRange ),
@@ -500,29 +582,35 @@ ScVbaRange::visitArray( ArrayVisitor& visitor )
-
-uno::Any SAL_CALL
-ScVbaRange::getValue() throw (uno::RuntimeException)
+uno::Any
+ScVbaRange::getValue( ValueGetter& valueGetter) throw (uno::RuntimeException)
{
uno::Reference< table::XColumnRowRange > xColumnRowRange(mxRange, uno::UNO_QUERY_THROW );
// single cell range
if ( isSingleCellRange() )
{
- CellValueGetter getter;
- visitArray( getter );
- return getter.getValue();
+ visitArray( valueGetter );
+ return valueGetter.getValue();
}
sal_Int32 nRowCount = xColumnRowRange->getRows()->getCount();
sal_Int32 nColCount = xColumnRowRange->getColumns()->getCount();
// multi cell range ( return array )
- Dim2ArrayValueGetter getter( nRowCount, nColCount );
- visitArray( getter );
- return makeAny( uno::Reference< vba::XArrayWrapper >( new ScArrayWrapper( getter.getValue(), sal_False ) ) );
+ Dim2ArrayValueGetter arrayGetter( nRowCount, nColCount, valueGetter );
+ visitArray( arrayGetter );
+ return uno::makeAny( script::ArrayWrapper( sal_False, arrayGetter.getValue() ) );
+}
+
+uno::Any SAL_CALL
+ScVbaRange::getValue() throw (uno::RuntimeException)
+{
+ CellValueGetter valueGetter;
+ return getValue( valueGetter );
}
-void SAL_CALL
-ScVbaRange::setValue( const uno::Any &aValue ) throw (uno::RuntimeException)
+
+void
+ScVbaRange::setValue( const uno::Any &aValue, ValueSetter& valueSetter ) throw (uno::RuntimeException)
{
uno::TypeClass aClass = aValue.getValueTypeClass();
if ( aClass == uno::TypeClass_SEQUENCE )
@@ -536,13 +624,13 @@ ScVbaRange::setValue( const uno::Any &aValue ) throw (uno::RuntimeException)
if ( aValue.getValueTypeName().indexOf('[') == aValue.getValueTypeName().lastIndexOf('[') )
{
aConverted = xConverter->convertTo( aValue, getCppuType((uno::Sequence< uno::Any >*)0) );
- Dim1ArrayValueSetter setter( aConverted );
+ Dim1ArrayValueSetter setter( aConverted, valueSetter );
visitArray( setter );
}
else
{
aConverted = xConverter->convertTo( aValue, getCppuType((uno::Sequence< uno::Sequence< uno::Any > >*)0) );
- Dim2ArrayValueSetter setter( aConverted );
+ Dim2ArrayValueSetter setter( aConverted, valueSetter );
visitArray( setter );
}
}
@@ -555,11 +643,17 @@ ScVbaRange::setValue( const uno::Any &aValue ) throw (uno::RuntimeException)
}
else
{
- CellValueSetter setter( aValue );
- visitArray( setter );
+ visitArray( valueSetter );
}
}
+void SAL_CALL
+ScVbaRange::setValue( const uno::Any &aValue ) throw (uno::RuntimeException)
+{
+ CellValueSetter valueSetter( aValue );
+ setValue( aValue, valueSetter );
+}
+
void
ScVbaRange::Clear() throw (uno::RuntimeException)
{
@@ -598,20 +692,21 @@ ScVbaRange::ClearFormats() throw (uno::RuntimeException)
xSheetOperation->clearContents(sheet::CellFlags::HARDATTR | sheet::CellFlags::FORMATTED | sheet::CellFlags::EDITATTR);
}
-::rtl::OUString
+uno::Any
ScVbaRange::getFormula() throw (::com::sun::star::uno::RuntimeException)
{
- uno::Reference< table::XCell > xCell( mxRange->getCellByPosition( 0, 0 ), uno::UNO_QUERY_THROW );
- return xCell->getFormula();
+ CellFormulaValueGetter valueGetter;
+ return getValue( valueGetter );
}
void
-ScVbaRange::setFormula(const ::rtl::OUString &rFormula ) throw (uno::RuntimeException)
+ScVbaRange::setFormula(const uno::Any &rFormula ) throw (uno::RuntimeException)
{
- setValue( uno::makeAny( rFormula ) );
+ CellFormulaValueSetter formulaValueSetter( rFormula );
+ setValue( rFormula, formulaValueSetter );
}
-::rtl::OUString
+uno::Any
ScVbaRange::getFormulaR1C1() throw (::com::sun::star::uno::RuntimeException)
{
//#TODO FIXME needs its own implementation when R1C1 stuff
@@ -620,7 +715,7 @@ ScVbaRange::getFormulaR1C1() throw (::com::sun::star::uno::RuntimeException)
}
void
-ScVbaRange::setFormulaR1C1(const ::rtl::OUString &rFormula ) throw (uno::RuntimeException)
+ScVbaRange::setFormulaR1C1(const uno::Any& rFormula ) throw (uno::RuntimeException)
{
//#TODO FIXME needs its own implementation when R1C1 stuff
// is available
@@ -768,51 +863,69 @@ ScVbaRange::Characters(const uno::Any& Start, const uno::Any& Length) throw (uno
}
::rtl::OUString
-ScVbaRange::Address() throw (uno::RuntimeException)
+ScVbaRange::Address( const uno::Any& RowAbsolute, const uno::Any& ColumnAbsolute, const uno::Any& ReferenceStyle, const uno::Any& External, const uno::Any& RelativeTo ) throw (uno::RuntimeException)
{
- ::rtl::OUString aStart, aEnd;
- uno::Sequence< uno::Any > aAddrArray1, aAddrArray2;
-
- uno::Reference< lang::XMultiComponentFactory > xSMgr( m_xContext->getServiceManager(), uno::UNO_QUERY_THROW );
-
- uno::Reference< sheet::XFunctionAccess > xFunctionAccess(
- xSMgr->createInstanceWithContext(::rtl::OUString::createFromAscii(
- "com.sun.star.sheet.FunctionAccess"), m_xContext),
- ::uno::UNO_QUERY_THROW );
- uno::Reference< sheet::XCellRangeAddressable > xCellRangeAddressable( mxRange, ::uno::UNO_QUERY_THROW );
- if( aAddrArray1.getLength() == 0 )
+ ScAddress::Details dDetails( ScAddress::CONV_XL_A1, 0, 0 );
+ if ( ReferenceStyle.hasValue() )
{
- aAddrArray1.realloc(2);
- uno::Any* aArray = aAddrArray1.getArray();
- aArray[0] = ( uno::Any )( xCellRangeAddressable->getRangeAddress().StartRow + 1 );
- aArray[1] = ( uno::Any )( xCellRangeAddressable->getRangeAddress().StartColumn + 1 );
+ sal_Int32 refStyle = vba::Excel::XlReferenceStyle::xlA1;
+ ReferenceStyle >>= refStyle;
+ if ( refStyle == vba::Excel::XlReferenceStyle::xlR1C1 )
+ dDetails = ScAddress::Details( ScAddress::CONV_XL_R1C1, 0, 0 );
}
- uno::Any aString1 = xFunctionAccess->callFunction(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ADDRESS")), aAddrArray1);
- aString1 >>= aStart;
-
- if( xCellRangeAddressable->getRangeAddress().StartColumn == xCellRangeAddressable->getRangeAddress().EndColumn &&
- xCellRangeAddressable->getRangeAddress().StartRow == xCellRangeAddressable->getRangeAddress().EndRow )
- return aStart;
-
- String aString(aStart);
- aStart = rtl::OUString(aString.Append((sal_Unicode)':'));
- if( aAddrArray2.getLength() == 0 )
+ USHORT nFlags = SCA_VALID;
+ ScDocument* pDoc = getDocumentFromRange( mxRange );
+ RangeHelper thisRange( mxRange );
+ table::CellRangeAddress thisAddress = thisRange.getCellRangeAddressable()->getRangeAddress();
+ ScRange aRange( thisAddress.StartColumn, thisAddress.StartRow, thisAddress.Sheet, thisAddress.EndColumn, thisAddress.EndRow, thisAddress.Sheet );
+ String sRange;
+ USHORT ROW_ABSOLUTE = ( SCA_ROW_ABSOLUTE | SCA_ROW2_ABSOLUTE );
+ USHORT COL_ABSOLUTE = ( SCA_COL_ABSOLUTE | SCA_COL2_ABSOLUTE );
+ // default
+ nFlags |= ( SCA_TAB_ABSOLUTE | SCA_COL_ABSOLUTE | SCA_ROW_ABSOLUTE | SCA_TAB2_ABSOLUTE | SCA_COL2_ABSOLUTE | SCA_ROW2_ABSOLUTE );
+ if ( RowAbsolute.hasValue() )
{
- aAddrArray2.realloc(2);
- uno::Any* aArray = aAddrArray2.getArray();
- aArray[0] = ( uno::Any )( xCellRangeAddressable->getRangeAddress().EndRow + 1 );
- aArray[1] = ( uno::Any )( xCellRangeAddressable->getRangeAddress().EndColumn + 1 );
+ sal_Bool bVal = sal_True;
+ RowAbsolute >>= bVal;
+ if ( !bVal )
+ nFlags &= ~ROW_ABSOLUTE;
}
- uno::Any aString2 = xFunctionAccess->callFunction(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ADDRESS")), aAddrArray2);
- aString2 >>= aEnd;
- return aStart.concat( aEnd );
+ if ( ColumnAbsolute.hasValue() )
+ {
+ sal_Bool bVal = sal_True;
+ ColumnAbsolute >>= bVal;
+ if ( !bVal )
+ nFlags &= ~COL_ABSOLUTE;
+ }
+ sal_Bool bLocal = sal_False;
+ if ( External.hasValue() )
+ {
+ External >>= bLocal;
+ if ( bLocal )
+ nFlags |= SCA_TAB_3D;
+ }
+ if ( RelativeTo.hasValue() )
+ {
+ // #TODO should I throw an error if R1C1 is not set?
+
+ uno::Reference< table::XCellRange > xRanges = thisRange.getCellRangeFromSheet();
+ table::CellRangeAddress refAddress = getCellRangeAddress( RelativeTo, xRanges );
+ dDetails = ScAddress::Details( ScAddress::CONV_XL_R1C1, refAddress.StartRow, refAddress.StartColumn );
+ }
+ aRange.Format( sRange, nFlags, pDoc, dDetails );
+ return sRange;
}
uno::Reference < vba::XFont >
ScVbaRange::Font() throw (uno::RuntimeException)
{
uno::Reference< beans::XPropertySet > xProps(mxRange, ::uno::UNO_QUERY );
- return uno::Reference< vba::XFont >( new ScVbaFont( xProps ) );
+ ScDocument* pDoc = getDocumentFromRange(mxRange);
+ if ( !pDoc )
+ throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Failed to access document from shell" ) ), uno::Reference< uno::XInterface >() );
+
+ ScVbaPalette aPalette( pDoc->GetDocumentShell() );
+ return uno::Reference< vba::XFont >( new ScVbaFont( aPalette, xProps ) );
}
uno::Reference< vba::XRange >
@@ -884,20 +997,35 @@ ScVbaRange::Rows(const uno::Any& aIndex ) throw (uno::RuntimeException)
uno::Reference< vba::XRange >
ScVbaRange::Columns( const uno::Any& aIndex ) throw (uno::RuntimeException)
{
- sal_Int32 nValue;
- if( !aIndex.hasValue() )
- return uno::Reference< vba::XRange >( new ScVbaRange( m_xContext, mxRange, false, true ) );
- if( aIndex >>= nValue )
+ if ( aIndex.hasValue() )
{
- uno::Reference< sheet::XCellRangeAddressable > xAddressable( mxRange, uno::UNO_QUERY_THROW );
- --nValue;
- return uno::Reference< vba::XRange >( new ScVbaRange( m_xContext, mxRange->getCellRangeByPosition(
- nValue, xAddressable->getRangeAddress().StartRow,
- nValue, xAddressable->getRangeAddress().EndRow ), false, true ) );
+ uno::Reference< vba::XRange > xRange;
+ sal_Int32 nValue;
+ RangeHelper thisRange( mxRange );
+ uno::Reference< sheet::XCellRangeAddressable > xThisRangeAddress = thisRange.getCellRangeAddressable();
+ uno::Reference< table::XCellRange > xRanges = thisRange.getCellRangeFromSheet();
+ table::CellRangeAddress thisRangeAddress = xThisRangeAddress->getRangeAddress();
+ uno::Reference< table::XCellRange > xReferrer = xRanges->getCellRangeByPosition( thisRangeAddress.StartColumn, thisRangeAddress.StartRow, MAXCOL, thisRangeAddress.EndRow );
+
+ if ( aIndex >>= nValue )
+ {
+ --nValue;
+ // col value can expand outside this range
+ // rows however cannot
+
+ thisRangeAddress.StartColumn = nValue;
+ thisRangeAddress.EndColumn = nValue;
+ }
+ else
+ {
+ table::CellRangeAddress relAddress = getCellRangeAddress( aIndex, xRanges );
+ thisRangeAddress.StartColumn = relAddress.StartColumn;
+ thisRangeAddress.EndColumn = relAddress.EndColumn;
+ }
+ return uno::Reference< vba::XRange >( new ScVbaRange( m_xContext, xReferrer->getCellRangeByPosition( thisRangeAddress.StartColumn, thisRangeAddress.StartRow, thisRangeAddress.EndColumn, thisRangeAddress.EndRow ), false, true ) );
}
- // Questionable return, I'm just copying the invalid Any::value path
- // above. Would seem to me that this is an internal error and
- // warrants an exception thrown
+ // otherwise return this object ( e.g for columns property with no
+ // params
return uno::Reference< vba::XRange >( new ScVbaRange( m_xContext, mxRange, false, true ) );
}
@@ -1029,34 +1157,6 @@ uno::Reference< vba::XInterior > ScVbaRange::Interior( ) throw (uno::RuntimeExce
uno::Reference< beans::XPropertySet > xProps( mxRange, uno::UNO_QUERY_THROW );
return uno::Reference<vba::XInterior> (new ScVbaInterior ( m_xContext, xProps, getDocumentFromRange( mxRange ) ));
}
-table::CellRangeAddress getCellRangeAddress( const uno::Any& aParam,
-const uno::Reference< table::XCellRange >& xRanges )
-{
- uno::Reference< table::XCellRange > xRangeParam;
- switch ( aParam.getValueTypeClass() )
- {
- case uno::TypeClass_STRING:
- {
- rtl::OUString rString;
- aParam >>= rString;
- xRangeParam = xRanges->getCellRangeByName( rString );
- break;
- }
- case uno::TypeClass_INTERFACE:
- {
- uno::Reference< vba::XRange > xRange;
- aParam >>= xRange;
- if ( xRange.is() )
- xRange->getCellRange() >>= xRangeParam;
- break;
- }
- default:
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Can't extact CellRangeAddress from type" ) ), uno::Reference< uno::XInterface >() );
- }
- uno::Reference< sheet::XCellRangeAddressable > xAddressable( xRangeParam, uno::UNO_QUERY_THROW );
- return xAddressable->getRangeAddress();
-}
-
uno::Reference< vba::XRange >
ScVbaRange::Range( const uno::Any &Cell1, const uno::Any &Cell2 ) throw (uno::RuntimeException)
{
@@ -1163,12 +1263,26 @@ getPasteFormulaBits( sal_Int16 Operation)
return nFormulaBits;
}
void SAL_CALL
-ScVbaRange::PasteSpecial(sal_Int16 Paste, sal_Int16 Operation, ::sal_Bool SkipBlanks, ::sal_Bool Transpose ) throw (::com::sun::star::uno::RuntimeException)
+ScVbaRange::PasteSpecial( const uno::Any& Paste, const uno::Any& Operation, const uno::Any& SkipBlanks, const uno::Any& Transpose ) throw (::com::sun::star::uno::RuntimeException)
{
- USHORT nFlags = getPasteFlags(Paste);
- USHORT nFormulaBits = getPasteFormulaBits(Operation);
- implnPasteSpecial(nFlags,nFormulaBits,SkipBlanks,Transpose);
+ // set up defaults
+ sal_Int32 nPaste = vba::xlPasteType::xlPasteAll;
+ sal_Int32 nOperation = vba::xlPasteSpecialOperation::xlPasteSpecialOperationNone;
+ sal_Bool bTranspose = sal_False;
+ sal_Bool bSkipBlanks = sal_False;
+
+ if ( Paste.hasValue() )
+ Paste >>= nPaste;
+ if ( Operation.hasValue() )
+ Operation >>= nOperation;
+ if ( SkipBlanks.hasValue() )
+ SkipBlanks >>= bSkipBlanks;
+ if ( Transpose.hasValue() )
+ Transpose >>= bTranspose;
+ USHORT nFlags = getPasteFlags(nPaste);
+ USHORT nFormulaBits = getPasteFormulaBits(nOperation);
+ implnPasteSpecial(nFlags,nFormulaBits,bSkipBlanks,bTranspose);
}
uno::Reference< vba::XRange >
@@ -1610,8 +1724,9 @@ ScVbaRange::End( ::sal_Int32 Direction ) throw (css::uno::RuntimeException)
// the ActiveCell, there should be no need to go to these extreems
// Save ActiveCell pos ( to restore later )
+ uno::Any aDft;
rtl::OUString sActiveCell = ScVbaGlobals::getGlobalsImpl(
- m_xContext )->getApplication()->getActiveCell()->Address();
+ m_xContext )->getApplication()->getActiveCell()->Address(aDft, aDft, aDft, aDft, aDft );
// position current cell upper left of this range
Cells( uno::makeAny( (sal_Int32) 1 ), uno::makeAny( (sal_Int32) 1 ) )->Select();
@@ -1653,7 +1768,7 @@ ScVbaRange::End( ::sal_Int32 Direction ) throw (css::uno::RuntimeException)
// result is the ActiveCell
rtl::OUString sMoved = ScVbaGlobals::getGlobalsImpl(
- m_xContext )->getApplication()->getActiveCell()->Address();
+ m_xContext )->getApplication()->getActiveCell()->Address(aDft, aDft, aDft, aDft, aDft );
// restore old ActiveCell
uno::Any aVoid;
@@ -1685,7 +1800,12 @@ ScVbaRange::characters( const uno::Any& Start, const css::uno::Any& Length ) thr
if ( !isSingleCellRange() )
throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Can't create Characters property for multicell range ") ), uno::Reference< uno::XInterface >() );
uno::Reference< text::XSimpleText > xSimple(mxRange->getCellByPosition(0,0) , uno::UNO_QUERY_THROW );
- return uno::Reference< vba::XCharacters >( new ScVbaCharacters( m_xContext, xSimple, Start, Length ) );
+ ScDocument* pDoc = getDocumentFromRange(mxRange);
+ if ( !pDoc )
+ throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Failed to access document from shell" ) ), uno::Reference< uno::XInterface >() );
+
+ ScVbaPalette aPalette( pDoc->GetDocumentShell() );
+ return uno::Reference< vba::XCharacters >( new ScVbaCharacters( m_xContext, aPalette, xSimple, Start, Length ) );
}
void SAL_CALL
@@ -1773,3 +1893,120 @@ ScVbaRange::getPropertySetInfo( ) throw (uno::RuntimeException)
uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
return xInfo;
}
+
+::rtl::OUString SAL_CALL
+ScVbaRange::getName( ) throw (css::uno::RuntimeException)
+{
+ const static rtl::OUString sName( RTL_CONSTASCII_USTRINGPARAM("Cells") );
+ return sName;
+}
+
+
+uno::Reference< awt::XDevice >
+getDeviceFromDoc( const uno::Reference< frame::XModel >& xModel ) throw( uno::RuntimeException )
+{
+ uno::Reference< frame::XController > xController( xModel->getCurrentController(), uno::UNO_QUERY_THROW );
+ uno::Reference< frame::XFrame> xFrame( xController->getFrame(), uno::UNO_QUERY_THROW );
+ uno::Reference< awt::XDevice > xDevice( xFrame->getComponentWindow(), uno::UNO_QUERY_THROW );
+ return xDevice;
+}
+
+// returns calc internal col. width ( in 1/100 mm )
+double
+ScVbaRange::getCalcColWidth() throw (uno::RuntimeException)
+{
+ double nWidth = 0;
+ uno::Reference< table::XColumnRowRange > xColRowRange( mxRange, uno::UNO_QUERY_THROW );
+ uno::Reference< beans::XPropertySet > xProps( xColRowRange->getColumns(), uno::UNO_QUERY_THROW );
+
+ xProps->getPropertyValue( WIDTH ) >>= nWidth;
+ return nWidth;
+}
+// return Char Width in 1/100 mm
+double getDefaultCharWidth( const uno::Reference< frame::XModel >& xModel ) throw ( uno::RuntimeException )
+{
+ const static rtl::OUString sDflt( RTL_CONSTASCII_USTRINGPARAM("Default"));
+ const static rtl::OUString sCharFontName( RTL_CONSTASCII_USTRINGPARAM("CharFontName"));
+ const static rtl::OUString sPageStyles( RTL_CONSTASCII_USTRINGPARAM("PageStyles"));
+ // get the font from the default style
+ uno::Reference< style::XStyleFamiliesSupplier > xStyleSupplier( xModel, uno::UNO_QUERY_THROW );
+ uno::Reference< container::XNameAccess > xNameAccess( xStyleSupplier->getStyleFamilies(), uno::UNO_QUERY_THROW );
+ uno::Reference< container::XNameAccess > xNameAccess2( xNameAccess->getByName( sPageStyles ), uno::UNO_QUERY_THROW );
+ uno::Reference< beans::XPropertySet > xProps( xNameAccess2->getByName( sDflt ), uno::UNO_QUERY_THROW );
+ rtl::OUString sFontName;
+ xProps->getPropertyValue( sCharFontName ) >>= sFontName;
+
+ uno::Reference< awt::XDevice > xDevice = getDeviceFromDoc( xModel );
+ awt::FontDescriptor aDesc;
+ aDesc.Name = sFontName;
+ uno::Reference< awt::XFont > xFont( xDevice->getFont( aDesc ), uno::UNO_QUERY_THROW );
+ double nCharPixelWidth = xFont->getCharWidth( (sal_Int8)'0' );
+
+ double nPixelsPerMeter = xDevice->getInfo().PixelPerMeterX;
+
+ double nCharWidth = nCharPixelWidth / nPixelsPerMeter;
+ nCharWidth = nCharWidth * (double)100 * (double)1000;
+
+ return nCharWidth;
+}
+
+uno::Any SAL_CALL
+ScVbaRange::getColumnWidth() throw (uno::RuntimeException)
+{
+ double dfltCharWidth = 0;
+ ScDocShell* pShell = getDocShellFromRange( mxRange );
+ if ( pShell )
+ {
+ uno::Reference< frame::XModel > xModel = pShell->GetModel();
+ if ( xModel.is() )
+ dfltCharWidth = getCalcColWidth() / getDefaultCharWidth( xModel );
+ }
+ return uno::makeAny( dfltCharWidth );
+}
+
+void SAL_CALL
+ScVbaRange::setColumnWidth( const uno::Any& _columnwidth ) throw (uno::RuntimeException)
+{
+ double nColWidth = 0;
+ _columnwidth >>= nColWidth;
+ ScDocShell* pShell = getDocShellFromRange( mxRange );
+ if ( pShell )
+ {
+ uno::Reference< frame::XModel > xModel = pShell->GetModel();
+ if ( xModel.is() )
+ {
+ uno::Reference< table::XColumnRowRange > xColRowRange( mxRange, uno::UNO_QUERY_THROW );
+ uno::Reference< beans::XPropertySet > xProps( xColRowRange->getColumns(), uno::UNO_QUERY_THROW );
+ xProps->setPropertyValue( WIDTH, uno::makeAny( sal_Int32 ( getDefaultCharWidth( xModel ) * nColWidth ) ) );
+ }
+ }
+}
+
+uno::Any SAL_CALL
+ScVbaRange::getWidth() throw (uno::RuntimeException)
+{
+
+ double nWidth = getCalcColWidth();
+ // Width is in 1/100 mm
+ // * 1 point = 1/72 inch = 20 twips
+ // * 1 inch = 72 points = 1440 twips
+ // * 1 cm = 567 twips
+
+ // convert width to Points
+ nWidth = ( (double)((nWidth /1000 ) * 567 ) / 20 );
+ return uno::makeAny( (sal_Int32)nWidth );
+}
+
+void SAL_CALL
+ScVbaRange::setWidth( const uno::Any& _width ) throw (css::uno::RuntimeException)
+{
+ double nWidth; // Incomming width is in points
+ _width >>= nWidth;
+ // Convert nWidth to 1/100 mm
+ nWidth = (double)( ( nWidth * 20 ) / 567 );
+ nWidth = (nWidth * 1000);
+ uno::Reference< table::XColumnRowRange > xColRowRange( mxRange, uno::UNO_QUERY_THROW );
+ uno::Reference< beans::XPropertySet > xProps( xColRowRange->getColumns(), uno::UNO_QUERY_THROW );
+ xProps->setPropertyValue( WIDTH , uno::makeAny( (sal_Int32)nWidth ) );
+}
+
diff --git a/scratch/sc-vba/vbarange.hxx b/scratch/sc-vba/vbarange.hxx
index 76adbace9..b8de4f951 100644
--- a/scratch/sc-vba/vbarange.hxx
+++ b/scratch/sc-vba/vbarange.hxx
@@ -3,6 +3,7 @@
#include <cppuhelper/implbase1.hxx>
#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/implbase3.hxx>
#include <com/sun/star/container/XEnumerationAccess.hpp>
#include <org/openoffice/vba/XRange.hpp>
@@ -17,6 +18,7 @@
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <com/sun/star/script/XTypeConverter.hpp>
+#include <com/sun/star/script/XDefaultMethod.hpp>
#include <com/sun/star/sheet/FillDateMode.hpp>
#include <com/sun/star/sheet/FillMode.hpp>
#include <com/sun/star/sheet/FillDirection.hpp>
@@ -26,12 +28,31 @@
class ScTableSheetsObj;
-typedef ::cppu::WeakImplHelper2< oo::vba::XRange, css::container::XEnumerationAccess > ScVbaRange_BASE;
+typedef ::cppu::WeakImplHelper3< oo::vba::XRange, css::container::XEnumerationAccess, css::script::XDefaultMethod > ScVbaRange_BASE;
class ArrayVisitor
{
public:
virtual void visitNode( sal_Int32 x, sal_Int32 y, const css::uno::Reference< css::table::XCell >& xCell ) = 0;
};
+
+class ValueSetter : public ArrayVisitor
+{
+public:
+ virtual bool processValue( const css::uno::Any& aValue, const css::uno::Reference< css::table::XCell >& xCell ) = 0;
+
+
+};
+
+class ValueGetter : public ArrayVisitor
+{
+
+public:
+ virtual void processValue( sal_Int32 x, sal_Int32 y, const css::uno::Any& aValue ) = 0;
+ virtual const css::uno::Any& getValue() const = 0;
+};
+
+
+
class ScVbaRange : public ScVbaRange_BASE
,public ::comphelper::OMutexAndBroadcastHelper
,public ::comphelper::OPropertyContainer
@@ -42,6 +63,7 @@ class ScVbaRange : public ScVbaRange_BASE
sal_Bool mbIsRows;
sal_Bool mbIsColumns;
rtl::OUString msDftPropName;
+ double getCalcColWidth() throw (css::uno::RuntimeException);
void visitArray( ArrayVisitor& vistor );
css::uno::Reference< css::script::XTypeConverter > getTypeConverter() throw (css::uno::RuntimeException);
@@ -50,6 +72,8 @@ class ScVbaRange : public ScVbaRange_BASE
void fillSeries( css::sheet::FillDirection nFillDirection, css::sheet::FillMode nFillMode, css::sheet::FillDateMode nFillDateMode, double fStep, double fEndValue ) throw( css::uno::RuntimeException );
void ClearContents( sal_Int32 nFlags ) throw (css::uno::RuntimeException);
+ virtual void setValue( const css::uno::Any& aValue, ValueSetter& setter) throw ( css::uno::RuntimeException);
+ virtual css::uno::Any getValue( ValueGetter& rValueGetter ) throw (css::uno::RuntimeException);
public:
ScVbaRange( const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Reference< css::table::XCellRange >& xRange, sal_Bool bIsRows = false, sal_Bool bIsColumns = false ) throw ( css::lang::IllegalArgumentException );
@@ -62,10 +86,10 @@ public:
// Attributes
virtual css::uno::Any SAL_CALL getValue() throw (css::uno::RuntimeException);
virtual void SAL_CALL setValue( const css::uno::Any& aValue ) throw ( css::uno::RuntimeException);
- virtual ::rtl::OUString SAL_CALL getFormula() throw (css::uno::RuntimeException);
- virtual void SAL_CALL setFormula( const ::rtl::OUString &rFormula ) throw (css::uno::RuntimeException);
- virtual ::rtl::OUString SAL_CALL getFormulaR1C1() throw (css::uno::RuntimeException);
- virtual void SAL_CALL setFormulaR1C1( const ::rtl::OUString &rFormula ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL getFormula() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setFormula( const css::uno::Any& rFormula ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL getFormulaR1C1() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setFormulaR1C1( const css::uno::Any &rFormula ) throw (css::uno::RuntimeException);
virtual double SAL_CALL getCount() throw (css::uno::RuntimeException);
virtual ::sal_Int32 SAL_CALL getRow() throw (css::uno::RuntimeException);
virtual ::sal_Int32 SAL_CALL getColumn() throw (css::uno::RuntimeException);
@@ -83,6 +107,11 @@ public:
virtual css::uno::Reference< oo::vba::XComment > SAL_CALL getComment() throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL getHidden() throw (css::uno::RuntimeException);
virtual void SAL_CALL setHidden( const css::uno::Any& _hidden ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL getColumnWidth() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setColumnWidth( const css::uno::Any& _columnwidth ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL getWidth() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setWidth( const css::uno::Any& _width ) throw (css::uno::RuntimeException);
+
// Methods
sal_Bool IsRows() { return mbIsRows; }
sal_Bool IsColumns() { return mbIsColumns; }
@@ -101,7 +130,9 @@ public:
virtual css::uno::Reference< oo::vba::XRange > SAL_CALL CurrentArray() throw (css::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL Characters( const css::uno::Any& nIndex, const css::uno::Any& nCount )
throw (css::uno::RuntimeException);
- virtual ::rtl::OUString SAL_CALL Address() throw (css::uno::RuntimeException);
+
+ virtual ::rtl::OUString SAL_CALL Address( const css::uno::Any& RowAbsolute, const css::uno::Any& ColumnAbsolute, const css::uno::Any& ReferenceStyle, const css::uno::Any& External, const css::uno::Any& RelativeTo ) throw (css::uno::RuntimeException);
+
virtual css::uno::Reference< oo::vba::XRange > SAL_CALL Cells( const css::uno::Any &nRow, const css::uno::Any &nCol )
throw (css::uno::RuntimeException);
virtual void SAL_CALL Select() throw (css::uno::RuntimeException);
@@ -116,7 +147,7 @@ public:
virtual css::uno::Reference< oo::vba::XRange > SAL_CALL Range( const css::uno::Any &Cell1, const css::uno::Any &Cell2 )
throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL getCellRange( ) throw (css::uno::RuntimeException);
- virtual void SAL_CALL PasteSpecial( sal_Int16 Paste, sal_Int16 Operation, ::sal_Bool SkipBlanks, ::sal_Bool Transpose ) throw (css::uno::RuntimeException);
+ virtual void SAL_CALL PasteSpecial( const css::uno::Any& Paste, const css::uno::Any& Operation, const css::uno::Any& SkipBlanks, const css::uno::Any& Transpose ) throw (css::uno::RuntimeException);
virtual ::sal_Bool SAL_CALL Replace( const ::rtl::OUString& What, const ::rtl::OUString& Replacement, const css::uno::Any& LookAt, const css::uno::Any& SearchOrder, const css::uno::Any& MatchCase, const css::uno::Any& MatchByte, const css::uno::Any& SearchFormat, const css::uno::Any& ReplaceFormat ) throw (css::uno::RuntimeException);
virtual void SAL_CALL Sort( const css::uno::Any& Key1, const css::uno::Any& Order1, const css::uno::Any& Key2, const css::uno::Any& Type, const css::uno::Any& Order2, const css::uno::Any& Key3, const css::uno::Any& Order3, const css::uno::Any& Header, const css::uno::Any& OrderCustom, const css::uno::Any& MatchCase, const css::uno::Any& Orientation, const css::uno::Any& SortMethod, const css::uno::Any& DataOption1, const css::uno::Any& DataOption2, const css::uno::Any& DataOption3 ) throw (css::uno::RuntimeException);
virtual css::uno::Reference< oo::vba::XRange > SAL_CALL End( ::sal_Int32 Direction ) throw (css::uno::RuntimeException);
@@ -143,6 +174,9 @@ public:
}
virtual sal_Bool SAL_CALL hasElements() throw (css::uno::RuntimeException);
+ // XDefaultMethod
+ ::rtl::OUString SAL_CALL getName( ) throw (css::uno::RuntimeException);
+
protected:
// OPropertySetHelper
virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper();
diff --git a/scratch/sc-vba/vbaworkbook.hxx b/scratch/sc-vba/vbaworkbook.hxx
index bac6c321a..743689e70 100644
--- a/scratch/sc-vba/vbaworkbook.hxx
+++ b/scratch/sc-vba/vbaworkbook.hxx
@@ -34,7 +34,7 @@ public:
virtual void SAL_CALL setSaved( sal_Bool bSave ) throw (css::uno::RuntimeException);
// Methods
- virtual css::uno::Any Worksheets( const css::uno::Any& aIndex ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL Worksheets( const css::uno::Any& aIndex ) throw (css::uno::RuntimeException);
virtual void SAL_CALL Close( const css::uno::Any &bSaveChanges,
const css::uno::Any &aFileName,
const css::uno::Any &bRouteWorkbook ) throw (css::uno::RuntimeException);
diff --git a/scratch/sc-vba/vbaworksheet.hxx b/scratch/sc-vba/vbaworksheet.hxx
index bfbdf7876..b84176ee3 100644
--- a/scratch/sc-vba/vbaworksheet.hxx
+++ b/scratch/sc-vba/vbaworksheet.hxx
@@ -44,8 +44,8 @@ public:
// Attributes
virtual ::rtl::OUString SAL_CALL getName() throw (css::uno::RuntimeException);
virtual void SAL_CALL setName( const ::rtl::OUString &rName ) throw (css::uno::RuntimeException);
- virtual sal_Bool getVisible() throw (css::uno::RuntimeException);
- virtual void setVisible( sal_Bool bVisible ) throw (css::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL getVisible() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setVisible( sal_Bool bVisible ) throw (css::uno::RuntimeException);
virtual ::sal_Int32 SAL_CALL getStandardWidth() throw (css::uno::RuntimeException);
virtual ::sal_Int32 SAL_CALL getStandardHeight() throw (css::uno::RuntimeException);
virtual ::sal_Bool SAL_CALL getProtectionMode() throw (css::uno::RuntimeException);
@@ -72,8 +72,8 @@ public:
virtual void SAL_CALL CheckSpelling( const css::uno::Any& CustomDictionary,const css::uno::Any& IgnoreUppercase,const css::uno::Any& AlwaysSuggest, const css::uno::Any& SpellingLang ) throw (css::uno::RuntimeException);
// Hacks (?)
virtual css::uno::Reference< oo::vba::XRange > SAL_CALL Cells( const css::uno::Any &nRow, const css::uno::Any &nCol ) throw (css::uno::RuntimeException);
- virtual css::uno::Reference< oo::vba::XRange > Rows(const css::uno::Any& aIndex ) throw (css::uno::RuntimeException);
- virtual css::uno::Reference< oo::vba::XRange > Columns(const css::uno::Any& aIndex ) throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< oo::vba::XRange > SAL_CALL Rows(const css::uno::Any& aIndex ) throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< oo::vba::XRange > SAL_CALL Columns(const css::uno::Any& aIndex ) throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL Evaluate( const ::rtl::OUString& Name ) throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL PivotTables( const css::uno::Any& Index ) throw (css::uno::RuntimeException);
diff --git a/src/Debian.dic b/src/Debian.dic
new file mode 100644
index 000000000..05bbd2d60
--- /dev/null
+++ b/src/Debian.dic
@@ -0,0 +1,10 @@
+OOoDICT1
+lang: <none>
+type: positive
+---
+Debian
+SPI
+woody
+sarge
+etch
+sid