diff options
author | nobody <nobody@gnome.org> | 2006-07-14 17:07:50 +0000 |
---|---|---|
committer | nobody <nobody@gnome.org> | 2006-07-14 17:07:50 +0000 |
commit | da2453fba5e9fbc68123f2c847b0439e62cbf8eb (patch) | |
tree | b4d3651ddad7593a7359d9c251e1ab254be54d96 | |
parent | 1eda7dba187dc22aab241aca69587a6b5dcd048a (diff) |
This commit was manufactured by cvs2svn to create tagOOO_BUILD_2_0_2_17
'OOO_BUILD_2_0_2_17'.
82 files changed, 9228 insertions, 9523 deletions
@@ -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 Binary files differindex 63f04c711..2c7dca6ef 100644 --- a/fonts/opens___.ttf +++ b/fonts/opens___.ttf 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 ('&', "&"); ++ MAP ('<', "<"); ++ MAP ('>', ">"); ++ MAP ('\'', "'"); ++ MAP ('"', """); ++ 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 |