summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobody <nobody@gnome.org>2006-06-29 17:55:01 +0000
committernobody <nobody@gnome.org>2006-06-29 17:55:01 +0000
commit272ab09ace3b7fe533c0eb282ebd080d40d95048 (patch)
treea7228b8342217466a1b36a2612afec80df8b17da
parentf779795f7abc6518456798136c4b017f121e11dd (diff)
This commit was manufactured by cvs2svn to create tagOOO_BUILD_2_0_2_16
'OOO_BUILD_2_0_2_16'.
-rw-r--r--AUTHORS2
-rw-r--r--NEWS160
-rwxr-xr-xbin/font-munge107
-rwxr-xr-xbin/help-font-munge50
-rwxr-xr-xbin/package-ooo193
-rw-r--r--bin/potores88
-rwxr-xr-xbin/setup.in7
-rwxr-xr-xbin/unpack11
-rw-r--r--desktop/calc.desktop.in1
-rw-r--r--distro-configs/Frugalware.conf.in10
-rw-r--r--distro-configs/Gentoo.conf.in1
-rw-r--r--distro-configs/SUSE-10.1.conf.in19
-rw-r--r--distro-configs/SUSE-9.1.conf.in1
-rw-r--r--doc/local.txt8
-rw-r--r--doc/stat-localizations.txt65
-rwxr-xr-xdownload.in3
-rw-r--r--fonts/OpenSymbol.sfd17
-rw-r--r--fonts/opens___.ttfbin118264 -> 118264 bytes
-rw-r--r--patches/cairo/cairo-canvas-clip-more.diff58
-rw-r--r--patches/cairo/cairo-query-text-bounds.diff210
-rw-r--r--patches/evo2/dbaccess-evo-changes.diff29
-rw-r--r--patches/src680/apply381
-rw-r--r--patches/src680/automation-testtool-oobuildfix.diff29
-rw-r--r--patches/src680/buildfix-no-java-ppc.diff11
-rw-r--r--patches/src680/buildfix-testtool-skip-gij-ppc-hack.diff9
-rw-r--r--patches/src680/buildfix-tg-config-gij-ppc-hack.diff81
-rw-r--r--patches/src680/config_office-dbus-check.diff40
-rw-r--r--patches/src680/config_office-freetype-embolden-check.diff40
-rw-r--r--patches/src680/crash-menu-escape.diff13
-rw-r--r--patches/src680/cws-atkbridge-20060425.diff8312
-rw-r--r--patches/src680/dbase-utf8.diff98
-rw-r--r--patches/src680/disable-access.diff2
-rw-r--r--patches/src680/fix-fileview-search.diff20
-rw-r--r--patches/src680/fix_filedlghelper.diff31
-rw-r--r--patches/src680/frugalware.diff31
-rw-r--r--patches/src680/gcj-32bit-runtime-path.diff20
-rw-r--r--patches/src680/gengal-cleanup.diff203
-rw-r--r--patches/src680/gui-gtk-contextmenu.diff16
-rw-r--r--patches/src680/help-msg-add-package-info.diff11
-rw-r--r--patches/src680/helpcontent2-greek-fonts.diff75
-rw-r--r--patches/src680/ms-interoperability-email-attachment-as-doc-xls-ppt-m99.diff42
-rw-r--r--patches/src680/ooqstart-black-progress-bar.diff27
-rw-r--r--patches/src680/recently-used.diff71
-rw-r--r--patches/src680/sc-datapilot-autoformat.diff11
-rw-r--r--patches/src680/sc-dp-hash-items.diff950
-rw-r--r--patches/src680/sc-get-pivot-data.diff65
-rw-r--r--patches/src680/sc-paste-dialog.diff47
-rw-r--r--patches/src680/sc-r1c1.diff79
-rw-r--r--patches/src680/sc-source-ui-unobj-funcuno-cxx.diff15
-rw-r--r--patches/src680/sc-standard-filter-options-i18n-fake.diff587
-rw-r--r--patches/src680/sc-standard-filter-options-i18n.diff131
-rw-r--r--patches/src680/sc-string-arg.diff19
-rw-r--r--patches/src680/sd-sls-process-request-crash-fix.diff32
-rw-r--r--patches/src680/sdk-filenames-with-dollar.diff15
-rw-r--r--patches/src680/sensible-browser.diff4
-rw-r--r--patches/src680/speed-local-link-except.diff223
-rw-r--r--patches/src680/speed-local-link.diff142
-rw-r--r--patches/src680/speed-ooqstart-options.diff18
-rw-r--r--patches/src680/speed-quickstart-i18n.diff72
-rw-r--r--patches/src680/styles-dash.diff273
-rw-r--r--patches/src680/svx-vbaimport-basic-hang.diff25
-rw-r--r--patches/src680/system-neon-0.26.diff278
-rw-r--r--patches/src680/tools-smb-url.diff60
-rw-r--r--patches/src680/vcl-fontconfig-hints.diff618
-rw-r--r--patches/src680/vcl-glyphs-cjk-embolden.diff170
-rw-r--r--patches/src680/win32-activex-disable.diff278
-rw-r--r--patches/test/ooxml-filter.diff61
-rw-r--r--patches/test/sc-source-filter-ecma-ecma-cxx.diff318
-rw-r--r--patches/test/sc-source-filter-ecma-parsebase-hxx.diff50
-rw-r--r--scratch/sc-vba/vbaapplication.hxx10
-rw-r--r--scratch/sc-vba/vbachartobjects.cxx4
-rw-r--r--scratch/sc-vba/vbacollectionimpl.cxx10
-rw-r--r--scratch/sc-vba/vbacollectionimpl.hxx8
-rw-r--r--scratch/sc-vba/vbafont.cxx251
-rw-r--r--scratch/sc-vba/vbafont.hxx28
-rw-r--r--scratch/sc-vba/vbaglobals.cxx27
-rw-r--r--scratch/sc-vba/vbapalette.cxx72
-rw-r--r--scratch/sc-vba/vbapalette.hxx20
-rw-r--r--scratch/sc-vba/vbawindow.cxx8
-rw-r--r--scratch/sc-vba/vbaworkbook.cxx21
-rw-r--r--scratch/sc-vba/vbaworkbook.hxx2
-rw-r--r--scratch/sc-vba/vbaworksheet.hxx8
-rw-r--r--src/Debian.dic10
-rw-r--r--src/Novell.dic5
84 files changed, 15222 insertions, 406 deletions
diff --git a/AUTHORS b/AUTHORS
index 5d2fed48b..fb1ff1d5a 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,4 +1,4 @@
-Michael Meeks <michael@ximian.com>
+Michael Meeks <michael.meeks@novell.com>
Chris Halls <halls@debian.org>
Federico Mena <federico@ximian.com>
Martin Kretzschmar <martink@ximian.com>
diff --git a/NEWS b/NEWS
index bd6050c2c..f60d59a28 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,164 @@
-ooo-build-2.0.2.1
+ooo-build-2.0.2.16
+
+ + build bits:
+ + use freetype emboldening only when available (Noel, Petr)
+ + use dbus features only when available (Radek)
+
+ooo-build-2.0.2.15
+
+ + bug fixes:
+ * clipping problem in case cached primitive is used (Radek)
+ * reading of freed memory in slidesorter (Radek)
+ + build bits:
+ * file lists on ppc with gcj (Petr)
+
+ooo-build-2.0.2.14
+
+ + bug fixes:
+ * ~/.recently-used corruption (Michael)
+
+ooo-build-2.0.2.13
+
+ + bug fixes:
+ + use correct context in the VBA stuff (Noel)
+ + missing string for the quickstarter check-box (Petr)
+ + some i18n fixes (Petr)
+ + build bits:
+ + lang-specific custom actions for the Win32 MSI installer (Tor)
+ + updated Debian, Frugalware bits (Rene, Miklos)
+
+ooo-build-2.0.2.12
+
+ + bug fixes:
+ + lots fixes in the VBA stuff (Noel)
+ + problems with cropped text sprites (Radek)
+ + problem with text animations (Rodo)
+ + printing from samba share (Radek)
+ + slideshow rendered incorrectly on Xgl (Radek)
+ + bibliographic encoding (Michael)
+ + crasher dismissing menus (Michael)
+ + top-level basic-shapes icon (Michael)
+ + metrics of the font Open Symbol (Radek)
+ + poke gnome screensaver during slideshow (Radek)
+ + automatically wrap text inside shapes (Radek)
+ + backport of some fixes for the certificates stuff (Petr)
+ + build bits:
+ + gengal stuff clean up, saves 7MBs (Petr)
+ + updated Debian, Frugalware bits (Rene, Miklos)
+
+ooo-build-2.0.2.11
+
+ + bug fixes:
+ + context menu behavior fix (Michael)
+ + large pivot tables were unusable slow (Jody)
+ + build bits:
+ + build of VBAObjects under Win32 (Tor,Noel)
+
+ooo-build-2.0.2.10
+
+ + features:
+ + more i18n support (Michael)
+ + bug fixes:
+ + better fake bold for big cjk fonts (Jian, Noel)
+ + some new font attributes for the VBA stuff (Maho)
+ + some more fixes for the VBA stuff (Novel)
+ + using any filter when browsing samba shares (Noel)
+ + missing strlen check (Noel)
+ + build bits:
+ + sort-order of files in extra galleries (Petr)
+ + build with the shell sh (Maho, Rene)
+ + updated Debian bits (Rene)
+
+ooo-build-2.0.2.9
+
+ + features:
+ + more i18n support (Michael)
+ + bug fixes:
+ + typo in gcj 32-bit run time paths (Matthias)
+ + disable ActiveX more thoroughly (Tor)
+ + lots fixes in the VBA stuff (Noel)
+ + build bits:
+ + timestamp to the build version for Win32 (Tor)
+ + support to remove poor help localizations (Petr)
+ + updated Debian bits (Rene)
+
+ooo-build-2.0.2.8
+ features:
+ + support for OOo SDK packaging (Petr)
+ + optimization / speedup:
+ + optimization for loading large pivot tables from xls (Jody)
+ + bug fixes:
+ + crash in fileview (Jian)
+ + layout hang (Jian)
+ + attempting to access current document fails in VBA (Noel)
+ + default Greek fonts definition (Petr)
+ + small problems with preferred font order (Petr)
+ + missing minor version number in versionrc (Petr)
+ + synced atkbridge fixes with CWS (Michael)
+ + Writer/Web desktop category (Petr)
+ + build bits:
+ + know more languages (Matthias)
+ + helper script for removing win32 specific crud from patches (Michael)
+ + updated Debian, Ubuntu bits (Matthias)
+
+ooo-build-2.0.2.7
+
+ + bug fixes:
+ + crash when selecting email application (Giuseppe)
+ + build bits:
+ + problems with checkdll.sh (Petr, Andreas)
+
+ooo-build-2.0.2.6
+
+ + bug fixes:
+ + crash when selecting email application (Martin)
+ + allow right-click if focus is set to mouse in Metacity (Matthias)
+ + prefer Calc over Gnumeric in KDE (Petr)
+ + enable Math MIME type setting (Petr)
+ + crash with a11y (Michael)
+ + -display and other options with ooqstart (Jan)
+ + expression evaluation changed between 1.x and 2.0 (Jody)
+ + disable use of fontconfig to enable/disable bitmaps again (Petr)
+
+ooo-build-2.0.2.5
+
+ + bug fixes:
+ + use fontconfig to enable/disable bitmaps (Michael)
+ + pressing escape when context menu is displayed crasher (Noel)
+ + build bits:
+ + updated Debian bits (Rene)
+ + pending:
+ + linking speedup (Michael)
+
+ooo-build-2.0.2.4
+
+ + bug fixes:
+ + import of VBA stream hangup (Noel)
+ + lots new constants for VBA excel (Noel)
+ + lots fixes in Atk bridge (Michael)
+ + i18n support within pasting to Calc (Michael)
+ + workaround a nasty problem with IE on Win32 (Tor)
+ + build bits:
+ + build with the older atk-1.6 (Petr)
+ + build without java fix (Andreas)
+ + updated Frugalware, Gentoo, Novell bits (Miklos, Andreas, Petr, Tor)
+
+ooo-build-2.0.2.3
+
+ + build bits:
+ + updated Novell bits (Petr)
+
+ooo-build-2.0.2.2
+
+ + bug fixes:
+ + more VBA fixes (Noel, Maho)
+ + markup the menu items correctly (Michael)
+ + build bits:
+ + updated Mandriva, Novell bits (Giuseppe, Petr)
+
+ooo-build-2.0.2.1
+
+ bug fixes:
+ 'Ctrl' instead of 'Control' in menus (Jan)
+ more VBA fixes (Noel)
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/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/potores b/bin/potores
new file mode 100644
index 000000000..a24e6fa89
--- /dev/null
+++ b/bin/potores
@@ -0,0 +1,88 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+# there is prolly a much much better way to do this, but the docs
+# were not findable, and or that helpful & parsing .po is easy
+#
+# This tool expects a tree of .po files, 1 per ISO lang:
+# {prefix}/
+# de/
+# fr/
+# ...
+#
+# inside each dir this filename is used:
+my $pofilename = 'totranslate.po';
+my $path = shift @ARGV;
+
+sub insert($$$$)
+{
+ my ($lang_hash, $lang, $msgid, $msgstr) = @_;
+
+ if (!defined $lang_hash->{$msgid}) {
+ my %tmphash;
+ $lang_hash->{$msgid} = \%tmphash;
+ }
+ my $thismsg = $lang_hash->{$msgid};
+ $thismsg->{$lang} = $msgstr;
+# print "Insert '$msgid' [$lang] '" . $thismsg->{$lang} . "'\n";
+}
+
+sub slurp_pofile($$$)
+{
+ my ($lang_hash, $lang, $po_file) = @_;
+ my $fileh;
+ my $msgid = '<error>';
+
+ open ($fileh, "$po_file") || die "Can't open $po_file: $!";
+ while (<$fileh>) {
+ my $line = $_;
+ $line =~ /^\#/ && next;
+ $line =~ /^\s*$/ && next;
+ if ($line =~ m/^"(.*)"\s*$/) {
+ my $attr = $1;
+ if ($attr =~ m/Content-Type: .*charset=(.*)/) {
+ my $charset = $1;
+ $charset =~ m/utf-8/i || die "Invalid charset $charset";
+ }
+ next; # skip headers
+ }
+ if ($line =~ /^msg(id|str)\s*"([^\"]*)"/) {
+ $msgid = $2 if ($1 eq 'id');
+ insert ($lang_hash, $lang, $msgid, $2) if ($1 eq 'str');
+ } else {
+ print "Unpleasant .po file line '$line'\n";
+ }
+ }
+ close ($fileh);
+}
+
+print STDERR "Reading translations at $path\n";
+
+my $dirh;
+my %langs;
+opendir ($dirh, $path) || die "Can't open $path: $!";
+while (my $lang = readdir ($dirh)) {
+ $lang =~ /^\./ && next;
+ printf STDERR "$lang ";
+ slurp_pofile (\%langs, $lang, "$path/$lang/$pofilename");
+}
+printf STDERR "\n";
+closedir ($dirh);
+
+sub printstr($$)
+{
+ my ($lang, $str) = @_;
+ $lang =~ s/_/-/g;
+ print "+\t\tText[ $lang ] = \"$str\";\n";
+}
+
+for my $msgid ( sort keys %langs ) {
+ print "SID_\n";
+# print "msgid $msgid\n";
+ my $thismsg = $langs{$msgid};
+ printstr("en-US", $msgid);
+ for my $lang ( sort keys %{$thismsg} ) {
+ printstr($lang, $thismsg->{$lang});
+ }
+}
diff --git a/bin/setup.in b/bin/setup.in
index ea940bb84..4d2799a7e 100755
--- a/bin/setup.in
+++ b/bin/setup.in
@@ -10,6 +10,7 @@ SRCDIR=@SRCDIR@
VERSION='@OOO_VERSION@'
BINSUFFIX='@OOO_BINSUFFIX@'
OOO_LANGS='@OOO_LANGS@'
+OOO_POOR_HELP_LOCALIZATIONS='@OOO_POOR_HELP_LOCALIZATIONS@'
CVSTAG='@CVSTAG@'
APPLY_DIR='@APPLY_DIR@'
BUILD_NCPUS='@BUILD_NCPUS@'
@@ -39,8 +40,9 @@ AGFA_MONOTYPE_FONTS_SOURCE=@AGFA_MONOTYPE_FONTS_SOURCE@
if test "z$BUILD_WIN32" != "z"; then
CONFIGURE_OPTIONS="--with-lang=\"$OOO_LANGS\" --with-use-shell=tcsh \
+ --with-build-version=\"Build: `date +%Y-%m-%d`\" \
--without-gpc --enable-crashdump=no \
- --disable-directx --enable-build-mozilla \
+ --disable-directx --disable-activex --enable-build-mozilla \
--disable-binfilter \
--with-ant-home=$BUILDDIR/apache-ant-1.6.5"
else
@@ -104,6 +106,8 @@ DOCDIRBASE=@docdir@
PREFIX=$OODESTDIR$PREFIXBASE
MANDIR=$OODESTDIR$MANDIRBASE
DOCDIR=$OODESTDIR$DOCDIRBASE
+DATADIRBASE=@datadir@
+DATADIR=$OODESTDIR$DATADIRBASE
SYSCONFBASE=@sysconfdir@
SYSCONFDIR=$OODESTDIR$SYSCONFBASE
OOINSTBASE=@prefix@/lib/@OOOINSTALLDIRNAME@
@@ -213,6 +217,7 @@ export PREFIX PREFIXBASE SYSCONFDIR SYSCONFBASE
export MANDIR MANDIRBASE DOCDIR DOCDIRBASE
export OOINSTDIR OOINSTBASE OOOINSTALLDIRNAME
export OODESTDIR OOO_LANGS OOO_LANGS_LIST
+export OOO_POOR_HELP_LOCALIZATIONS
export CONFIGURE_OPTIONS
export DISTRO BINSUFFIX ARCHITECTURE BUILD_MAGIC
export BUILD_WIN32
diff --git a/bin/unpack b/bin/unpack
index 056553e49..ae24d342e 100755
--- a/bin/unpack
+++ b/bin/unpack
@@ -70,6 +70,7 @@ if test "z$SYSTEM_GCC" = "z"; then
fi
echo "Unpacking OO.o build tree - [ go make some tea ] ..."
+echo "Unpacking $OOO_TARBALL..."
tar $OOO_UNTAR_OPTIONS $SRCDIR/$OOO_TARBALL || exit 1
echo "Fixing unfortunate snafus"
@@ -83,6 +84,9 @@ cp -a $INDUSTRIAL_DIR/../../sw/imglst/sc20139.png $INDUSTRIAL_DIR/sc_decrementsu
cp -a $INDUSTRIAL_DIR/../../sw/imglst/sc20131.png $INDUSTRIAL_DIR/sc_incrementlevel.png
cp -a $INDUSTRIAL_DIR/../../sw/imglst/sc20140.png $INDUSTRIAL_DIR/sc_incrementsublevels.png
rm -f $OOBUILDDIR/extras/source/autotext/lang/en-US/acor_en-GB.*
+# more unfortunate bits
+cp -a $INDUSTRIAL_DIR/lc_basicshapes.diamond.png $INDUSTRIAL_DIR/lc_basicshapes.png
+cp -a $INDUSTRIAL_DIR/sc_basicshapes.diamond.png $INDUSTRIAL_DIR/sc_basicshapes.png
cd $BUILDDIR
# Work around component-schema.dtd mess in m142 up to m151; seems to be fixed in m152
@@ -105,18 +109,22 @@ chmod a+x $OOBUILDDIR/config_office/oowintool
# -system source
if test -f $SRCDIR/$OOO_SYSTEM_TARBALL; then
# System is optional, but parts of it are useful
+ echo "Unpacking $OOO_SYSTEM_TARBALL..."
tar $OOO_UNTAR_OPTIONS $SRCDIR/$OOO_SYSTEM_TARBALL
fi
# -binfilter source
if test -f $SRCDIR/$OOO_BINFILTER_TARBALL; then
+ echo "Unpacking $OOO_BINFILTER_TARBALL..."
tar $OOO_UNTAR_OPTIONS $SRCDIR/$OOO_BINFILTER_TARBALL
fi
# -lang source
if test -f $SRCDIR/$OOO_LANG_TARBALL; then
+ echo "Unpacking $OOO_LANG_TARBALL..."
tar $OOO_UNTAR_OPTIONS $SRCDIR/$OOO_LANG_TARBALL
fi
# -sdk_oo source
if test -f $SRCDIR/$OOO_SDK_OO_TARBALL; then
+ echo "Unpacking $OOO_SDK_OO_TARBALL"
tar $OOO_UNTAR_OPTIONS $SRCDIR/$OOO_SDK_OO_TARBALL
fi
@@ -305,6 +313,9 @@ fi
echo "Copying default evolution database into tree"
cp -af $TOOLSDIR/src/evolocal.odb $OOBUILDDIR/extras/source/database || exit 1;
+echo "Installing bibliography overwrides";
+tar xjf $TOOLSDIR/src/biblio.tar.bz2 -C $OOBUILDDIR/extras/source/database
+
echo "Copying custom user-dicts into tree"
cp -af $TOOLSDIR/src/*.dic $OOBUILDDIR/extras/source/wordbook || exit 1;
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/Gentoo.conf.in b/distro-configs/Gentoo.conf.in
index 39cf885ad..8c3d0e91e 100644
--- a/distro-configs/Gentoo.conf.in
+++ b/distro-configs/Gentoo.conf.in
@@ -1,6 +1,7 @@
--disable-fontooo
--disable-odk
--enable-libsn
+--with-system-curl
--with-system-expat
--with-system-stdlibs
--with-system-xrender-headers
diff --git a/distro-configs/SUSE-10.1.conf.in b/distro-configs/SUSE-10.1.conf.in
new file mode 100644
index 000000000..94f152f07
--- /dev/null
+++ b/distro-configs/SUSE-10.1.conf.in
@@ -0,0 +1,19 @@
+--disable-access
+--disable-odk
+--enable-gnome-vfs
+--enable-libsn
+--enable-lockdown
+--enable-mono
+--enable-quickstart
+--with-ant-home=/usr
+--with-jdk-home=$JAVA_HOME
+--with-system-boost
+--with-system-cairo
+--with-system-curl
+--with-system-db
+--with-system-expat
+--with-system-neon
+--with-system-odbc-headers
+--with-system-sndfile
+--with-xulrunner
+--without-myspell-dicts
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/local.txt b/doc/local.txt
index 727cc40b0..9a1581494 100644
--- a/doc/local.txt
+++ b/doc/local.txt
@@ -1,6 +1,14 @@
Local linking notes ...
TODO:
+ + cppu::loadSharedLibComponentFactory
+ + this is what loads the libs ...
+
+** Resolved:
+ + trying to share stuff just doesn't work
+ + instead just throw/catch exceptions in a standalone lib.
+
+
+ Need different guards in .hpp & .hppi files
+ and no redundancy [!]
+ [ since .hppi files cascade include .hpp ]
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/download.in b/download.in
index 8e8f39713..0d8464a06 100755
--- a/download.in
+++ b/download.in
@@ -36,6 +36,7 @@ sub usage {
'cairo-.*' => '@MIRROR@/SRC680',
'glitz-.*' => '@MIRROR@/SRC680',
'hunspell.*' => '@MIRROR@/SRC680',
+ 'biblio.*' => '@MIRROR@/SRC680',
'xt-.*' => '@MIRROR@/xt',
# Graphite rendering bits
'silgraphite-.*' => '@MIRROR@/SRC680',
@@ -144,6 +145,8 @@ if ('@MDBTOOLS_SRC@' ne '') {
push @files, ( "$tag-core.tar.bz2" );
push @files, ( '@OOO_CUSTOM_IMAGES@', '@OOO_EXTRA_ARTWORK@' );
push @files, ( "xt-20051206-src-only.zip" );
+# Temporary utf-8ization of bibliograpy bits
+push @files, ( "biblio.tar.bz2" );
if ('@OOO_LANGS@' ne 'en-US' || '@BUILD_WIN32@' ne '' ) {
push @files, ( "$tag-lang.tar.bz2" );
diff --git a/fonts/OpenSymbol.sfd b/fonts/OpenSymbol.sfd
index babdab536..b1939a5f9 100644
--- a/fonts/OpenSymbol.sfd
+++ b/fonts/OpenSymbol.sfd
@@ -11,7 +11,6 @@ UnderlineWidth: 20
Ascent: 1878
Descent: 170
Order2: 1
-NeedsXUIDChange: 1
XUID: [1021 397 263452892 2106040]
FSType: 8
PfmFamily: 81
@@ -20,15 +19,15 @@ TTFWidth: 5
LineGap: 0
VLineGap: 0
Panose: 5 1 0 0 0 0 0 0 0 0
-OS2TypoAscent: 1878
-OS2TypoAOffset: 1
-OS2TypoDescent: -170
-OS2TypoDOffset: 1
+OS2TypoAscent: 1638
+OS2TypoAOffset: 0
+OS2TypoDescent: 410
+OS2TypoDOffset: 0
OS2TypoLinegap: 0
-OS2WinAscent: -630
-OS2WinAOffset: 1
-OS2WinDescent: -200
-OS2WinDOffset: 1
+OS2WinAscent: 1638
+OS2WinAOffset: 0
+OS2WinDescent: 410
+OS2WinDOffset: 0
HheadAscent: 0
HheadAOffset: 1
HheadDescent: 0
diff --git a/fonts/opens___.ttf b/fonts/opens___.ttf
index 63f04c711..2c7dca6ef 100644
--- a/fonts/opens___.ttf
+++ b/fonts/opens___.ttf
Binary files differ
diff --git a/patches/cairo/cairo-canvas-clip-more.diff b/patches/cairo/cairo-canvas-clip-more.diff
new file mode 100644
index 000000000..aff28b4d8
--- /dev/null
+++ b/patches/cairo/cairo-canvas-clip-more.diff
@@ -0,0 +1,58 @@
+Index: cairo_canvashelper.cxx
+===================================================================
+RCS file: /cvs/gsl/canvas/source/cairo/cairo_canvashelper.cxx,v
+retrieving revision 1.3
+diff -u -p -r1.3 cairo_canvashelper.cxx
+--- canvas/source/cairo/cairo_canvashelper.cxx 22 Mar 2006 10:59:35 -0000 1.3
++++ canvas/source/cairo/cairo_canvashelper.cxx 23 Jun 2006 12:28:40 -0000
+@@ -1036,6 +1036,7 @@ namespace cairocanvas
+ bool bHasAlpha )
+ {
+ uno::Reference< rendering::XCachedPrimitive > rv = uno::Reference< rendering::XCachedPrimitive >(NULL);
++ geometry::IntegerSize2D aBitmapSize = rSize;
+
+ if( mpCairo ) {
+ const ::basegfx::B2ISize& aSize = mpDevice->getSizePixel();
+@@ -1064,10 +1065,11 @@ namespace cairocanvas
+
+ dWidth = round( rSize.Width * aMatrix.xx );
+ dHeight = round( rSize.Height* aMatrix.yy );
++ aBitmapSize.Width = static_cast<sal_Int32>( dWidth );
++ aBitmapSize.Height = static_cast<sal_Int32>( dHeight );
+
+- Surface* pScaledSurface = mpDevice->getSurface( ::basegfx::B2ISize( static_cast<sal_Int32>( dWidth ),
+- static_cast<sal_Int32>( dHeight ) ),
+- bHasAlpha ? CAIRO_CONTENT_COLOR_ALPHA : CAIRO_CONTENT_COLOR );
++ Surface* pScaledSurface = mpDevice->getSurface( ::basegfx::B2ISize( aBitmapSize.Width, aBitmapSize.Height ),
++ bHasAlpha ? CAIRO_CONTENT_COLOR_ALPHA : CAIRO_CONTENT_COLOR );
+ Cairo* pCairo = pScaledSurface->getCairo();
+
+ // cairo_set_operator( pCairo, CAIRO_OPERATOR_SOURCE );
+@@ -1092,8 +1094,8 @@ namespace cairocanvas
+ double x, y, width, height;
+
+ x = y = 0;
+- width = rSize.Width;
+- height = rSize.Height;
++ width = aBitmapSize.Width;
++ height = aBitmapSize.Height;
+ cairo_matrix_transform_point( &aMatrix, &x, &y );
+ cairo_matrix_transform_distance( &aMatrix, &width, &height );
+
+@@ -1118,8 +1120,14 @@ namespace cairocanvas
+ }
+
+ cairo_set_source_surface( mpCairo, pSurface->mpSurface, 0, 0 );
+-// if( !bHasAlpha )
+-// cairo_set_operator( mpCairo, CAIRO_OPERATOR_SOURCE );
++ if( !bHasAlpha &&
++ ::rtl::math::approxEqual( aMatrix.xx, 1 ) &&
++ ::rtl::math::approxEqual( aMatrix.yy, 1 ) &&
++ ::rtl::math::approxEqual( aMatrix.x0, 0 ) &&
++ ::rtl::math::approxEqual( aMatrix.y0, 0 ) )
++ cairo_set_operator( mpCairo, CAIRO_OPERATOR_SOURCE );
++ cairo_rectangle( mpCairo, 0, 0, aBitmapSize.Width, aBitmapSize.Height );
++ cairo_clip( mpCairo );
+ cairo_paint( mpCairo );
+ cairo_restore( mpCairo );
+ } else
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/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/apply b/patches/src680/apply
index 1cbba468e..14dc134d9 100644
--- a/patches/src680/apply
+++ b/patches/src680/apply
@@ -12,10 +12,10 @@ OLDEST_SUPPORTED=oob680-m5 OOO_2_0_2
Common : BuildBits, ParallelMake, TemporaryHacks, FixesNotForUpstream, \
Fixes, Defaults, Features, VCL, Misc, \
- Icons, VBABits, CalcFixes, Leaks, Egg
+ Icons, VBABits, VBAObjects, CalcFixes, Leaks, Egg
Safe64bit : 64bitForUpstream, NumberFormat, Trivial
LinuxCommon : Common, BuildBitsLinuxOnly, LinuxOnly, SystemBits, CWSBackports, GCJ, \
- QPro, Lwp, cairocanvas, VBAObjects, msaccess, \
+ QPro, Lwp, cairocanvas, msaccess, \
Safe64bit, FPickers, Mono, AddressBooks, QuickStarter, Shrink
Win32Common : Common, NotDebian
64bit : 64bitPatches, 64bitUnsorted, GCJExperimental, SystemJavaBits
@@ -32,16 +32,17 @@ SUSE-9.1 : NovellBase
SUSE-9.2 : NovellBase
SUSE-9.3 : NovellBase
SUSE-10.0 : NovellBase
+SUSE-10.1 : NovellBase, BerkeleyDB43
SUSE : NovellBase, BerkeleyDB43
-SUSE-PPC : NovellBase, BerkeleyDB43, GCJExperimental, SystemJavaBits, SUSEPPCOnly
+SUSE-PPC : NovellBase, BerkeleyDB43, GCJExperimental, SystemJavaBits
SUSE-64 : NovellBase, BerkeleyDB43, 64bit
# Debian
-DebianBase : LinuxCommon, DebianBaseOnly, GCJExperimental, SystemJavaBits, AtkBridge, CalcSolver
+DebianBase : LinuxCommon, DebianBaseOnly, GCJExperimental, SystemJavaBits, AtkBridge, CalcSolver, Lockdown
Debian : DebianBase, DebianOnly, DebianSidOnly
DebianSarge : DebianBase, DebianOnly, DebianSargeOnly
Debian64 : DebianBase, DebianOnly, DebianSidOnly, 64bit
# Ubuntu
-UbuntuBased : DebianBase, UbuntuOnly, GCJExperimental, BerkeleyDB43, Lockdown
+UbuntuBased : DebianBase, UbuntuOnly, BerkeleyDB43
Ubuntu : UbuntuBased, DebianBaseNoHelpContent
UbuntuL10n : UbuntuBased, UbuntuL10nOnly
Ubuntu64 : UbuntuBased, 64bit
@@ -60,7 +61,7 @@ Mandriva: MandrivaBase
Mandriva64: MandrivaBase, 64bit
# Frugalware Linux
FrugalwareBase: LinuxCommon, FilePickers, GnomeVFS, GlobalDesktopFiles, NonArkCommon, NoRpath, NovellOnly, NovellOnlyUnix, NotDebian
-Frugalware: FrugalwareBase, FrugalwareOnly
+Frugalware: FrugalwareBase, FrugalwareOnly, GCJExperimental, SystemJavaBits
Frugalware64: FrugalwareBase, 64bit, Frugalware64Only
QiLinux: QiLinuxOnly, LinuxCommon, GlobalDesktopFiles, FilePickers
#Gentoo
@@ -119,6 +120,10 @@ buildfix-ucb-xml-cflags.diff
# possible up-stream are re-writing this completely so ...
speed-2nd-start.diff
+# accelerate linking, by extreme cunning i#63927
+# speed-local-link-except.diff
+# speed-local-link.diff
+
# Don't refcount the empty string
strtmpl.diff
@@ -155,6 +160,12 @@ buildfix-without-mozilla.diff
# workaround parallel build in cli_ure #62624
buildfix-parallel-cli_ure.diff
+# Fix build without java, again, i#62716
+buildfix-no-java.diff
+
+# Fix crash in fileview i#64609, n#168097
+fix-fileview-search.diff
+
[ GCJ ]
# work around missing symbol in libgcj...
@@ -175,8 +186,23 @@ vcl-menu-fixes.diff
gui-sw-scroll.diff
[ Fixes ]
+
+# fix reading of freed memory in slidesorter, due to weird reentrancy, n#186621
+sd-sls-process-request-crash-fix.diff
+
+# use basic (advanced) shapes for rectangle/ellipse on draw/impress's toolbars. make shapes wrap words by default, n#171052, rodo
+sd-toolbar-advanced-shapes.diff
+svx-shapes-default-word-wrap-enable.diff
+
+# n#169587, i#65518, rodo
+tools-smb-url.diff
+# n#169587, i#65519, rodo
+sfx2-title-generic-url.diff
+
# fix check box rendering issue - n#80447
check-buttons-rendering-fix.diff
+# fix gtk+ context menu behavior - i#65578
+gui-gtk-contextmenu.diff
# Fix default Writer bullets not exporting to MS format intact n#10555
sw-bullet-interop-fix.diff
# Fix NFS / flock issue n#104655, i#53682
@@ -247,6 +273,11 @@ warning-uninitialized-variables-vcl.diff
gtk-kde-fix.diff
# run crash_report only when it is built, i#54121
sal-when-to-run-crash-report.diff
+# use fontconfig to enable/disable bitmaps i#61841, n#16082
+#vcl-fontconfig-hints.diff
+
+# Fix bibliographic encoding n#155725, i#62664
+dbase-utf8.diff
# Fix the print error dialog and pop-up when unable to print. BINC 64010 Issue 44695
print-error.diff
@@ -271,6 +302,9 @@ sfx2-source-view-viewprn-cxx.diff
# Fix starmath build with system stlport4 i#57582
starmath-stl-vector-h.diff
+# Fix recently used escaping so it doesn't shaft the system i#66510
+recently-used.diff
+
# More fixes of that kind
fix-stlport-includes.diff
@@ -319,6 +353,44 @@ shell-safer-recently-used-perm.diff
# validator.w3.org; Ubuntu 20294, i#63081
sw-html-export-style-type.diff
+# fix problems with styles containing dashes i#63107, https://bugzilla.novell.com/show_bug.cgi?id=160120
+styles-dash.diff
+
+# i#63766 hang on import of ms doc with vba
+# containing the characters "Attribute"
+svx-vbaimport-basic-hang.diff
+
+# i#64301, n#162979 fix hang on import
+hang-sw-layout.diff
+
+# outsmart Metacity's "focus:mouse" mode, i#63086
+vcl-metacity-focus.diff
+
+# fix crash when selecting email application, Ubuntu #33767
+fix_filedlghelper.diff
+
+# Greek font setting, i#64578, i#64577, n#166267
+helpcontent2-greek-fonts.diff
+office-cfg-vcl-greek-fonts.diff
+
+# removes obsolete gengal.rdb and cleans up gengal.sh, saves 7MB, i#65361
+gengal-cleanup.diff
+
+# fixes from cws ab19
+cws-ab19.diff
+# fixes from cws npower1
+cws-npower1.diff
+
+# Using any filter when browsing samba shares results in no files displayed
+# n#167900, noelpwer
+filechooser-samba-problem.diff
+
+# backported part of CWS jl34 that fixes some problems with certificates, i#39382, i#46283, i#65203 and hopefully part of n#157991
+cws-jl34.diff
+
+# more intelligent nsplugin seeking, i#49590
+nsplugin-path.diff
+
[ Leaks ]
# silly leaks around the place i#50726
leak-sal-file.diff
@@ -340,6 +412,8 @@ size-strip.diff
speed-quickstart.diff
# An improved built-in quick-starter applet / systray thing. i#57872
speed-quickstart-eggtray.diff
+# i18n for quickstarter
+speed-quickstart-i18n.diff
# 2nd time accelerator i#60696
speed-ooqstart.diff
# Handle slot:XYZ correctly n#157583
@@ -353,6 +427,8 @@ speed-ooqstart-hide-asap.diff
speed-ooqstart-more-steps.diff
# Make it X11+glib-only
speed-ooqstart-x11-only.diff
+# Fix -display and other options, n#160296
+speed-ooqstart-options.diff
# make the office socket name more predictable for external re-use
@@ -393,7 +469,10 @@ sc-get-pivot-data.diff
sc-seriessum.diff
# Return =value() of an empty cell as 0 - i#35483
sc-valuefunc.diff
-
+# optimization for loading large pivot tables from xls - i#63686
+sc-xls-pivot-optimization.diff
+# hash item collections, i#TODO, jody
+sc-dp-hash-items.diff
# div/0 error export by other functions - i47724
sc-div-errs.diff
@@ -452,6 +531,9 @@ sd-slideshow-cursor-hide.diff
# Make the linguistic simple dictionary stuff more pleasant i#60698
linguistic-rework.diff
+# fall back to the English help even without the symlink, rh#151357
+sfx2-fallback-to-en-help.diff
+
[ Egg ]
# go-oo.org people active in this release
go-oo-team.diff
@@ -466,8 +548,6 @@ default-system-fpicker.diff
# don't display File->Wizards-> install dictionaries/fonts -
# makes no sense on Linux n#74249
default-no-install-wizards.diff
-# more intelligent nsplugin seeking, i#49590
-nsplugin-path.diff
[ DebianBaseOnly ]
odk-remove-non-free.diff
@@ -479,13 +559,13 @@ no-fontooo-wizard.diff
pyuno-rpath-ooodir.diff
default-cairo-disable.diff
gcj-32bit-runtime-path.diff
-
+# remove mozilla plug-in option completely since we enable it per default
+# # and therefore this option is sense-/useless
+no-mozilla-plug-in-option.diff
[ DebianOnly ]
# fix the About box...
debian-splash.diff
-# make nsplugin check MOZILLA_FIVE_HOME, too, i#49590
-nsplugin-MOZILLA_FIVE_HOME.diff
[ DroplineGNOMEOnly ]
dropline-gnome-splash.diff
@@ -501,8 +581,6 @@ mandriva-splash.diff
default-system-fpicker.diff
gcc401-stlport45-include.diff
mandriva-archflags.diff
-# more intelligent nsplugin seeking, i#49590
-nsplugin-path.diff
mandriva-java32_64.diff
db42-fix-jni-includes.diff
@@ -535,7 +613,6 @@ gui-font-paranoid-fallback.diff
[ NovellOnlyWin32 ]
-filebug-support.diff
novell-win32-agfa-monotype-fonts.diff
novell-win32-installer-branding.diff
novell-win32-odma.diff
@@ -550,6 +627,9 @@ translate-org-za-splash.diff
[ FrugalwareOnly ]
frugalware.diff
+xmlhelp-port-to-db-4.4.diff
+gcc401-stlport45-include.diff
+vcl-freetype-2.2.x-2.0.2.diff
[ Frugalware64Only ]
frugalware64.diff
@@ -606,7 +686,10 @@ sd-save-image-context-menu.diff
[ SDFPatches ]
sd-save-image-context-menu-localize.diff
-
+sc-standard-filter-options-i18n.diff
+# fake translations; combo box entries are not visible in the given
+# localization if they are not translated; i#66473
+sc-standard-filter-options-i18n-fake.diff
[ Features ]
# Make cut and paste nicer i#15509
@@ -671,6 +754,12 @@ buildfix-connectivity-kab-stdio.diff
# do not pack any potential .orig files with ppds
psprint_config-no-orig.diff
+# changes the SDK gid module name to gid_Module_Root_SDK, so the generated list
+# of files does not conflict with the main package, i#64802
+sdk-gid-module-name.diff
+# allows to install SDK that includes file names with $ (classes), i#64801
+sdk-filenames-with-dollar.diff
+
[ BuildBits == oob680-m5 != OOO_2_0_2 ]
# install ppd and afm again by default, added as master fix to oob680-m5, i#62068
buildfix-ppd-afm-check-62068.diff
@@ -738,7 +827,6 @@ s390-LINK-is-CXX.diff
# make some symbols from sc visible when compiling with gcc4, necessary since m121, i#53261
gcc4-visibility-sc.diff
-gcc4-vba-pastespecial-visibility.diff
# fixes undefined usage of pointers that breaks with gcc-4.1
buildfix-gcc41-pointers-icu.diff
@@ -779,8 +867,9 @@ cws-dmake43p01-20060131.diff
no-splash-takeover.diff
# Ensure window title is "OpenOffice.org..." rather than "Untitled window" #rh120696#
splash-title.diff
-# Use nwf for menu item check boxes instead of ugly symbols #48965
+# Use nwf for menu item check boxes instead of ugly symbols i#48965
vcl-nwf-menu-checkmarks.diff
+framework-check-items.diff
# Better fallback when some of the plugins are not available i#50857
vcl-better-fallback.diff
@@ -809,7 +898,9 @@ xmlsecurity_source_xmlsec_nss_gcc4_compile_fix.diff
[ AtkBridge ]
# iz#47890 iz#25402 iz#22097 - Direct atk-bridge for GNOME accessibility
-cws-atkbridge-20060306.diff
+cws-atkbridge-20060425.diff
+# fix bug in this cws n#170772, i#65721
+crash-menu-escape.diff
[ Icons ]
@@ -898,14 +989,16 @@ win32-gw-send-mail.diff
win32-msvs-2003-configure.diff
# Minor build fixes for win32
win32-build-fixes.diff
+# This is a pretty nasty IE problem i#19510
+win32-activex-disable.diff
# This enables building libIDL, glib and buildtools for mozilla from source
mozilla-buildlibs-win32.diff
# This enables building scsolver on Win32
boost-patch.diff
+# Multi-language installer stuff, i#66062
+win32-multi-lang-installer.diff
[ VBABits ]
-# Prefer interoperability over marginal compatibility i#49495
-default-vba-compatible.diff
vba-not-comments.diff
# Parse (& ignore) 'Attribute' statements i#37347
vba-attribute.diff
@@ -947,7 +1040,8 @@ omit-fp-workaround.diff
system-db-4.3-use-lpthread.diff
# iz#58474 - build this part with db 4.2/4.3/4.4
xmlhelp-port-to-db-4.4.diff
-
+# system neon 0.26.x compile fixes, i#64798
+system-neon-0.26.diff
[ GentooOnly ]
version-2-0-pre.diff
@@ -968,8 +1062,6 @@ gentoo-gcc-naming-and-versioning.diff
gentoo-xmlsecurity-system-nss.diff
# hack: drop gcc libs
store-drop-gcc-libs-on-linking.diff
-# Fix build without java, again, i#62716
-buildfix-no-java.diff
#
# NOTE: 64 bit OOo is work in progress!
@@ -1115,8 +1207,9 @@ buildfix-64bit-system-jpeg.diff
#disable-xmlsearch-and-xmlhelp-jar.diff
dont-build-cfgimport-jar.diff
dont-copy-and-install-stlport.diff
-# Fix build without java, again, i#62716
-buildfix-no-java.diff
+# system neon 0.26.x compile fixes, i#64798
+system-neon-0.26.diff
+help-msg-add-package-info.diff
[ DebianBaseNoHelpContent ]
disable-helpcontent2.diff
@@ -1127,7 +1220,6 @@ static-libs-use-_pic.diff
[ UbuntuOnly ]
ubuntu-splash.diff
-ubuntu-no-help-msg.diff
ubuntu-lpi.diff
static-libs-use-_pic.diff
default-system-fpicker.diff
@@ -1202,6 +1294,8 @@ offapi-org-openoffice-vba-xpivottable-idl.diff
offapi-org-openoffice-vba-xpivottables-idl.diff
offapi-org-openoffice-vba-xcomment-idl.diff
offapi-org-openoffice-vba-xcomments-idl.diff
+offapi-org-openoffice-vba-xwindows-idl.diff
+offapi-org-openoffice-vba-xcharacters-idl.diff
offapi-org-openoffice-vba-excel-xlcommentdisplaymode-idl.diff
offapi-org-openoffice-vba-excel-xlcreator-idl.diff
offapi-org-openoffice-vba-excel-xldirection-idl.diff
@@ -1212,14 +1306,187 @@ offapi-org-openoffice-vba-excel-xlsortorder-idl.diff
offapi-org-openoffice-vba-excel-xlsortorientation-idl.diff
offapi-org-openoffice-vba-excel-xlyesnoguess-idl.diff
offapi-org-openoffice-vba-excel-xlsortdataoption-idl.diff
-offapi-org-openoffice-vba-xwindows-idl.diff
offapi-org-openoffice-vba-excel-xldeleteshiftdirection-idl.diff
-offapi-org-openoffice-vba-xcharacters-idl.diff
offapi-org-openoffice-vba-excel-xlautofilltype-idl.diff
+offapi-org-openoffice-vba-excel-xllistconflict-idl.diff
+offapi-org-openoffice-vba-excel-xllistdatatype-idl.diff
+offapi-org-openoffice-vba-excel-xllistobjectsourcetype-idl.diff
+offapi-org-openoffice-vba-excel-xllocationintable-idl.diff
+offapi-org-openoffice-vba-excel-xlmailsystem-idl.diff
+offapi-org-openoffice-vba-excel-xlmarkerstyle-idl.diff
+offapi-org-openoffice-vba-excel-xlmousebutton-idl.diff
+offapi-org-openoffice-vba-excel-xlmousepointer-idl.diff
+offapi-org-openoffice-vba-excel-xlmsapplication-idl.diff
+offapi-org-openoffice-vba-excel-xlobjectsize-idl.diff
+offapi-org-openoffice-vba-excel-xloletype-idl.diff
+offapi-org-openoffice-vba-excel-xloleverb-idl.diff
+offapi-org-openoffice-vba-excel-xlorder-idl.diff
+offapi-org-openoffice-vba-excel-xlorientation-idl.diff
+offapi-org-openoffice-vba-excel-xlpagebreak-idl.diff
+offapi-org-openoffice-vba-excel-xlpagebreakextent-idl.diff
+offapi-org-openoffice-vba-excel-xlpageorientation-idl.diff
+offapi-org-openoffice-vba-excel-xlpapersize-idl.diff
+offapi-org-openoffice-vba-excel-xlparameterdatatype-idl.diff
+offapi-org-openoffice-vba-excel-xlparametertype-idl.diff
+offapi-org-openoffice-vba-excel-xlpastespecialoperation-idl.diff
+offapi-org-openoffice-vba-excel-xlpastetype-idl.diff
+offapi-org-openoffice-vba-excel-xlpattern-idl.diff
+offapi-org-openoffice-vba-excel-xlphoneticalignment-idl.diff
+offapi-org-openoffice-vba-excel-xlpictureappearance-idl.diff
+offapi-org-openoffice-vba-excel-xlpictureconvertortype-idl.diff
+offapi-org-openoffice-vba-excel-xlpivotcelltype-idl.diff
+offapi-org-openoffice-vba-excel-xlpivotfieldcalculation-idl.diff
+offapi-org-openoffice-vba-excel-xlpivotfielddatatype-idl.diff
+offapi-org-openoffice-vba-excel-xlpivotfieldorientation-idl.diff
+offapi-org-openoffice-vba-excel-xlpivotformattype-idl.diff
+offapi-org-openoffice-vba-excel-xlpivottablemissingitems-idl.diff
+offapi-org-openoffice-vba-excel-xlpivottablesourcetype-idl.diff
+offapi-org-openoffice-vba-excel-xlpivottableversionlist-idl.diff
+offapi-org-openoffice-vba-excel-xlplacement-idl.diff
+offapi-org-openoffice-vba-excel-xlplatform-idl.diff
+offapi-org-openoffice-vba-excel-xlprinterrors-idl.diff
+offapi-org-openoffice-vba-excel-xlprintlocation-idl.diff
+offapi-org-openoffice-vba-excel-xlpriority-idl.diff
+offapi-org-openoffice-vba-excel-xlptselectionmode-idl.diff
+offapi-org-openoffice-vba-excel-xlquerytype-idl.diff
+offapi-org-openoffice-vba-excel-xlrangeautoformat-idl.diff
+offapi-org-openoffice-vba-excel-xlrangevaluedatatype-idl.diff
+offapi-org-openoffice-vba-excel-xlreferencestyle-idl.diff
+offapi-org-openoffice-vba-excel-xlreferencetype-idl.diff
+offapi-org-openoffice-vba-excel-xlrobustconnect-idl.diff
+offapi-org-openoffice-vba-excel-xlroutingslipdelivery-idl.diff
+offapi-org-openoffice-vba-excel-xlroutingslipstatus-idl.diff
+offapi-org-openoffice-vba-excel-xlrowcol-idl.diff
+offapi-org-openoffice-vba-excel-xlrunautomacro-idl.diff
+offapi-org-openoffice-vba-excel-xlsaveaction-idl.diff
+offapi-org-openoffice-vba-excel-xlsaveasaccessmode-idl.diff
+offapi-org-openoffice-vba-excel-xlsaveconflictresolution-idl.diff
+offapi-org-openoffice-vba-excel-xlscaletype-idl.diff
+offapi-org-openoffice-vba-excel-xlsearchdirection-idl.diff
+offapi-org-openoffice-vba-excel-xlsearchwithin-idl.diff
+offapi-org-openoffice-vba-excel-xlsheettype-idl.diff
+offapi-org-openoffice-vba-excel-xlsheetvisibility-idl.diff
+offapi-org-openoffice-vba-excel-xlsizerepresents-idl.diff
+offapi-org-openoffice-vba-excel-xlsmarttagcontroltype-idl.diff
+offapi-org-openoffice-vba-excel-xlsmarttagdisplaymode-idl.diff
+offapi-org-openoffice-vba-excel-xlsortmethodold-idl.diff
+offapi-org-openoffice-vba-excel-xlsorttype-idl.diff
+offapi-org-openoffice-vba-excel-xlsourcetype-idl.diff
+offapi-org-openoffice-vba-excel-xlspeakdirection-idl.diff
+offapi-org-openoffice-vba-excel-xlspecialcellsvalue-idl.diff
+offapi-org-openoffice-vba-excel-xlsubscribetoformat-idl.diff
+offapi-org-openoffice-vba-excel-xlsubtototallocationtype-idl.diff
+offapi-org-openoffice-vba-excel-xlsummarycolumn-idl.diff
+offapi-org-openoffice-vba-excel-xlsummaryreporttype-idl.diff
+offapi-org-openoffice-vba-excel-xlsummaryrow-idl.diff
+offapi-org-openoffice-vba-excel-xltabposition-idl.diff
+offapi-org-openoffice-vba-excel-xltextparsingtype-idl.diff
+offapi-org-openoffice-vba-excel-xltextqualifier-idl.diff
+offapi-org-openoffice-vba-excel-xltextvisuallayouttype-idl.diff
+offapi-org-openoffice-vba-excel-xlticklabelorientation-idl.diff
+offapi-org-openoffice-vba-excel-xlticklabelposition-idl.diff
+offapi-org-openoffice-vba-excel-xltimemark-idl.diff
+offapi-org-openoffice-vba-excel-xltimeunit-idl.diff
+offapi-org-openoffice-vba-excel-xltoolbarprotection-idl.diff
+offapi-org-openoffice-vba-excel-xltotalscalculation-idl.diff
+offapi-org-openoffice-vba-excel-xltrendlinetype-idl.diff
+offapi-org-openoffice-vba-excel-xlunderlinestyle-idl.diff
+offapi-org-openoffice-vba-excel-xlupdatelinks-idl.diff
+offapi-org-openoffice-vba-excel-xlvalign-idl.diff
+offapi-org-openoffice-vba-excel-xlwbatemplate-idl.diff
+offapi-org-openoffice-vba-excel-xlwebformatting-idl.diff
+offapi-org-openoffice-vba-excel-xlwebsectiontype-idl.diff
+offapi-org-openoffice-vba-excel-xlwindowstate-idl.diff
+offapi-org-openoffice-vba-excel-xlwindowtype-idl.diff
+offapi-org-openoffice-vba-excel-xlwindowview-idl.diff
+offapi-org-openoffice-vba-excel-xlxlmmacrotype-idl.diff
+offapi-org-openoffice-vba-excel-xlxmlexportresult-idl.diff
+offapi-org-openoffice-vba-excel-xlxmlimportresult-idl.diff
+offapi-org-openoffice-vba-excel-xlxmlloadoption-idl.diff
+offapi-org-openoffice-vba-excel-xlapplicationinternational-idl.diff
+offapi-org-openoffice-vba-excel-xlapplynamesorder-idl.diff
+offapi-org-openoffice-vba-excel-xlarabicmodes-idl.diff
+offapi-org-openoffice-vba-excel-xlarrangestyle-idl.diff
+offapi-org-openoffice-vba-excel-xlarrowheadlength-idl.diff
+offapi-org-openoffice-vba-excel-xlarrowheadstyle-idl.diff
+offapi-org-openoffice-vba-excel-xlarrowheadwidth-idl.diff
+offapi-org-openoffice-vba-excel-xlautofilteroperator-idl.diff
+offapi-org-openoffice-vba-excel-xlaxiscrosses-idl.diff
+offapi-org-openoffice-vba-excel-xlaxisgroup-idl.diff
+offapi-org-openoffice-vba-excel-xlaxistype-idl.diff
+offapi-org-openoffice-vba-excel-xlbackground-idl.diff
+offapi-org-openoffice-vba-excel-xlbarshape-idl.diff
+offapi-org-openoffice-vba-excel-xlbordersindex-idl.diff
+offapi-org-openoffice-vba-excel-xlbuildindialog-idl.diff
+offapi-org-openoffice-vba-excel-xlcalculatedmembertype-idl.diff
+offapi-org-openoffice-vba-excel-xlcalculationinterruptkey-idl.diff
+offapi-org-openoffice-vba-excel-xlcalculationstate-idl.diff
+offapi-org-openoffice-vba-excel-xlcategorytype-idl.diff
+offapi-org-openoffice-vba-excel-xlcellinsertionmode-idl.diff
+offapi-org-openoffice-vba-excel-xlchartgallery-idl.diff
+offapi-org-openoffice-vba-excel-xlchartitem-idl.diff
+offapi-org-openoffice-vba-excel-xlchartlocation-idl.diff
+offapi-org-openoffice-vba-excel-xlchartpictureplacement-idl.diff
+offapi-org-openoffice-vba-excel-xlchartpicturetype-idl.diff
+offapi-org-openoffice-vba-excel-xlchartsplittype-idl.diff
+offapi-org-openoffice-vba-excel-xlcharttype-idl.diff
+offapi-org-openoffice-vba-excel-xlclipboardformat-idl.diff
+offapi-org-openoffice-vba-excel-xlcmdtype-idl.diff
+offapi-org-openoffice-vba-excel-xlcolorindex-idl.diff
+offapi-org-openoffice-vba-excel-xlcolumndatatype-idl.diff
+offapi-org-openoffice-vba-excel-xlcommandunderlines-idl.diff
+offapi-org-openoffice-vba-excel-xlconsolidationfunction-idl.diff
+offapi-org-openoffice-vba-excel-xlcopypictureformat-idl.diff
+offapi-org-openoffice-vba-excel-xlcorruptload-idl.diff
+offapi-org-openoffice-vba-excel-xlcubefieldtype-idl.diff
+offapi-org-openoffice-vba-excel-xlcverror-idl.diff
+offapi-org-openoffice-vba-excel-xldatalabelposition-idl.diff
+offapi-org-openoffice-vba-excel-xldatalabelseparator-idl.diff
+offapi-org-openoffice-vba-excel-xldatalabelstype-idl.diff
+offapi-org-openoffice-vba-excel-xldataseriesdate-idl.diff
+offapi-org-openoffice-vba-excel-xldataseriestype-idl.diff
+offapi-org-openoffice-vba-excel-xldisplayblanksas-idl.diff
+offapi-org-openoffice-vba-excel-xldisplaydrawingobjects-idl.diff
+offapi-org-openoffice-vba-excel-xldisplayunit-idl.diff
+offapi-org-openoffice-vba-excel-xldvalterstyle-idl.diff
+offapi-org-openoffice-vba-excel-xldvtype-idl.diff
+offapi-org-openoffice-vba-excel-xleditionformat-idl.diff
+offapi-org-openoffice-vba-excel-xleditionoptionsoption-idl.diff
+offapi-org-openoffice-vba-excel-xleditiontype-idl.diff
+offapi-org-openoffice-vba-excel-xlenablecancelkey-idl.diff
+offapi-org-openoffice-vba-excel-xlenableselection-idl.diff
+offapi-org-openoffice-vba-excel-xlendstylecap-idl.diff
+offapi-org-openoffice-vba-excel-xlerrorbardirection-idl.diff
+offapi-org-openoffice-vba-excel-xlerrorbarinclude-idl.diff
+offapi-org-openoffice-vba-excel-xlerrorbartype-idl.diff
+offapi-org-openoffice-vba-excel-xlerrorchecks-idl.diff
+offapi-org-openoffice-vba-excel-xlfileaccess-idl.diff
+offapi-org-openoffice-vba-excel-xlfileformat-idl.diff
+offapi-org-openoffice-vba-excel-xlfillwith-idl.diff
+offapi-org-openoffice-vba-excel-xlfilteraction-idl.diff
+offapi-org-openoffice-vba-excel-xlformatconditionoperator-idl.diff
+offapi-org-openoffice-vba-excel-xlformatconditiontype-idl.diff
+offapi-org-openoffice-vba-excel-xlformcontrol-idl.diff
+offapi-org-openoffice-vba-excel-xlformulalabel-idl.diff
+offapi-org-openoffice-vba-excel-xlhalign-idl.diff
+offapi-org-openoffice-vba-excel-xlhebrewmodes-idl.diff
+offapi-org-openoffice-vba-excel-xlhighlightchangestime-idl.diff
+offapi-org-openoffice-vba-excel-xlhtmltype-idl.diff
+offapi-org-openoffice-vba-excel-xlimemode-idl.diff
+offapi-org-openoffice-vba-excel-xlimportdataas-idl.diff
+offapi-org-openoffice-vba-excel-xlinsertformatorigin-idl.diff
+offapi-org-openoffice-vba-excel-xlinsertshiftdirection-idl.diff
+offapi-org-openoffice-vba-excel-xllayoutformtype-idl.diff
+offapi-org-openoffice-vba-excel-xllegendposition-idl.diff
+offapi-org-openoffice-vba-excel-xllinestyle-idl.diff
+offapi-org-openoffice-vba-excel-xllink-idl.diff
+offapi-org-openoffice-vba-excel-xllinkinfo-idl.diff
+offapi-org-openoffice-vba-excel-xllinkinfotype-idl.diff
+offapi-org-openoffice-vba-excel-xllinkstatus-idl.diff
+offapi-org-openoffice-vba-excel-xllinktype-idl.diff
scp_vba_uno_service.diff
sc-source-ui-vba-makefile-mk.diff
-sc-source-ui-vba-service-cxx.diff
sc-source-ui-vba-vbaapplication-cxx.diff
sc-source-ui-vba-vbaapplication-hxx.diff
sc-source-ui-vba-vbafont-cxx.diff
@@ -1277,20 +1544,16 @@ sc-source-ui-vba-vbawindows-cxx.diff
sc-source-ui-vba-vbawindows-hxx.diff
sc-source-ui-vba-vbacharacters-cxx.diff
sc-source-ui-vba-vbacharacters-hxx.diff
+sc-source-ui-vba-vbapalette-cxx.diff
+sc-source-ui-vba-vbapalette-hxx.diff
vba-basic-globals.diff
vba-build.diff
-vba-basic-collection.diff
-
sc-vba-build-lst.diff
sc-source-ui-vba-vbahelper-cxx.diff
-sc-source-ui-inc-viewfunc-hxx.diff
-sc-source-ui-inc-tabview-hxx.diff
-sc-inc-docuno-hxx-visibility.diff
-sc-inc-document-gcc4-visibility.diff
sc-hacky-handle-boolean.diff
svx-source-inc-fmundo-hxx.diff
svx-source-form-makefile.diff
@@ -1299,9 +1562,6 @@ extensions-source-propctrlr-makefile-mk.diff
extensions-source-propctrlr-formcontroller-cxx.diff
vbaevents-services-build.diff
vbaevents-services-sources.diff
-vba-basic-multidim-uno-arraywrap.diff
-vba-optionbasesupport.diff
-vba-runtime-vba-enabled.diff
vba-dim-and-constants-patch.diff
vba-evaluate-support.diff
vba-support-stoc-typeprovider-xexactname.diff
@@ -1312,7 +1572,7 @@ vba-support-export-palette.diff
vba-sc-docuno-hook.diff
sc-sort-replace-support.diff
-
+vba-tokennames-as-defaultparams.diff
[ VBAUntested ]
basic-source-classes-eventatt-cxx.diff
@@ -1407,6 +1667,16 @@ cairo-get-depth.diff
cairo-textures-crash-fix.diff
cairo-scaled-surface-fix.diff
+
+[ AtkBridge ]
+# poke gnome-screensaver every 30 seconds during slideshow, n#169207, rodo
+# FIXME: this patch modifies some stuff added by cws-atkbridge.diff and
+# cairo-config-office-set-soenv-in.diff, so I put it here into the
+# AtkBridge section (pmladek)
+vcl-gnome-screensaver-poke.diff
+config_office-dbus-check.diff
+
+
[ msaccess ]
cws-mdbdriver01.diff
disable-access.diff
@@ -1462,7 +1732,8 @@ config_office-hsqldb-no-java.diff
gentoo-system-xalan.diff
# iz#30380 - use libxslt from system for xmlhelp / disable sablot
xmlhelp-use-libxslt-from-system.diff
-
+# system neon 0.26.x compile fixes, i#64798
+system-neon-0.26.diff
# Ark Linux used to split Qt into qt-mt and qt-base-mt so text mode apps etc.
# can use Qt base functionality without linking in the whole GUI - this
@@ -1582,11 +1853,25 @@ ark-default-ExternalMailer.diff
disable-rhino.diff
# iz#19976 - don't steal the focus, when opening windows.
framework-nofocussteal.diff
+# iz#54603 - use fontconfig for font fallback
+fontconfig-substitute.diff
+
+ooqstart-honour-sofficerc.diff
+ooqstart-black-progress-bar.diff
+
+[ DebianOnly ]
+debian-dictionary.diff
-[ SUSEPPCOnly ]
-# allows to really disable on ppc, i#62716
-buildfix-no-java-ppc.diff
-# an ugly hack to enable build on ppc, it is based on the Bernards hack
-buildfix-tg-config-gij-ppc-hack.diff
-# another ugly hack, skip testtol module on ppc
-buildfix-testtool-skip-gij-ppc-hack.diff
+[cairocanvas]
+# n#173009, i#64797, rodo
+vcl-composite-string-set-alpha.diff
+# n#174507, i#65589, rodo
+cairo-canvas-clip-more.diff
+
+# n#180871, i#65673, rodo
+cairo-query-text-bounds.diff
+
+[ NotDebian ]
+# use freetype embolden method instead of bold emulation n#176701. i65520, foa
+config_office-freetype-embolden-check.diff
+vcl-glyphs-cjk-embolden.diff
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/buildfix-tg-config-gij-ppc-hack.diff b/patches/src680/buildfix-tg-config-gij-ppc-hack.diff
deleted file mode 100644
index 9ed22383e..000000000
--- a/patches/src680/buildfix-tg-config-gij-ppc-hack.diff
+++ /dev/null
@@ -1,81 +0,0 @@
---- solenv/inc/tg_config.mk.old 2006-03-06 18:36:14.000000000 +0100
-+++ solenv/inc/tg_config.mk 2006-03-08 13:48:35.000000000 +0100
-@@ -35,6 +35,13 @@
-
- PACKAGEDIR*:=$(subst,.,$/ $(PACKAGE))
-
-+XERCES_HELPER=-Djavax.xml.datatype.DatatypeFactory=org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl \
-+ -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl \
-+ -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl \
-+ -Djavax.xml.validation.SchemaFactory=org.apache.xerces.jaxp.validation.XMLSchemaFactory \
-+ -Dorg.w3c.dom.DOMImplementationSourceList=org.apache.xerces.dom.DOMXSImplementationSourceImpl \
-+ -Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser
-+
- #
- # --- XCS ---
- #
-@@ -66,12 +73,12 @@
- -$(MKDIRHIER) $(@:d)
- .IF "$(XSLTPROC)"=="NO_XSLTPROC"
- .IF "$(NO_INSPECTION)"==""
-- $(JAVAI) $(JAVACPS) $(XML_APIS_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/cfgimport.jar -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl org.openoffice.configuration.Inspector $<
-+ $(JAVAI) $(JAVACPS) $(XML_APIS_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/cfgimport.jar -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl $(XERCES_HELPER) org.openoffice.configuration.Inspector $<
- .ENDIF # "$(NO_INSPECTION)"==""
-- $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR) -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser com.jclark.xsl.sax.Driver $< $(XSLDIR)$/schema_val.xsl $(@:d)$*.val componentName=$(PACKAGE).$*
-- $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR) -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser com.jclark.xsl.sax.Driver $< $(XSLDIR)$/sanity.xsl $(@:d)$*.san
-- $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR) -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser com.jclark.xsl.sax.Driver $< $(XSLDIR)$/schema_trim.xsl $(@:d)$*.tmp
-- $(JAVAI) $(JAVACPS) $(XML_APIS_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/schema.jar -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl org.openoffice.helper.PrettyPrinter $(@:d)$*.tmp $@
-+ $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR) -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser $(XERCES_HELPER) com.jclark.xsl.sax.Driver $< $(XSLDIR)$/schema_val.xsl $(@:d)$*.val componentName=$(PACKAGE).$*
-+ $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR) -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser $(XERCES_HELPER) com.jclark.xsl.sax.Driver $< $(XSLDIR)$/sanity.xsl $(@:d)$*.san
-+ $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR) -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser $(XERCES_HELPER) com.jclark.xsl.sax.Driver $< $(XSLDIR)$/schema_trim.xsl $(@:d)$*.tmp
-+ $(JAVAI) $(JAVACPS) $(XML_APIS_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/schema.jar -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl $(XERCES_HELPER) org.openoffice.helper.PrettyPrinter $(@:d)$*.tmp $@
- .ELSE
- # xsltproc already validates against the dtd. For additional validation,
- # org.openoffice.configuration.Inspector should be replaced and the
-@@ -105,7 +112,7 @@
- @+echo -------------+ creating locale dependent resource bundles
- -$(MKDIRHIER) $(@:d)
- .IF "$(XSLTPROC)"=="NO_XSLTPROC"
-- $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR) -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser com.jclark.xsl.sax.Driver $< $(XSLDIR)$/resource.xsl $@ locale={$(subst,$/$(PACKAGEDIR)$/$(@:f), $(subst,$(PROCESSOUT)$/registry$/res$/, $@))}
-+ $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR) -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser $(XERCES_HELPER) com.jclark.xsl.sax.Driver $< $(XSLDIR)$/resource.xsl $@ locale={$(subst,$/$(PACKAGEDIR)$/$(@:f), $(subst,$(PROCESSOUT)$/registry$/res$/, $@))}
- .ELSE
- $(XSLTPROC) -o $@ \
- --stringparam locale {$(subst,$/$(PACKAGEDIR)$/$(@:f), $(subst,$(PROCESSOUT)$/registry$/res$/, $@))} \
-@@ -133,11 +140,11 @@
- -$(MKDIRHIER) $(@:d)
- .IF "$(XSLTPROC)"=="NO_XSLTPROC"
- .IF "$(NO_INSPECTION)"==""
-- $(JAVAI) $(JAVACPS) $(XML_APIS_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/cfgimport.jar -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl org.openoffice.configuration.Inspector $<
-+ $(JAVAI) $(JAVACPS) $(XML_APIS_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/cfgimport.jar -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl $(XERCES_HELPER) org.openoffice.configuration.Inspector $<
- .ENDIF # "$(NO_INSPECTION)"==""
-- $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/cfgimport.jar -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser com.jclark.xsl.sax.Driver $< $(XSLDIR)$/data_val.xsl $(@:d)$*.val xcs=$(XCSROOT)$/registry$/schema$/$(PACKAGEDIR)$/$*.xcs schemaRoot=$(XCSROOT)$/registry$/schema
-- $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/cfgimport.jar -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser com.jclark.xsl.sax.Driver $< $(XSLDIR)$/alllang.xsl $(@:d)$*.tmp xcs=$(XCSROOT)$/registry$/schema$/$(PACKAGEDIR)$/$*.xcs schemaRoot=$(XCSROOT)$/registry$/schema
-- $(JAVAI) $(JAVACPS) $(XML_APIS_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/schema.jar -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl org.openoffice.helper.PrettyPrinter $(@:d)$*.tmp $@
-+ $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/cfgimport.jar -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser $(XERCES_HELPER) com.jclark.xsl.sax.Driver $< $(XSLDIR)$/data_val.xsl $(@:d)$*.val xcs=$(XCSROOT)$/registry$/schema$/$(PACKAGEDIR)$/$*.xcs schemaRoot=$(XCSROOT)$/registry$/schema
-+ $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/cfgimport.jar -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser $(XERCES_HELPER) com.jclark.xsl.sax.Driver $< $(XSLDIR)$/alllang.xsl $(@:d)$*.tmp xcs=$(XCSROOT)$/registry$/schema$/$(PACKAGEDIR)$/$*.xcs schemaRoot=$(XCSROOT)$/registry$/schema
-+ $(JAVAI) $(JAVACPS) $(XML_APIS_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/schema.jar -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl $(XERCES_HELPER) org.openoffice.helper.PrettyPrinter $(@:d)$*.tmp $@
- .ELSE
- # xsltproc already validates against the dtd. For additional validation,
- # org.openoffice.configuration.Inspector should be replaced and the
-@@ -174,8 +181,8 @@
- @+echo -------------+ creating locale dependent entries
- -$(MKDIRHIER) $(@:d)
- .IF "$(XSLTPROC)"=="NO_XSLTPROC"
-- $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/cfgimport.jar -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser com.jclark.xsl.sax.Driver $< $(XSLDIR)$/alllang.xsl $(@:d)$*.tmp xcs=$(XCSROOT)$/registry$/schema$/$(PACKAGEDIR)$/$*.xcs schemaRoot=$(XCSROOT)$/registry$/schema locale={$(subst,$/$(PACKAGEDIR)$/$(@:f), $(subst,$(PROCESSOUT)$/registry$/res$/, $@))}
-- $(JAVAI) $(JAVACPS) $(XML_APIS_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/schema.jar -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl org.openoffice.helper.PrettyPrinter $(@:d)$*.tmp $@
-+ $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/cfgimport.jar -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser $(XERCES_HELPER) com.jclark.xsl.sax.Driver $< $(XSLDIR)$/alllang.xsl $(@:d)$*.tmp xcs=$(XCSROOT)$/registry$/schema$/$(PACKAGEDIR)$/$*.xcs schemaRoot=$(XCSROOT)$/registry$/schema locale={$(subst,$/$(PACKAGEDIR)$/$(@:f), $(subst,$(PROCESSOUT)$/registry$/res$/, $@))}
-+ $(JAVAI) $(JAVACPS) $(XML_APIS_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/schema.jar -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl $(XERCES_HELPER) org.openoffice.helper.PrettyPrinter $(@:d)$*.tmp $@
- .ELSE
- $(XSLTPROC) -o $(@:d)$*.tmp \
- --stringparam xcs $(XCSROOT)$/registry$/schema$/$(PACKAGEDIR)$/$*.xcs \
-@@ -210,8 +217,8 @@
- @+echo -------------+ creating a module file
- -$(MKDIRHIER) $(@:d)
- .IF "$(XSLTPROC)"=="NO_XSLTPROC"
-- $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/cfgimport.jar -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser com.jclark.xsl.sax.Driver $< $(XSLDIR)$/alllang.xsl $(@:d)$(@:f:s/.xcu/.tmp/) xcs=$(XCSROOT)$/registry$/schema$/$(PACKAGEDIR)$/$(<:b).xcs schemaRoot=$(XCSROOT)$/registry$/schema module={$(subst,$(<:b)-, $(*))}
-- $(JAVAI) $(JAVACPS) $(XML_APIS_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/schema.jar -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl org.openoffice.helper.PrettyPrinter $(@:d)$(@:f:s/.xcu/.tmp/) $@
-+ $(JAVAI) $(JAVACPS) $(XT_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/cfgimport.jar -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser $(XERCES_HELPER) com.jclark.xsl.sax.Driver $< $(XSLDIR)$/alllang.xsl $(@:d)$(@:f:s/.xcu/.tmp/) xcs=$(XCSROOT)$/registry$/schema$/$(PACKAGEDIR)$/$(<:b).xcs schemaRoot=$(XCSROOT)$/registry$/schema module={$(subst,$(<:b)-, $(*))}
-+ $(JAVAI) $(JAVACPS) $(XML_APIS_JAR)$(PATH_SEPERATOR)$(XERCES_JAR)$(PATH_SEPERATOR)$(PROCESSORDIR)$/schema.jar -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl $(XERCES_HELPER) org.openoffice.helper.PrettyPrinter $(@:d)$(@:f:s/.xcu/.tmp/) $@
- .ELSE
- $(XSLTPROC) -o $(@:d)$(@:f:s/.xcu/.tmp/) \
- --stringparam xcs $(XCSROOT)$/registry$/schema$/$(PACKAGEDIR)$/$(<:b).xcs \
diff --git a/patches/src680/config_office-dbus-check.diff b/patches/src680/config_office-dbus-check.diff
new file mode 100644
index 000000000..24a8a041f
--- /dev/null
+++ b/patches/src680/config_office-dbus-check.diff
@@ -0,0 +1,40 @@
+--- config_office/configure.in.1 2006-06-22 16:51:27.000000000 +0200
++++ config_office/configure.in 2006-06-22 16:50:25.000000000 +0200
+@@ -4386,11 +4386,17 @@ dnl ====================================
+
+ GTK_CFLAGS=""
+ GTK_LIBS=""
++ENABLE_DBUS=""
++DBUS_PACKAGE=""
+ if test "$test_gtk" = "yes"; then
+
+ if test "$ENABLE_GTK" = "TRUE" ; then
+ PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.4)
+ PKG_CHECK_MODULES(GDKPIXBUF, gdk-pixbuf-xlib-2.0 >= 2.2)
++ if ${PKG_CONFIG} --atleast-version 0.60 dbus-glib-1 ; then
++ ENABLE_DBUS="YES"
++ DBUS_PACKAGE="dbus-glib-1"
++ fi
+ GTK_CFLAGS="$GTK_CFLAGS $GDKPIXBUF_CFLAGS"
+ GTK_LIBS="$GTK_LIBS $GDKPIXBUF_LIBS"
+ BUILD_TYPE="$BUILD_TYPE GTK"
+@@ -4399,6 +4405,8 @@ if test "$test_gtk" = "yes"; then
+ fi
+ AC_SUBST(GTK_CFLAGS)
+ AC_SUBST(GTK_LIBS)
++AC_SUBST(ENABLE_DBUS)
++AC_SUBST(DBUS_PACKAGE)
+
+ dnl ===================================================================
+ dnl Check whether the Cairo libraries are available.
+--- config_office/set_soenv.in.1 2006-06-22 17:53:57.000000000 +0200
++++ config_office/set_soenv.in 2006-06-22 17:54:51.000000000 +0200
+@@ -1497,6 +1497,8 @@ ToFile( "ENABLE_GTK", "@ENABLE_GT
+ ToFile( "GTK_CFLAGS", "@GTK_CFLAGS@", "e" );
+ ToFile( "GTK_LIBS", "@GTK_LIBS@", "e" );
+ ToFile( "ENABLE_STATIC_GTK", "@ENABLE_STATIC_GTK@", "e" );
++ToFile( "ENABLE_DBUS", "@ENABLE_DBUS@", "e" );
++ToFile( "DBUS_PACKAGE", "@DBUS_PACKAGE@", "e" );
+ ToFile( "ENABLE_CAIRO", "@ENABLE_CAIRO@", "e" );
+ ToFile( "ENABLE_GNOMEVFS", "@ENABLE_GNOMEVFS@", "e" );
+ ToFile( "ENABLE_KDE", "@ENABLE_KDE@", "e" );
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..e9d403b25
--- /dev/null
+++ b/patches/src680/config_office-freetype-embolden-check.diff
@@ -0,0 +1,40 @@
+--- config_office/configure.in.old 2006-06-16 18:53:52.000000000 +0200
++++ config_office/configure.in 2006-06-29 19:21:49.000000000 +0200
+@@ -2693,6 +2693,27 @@
+ AC_SUBST(FREETYPE_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 cairo
+ dnl ===================================================================
+ AC_MSG_CHECKING([which cairo to use])
+--- config_office/set_soenv.in.old 2006-06-16 18:53:52.000000000 +0200
++++ config_office/set_soenv.in 2006-06-29 19:20:54.000000000 +0200
+@@ -1786,6 +1786,7 @@
+ ToFile( "SYSTEM_FREETYPE", "@SYSTEM_FREETYPE@", "e" );
+ ToFile( "FREETYPE_CFLAGS", "@FREETYPE_CFLAGS@", "e" );
+ ToFile( "FREETYPE_LIBS", "@FREETYPE_LIBS@", "e" );
++ToFile( "USE_FT_EMBOLDEN", "@USE_FT_EMBOLDEN@", "e" );
+ ToFile( "SYSTEM_CAIRO", "@SYSTEM_CAIRO@", "e" );
+ ToFile( "CAIRO_CFLAGS", "@CAIRO_CFLAGS@", "e" );
+ ToFile( "CAIRO_LIBS", "@CAIRO_LIBS@", "e" );
diff --git a/patches/src680/crash-menu-escape.diff b/patches/src680/crash-menu-escape.diff
new file mode 100644
index 000000000..37c28ba20
--- /dev/null
+++ b/patches/src680/crash-menu-escape.diff
@@ -0,0 +1,13 @@
+diff -u -p -u -r1.132 menu.cxx
+--- vcl/source/window/menu.cxx 26 Jan 2006 18:10:24 -0000 1.132
++++ vcl/source/window/menu.cxx 23 May 2006 13:45:40 -0000
+@@ -4406,7 +4466,8 @@ void MenuFloatingWindow::KeyInput( const
+ MenuFloatingWindow* pFloat = pPopupMenu->ImplGetFloatingWindow();
+ pFloat->GrabFocus();
+ pFloat->KillActivePopup();
+- pPopupMenu->pStartedFrom->ImplCallHighlight(pFloat->nHighlightedItem);
++ if (pPopupMenu->pStartedFrom)
++ pPopupMenu->pStartedFrom->ImplCallHighlight(pFloat->nHighlightedItem);
+ }
+ }
+ break;
diff --git a/patches/src680/cws-atkbridge-20060425.diff b/patches/src680/cws-atkbridge-20060425.diff
new file mode 100644
index 000000000..ae7a6c534
--- /dev/null
+++ b/patches/src680/cws-atkbridge-20060425.diff
@@ -0,0 +1,8312 @@
+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 );
+
+Index: svtools/source/Accessibility/accessibletablistboxtable.cxx
+===================================================================
+RCS file: /cvs/util/svtools/source/Accessibility/accessibletablistboxtable.cxx,v
+retrieving revision 1.8
+retrieving revision 1.8.14.1
+diff -u -p -r1.8 -r1.8.14.1
+--- svtools/source/Accessibility/accessibletablistboxtable.cxx 6 Feb 2006 12:56:48 -0000 1.8
++++ svtools/source/Accessibility/accessibletablistboxtable.cxx 9 Mar 2006 12:01:53 -0000 1.8.14.1
+@@ -106,8 +106,9 @@ namespace svt
+ {
+ if ( isAlive() )
+ {
+- switch ( rVclWindowEvent.GetId() )
+- {
++ ULONG nEventId = rVclWindowEvent.GetId();
++ switch ( nEventId )
++ {
+ case VCLEVENT_OBJECT_DYING :
+ {
+ m_pTabListBox->RemoveEventListener( LINK( this, AccessibleTabListBoxTable, WindowEventListener ) );
+@@ -115,7 +116,19 @@ namespace svt
+ break;
+ }
+
+- case VCLEVENT_LISTBOX_SELECT :
++ case VCLEVENT_CONTROL_GETFOCUS :
++ case VCLEVENT_CONTROL_LOSEFOCUS :
++ {
++ uno::Any aOldValue, aNewValue;
++ if ( VCLEVENT_CONTROL_GETFOCUS == nEventId )
++ aNewValue <<= AccessibleStateType::FOCUSED;
++ else
++ aOldValue <<= AccessibleStateType::FOCUSED;
++ commitEvent( AccessibleEventId::STATE_CHANGED, aNewValue, aOldValue );
++ break;
++ }
++
++ case VCLEVENT_LISTBOX_SELECT :
+ {
+ // First send an event that tells the listeners of a
+ // modified selection. The active descendant event is
+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: svtools/util/defs/wntmsci7
+===================================================================
+RCS file: svtools/util/defs/wntmsci7
+diff -N svtools/util/defs/wntmsci7
+--- 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.58
+retrieving revision 1.57.10.2
+diff -u -p -r1.58 -r1.57.10.2
+--- toolkit/source/awt/vclxwindow.cxx 14 Mar 2006 10:53:33 -0000 1.58
++++ toolkit/source/awt/vclxwindow.cxx 22 Mar 2006 09:36:46 -0000 1.57.10.2
+@@ -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
+@@ -924,47 +930,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: toolkit/util/defs/wntmsci7
+===================================================================
+RCS file: toolkit/util/defs/wntmsci7
+diff -N toolkit/util/defs/wntmsci7
+--- sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx 6 Apr 2006 16:26:52 -0000 1.22
++++ sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx 13 Apr 2006 09:51:26 -0000 1.21.14.2
+@@ -111,7 +111,7 @@ SlideSorterViewShell::SlideSorterViewShe
+ pWindow->SetUseDropScroll (false);
+ // Change the winbits so that the active window accepts the focus.
+ pWindow->SetStyle ((pWindow->GetStyle() & ~WB_DIALOGCONTROL) | WB_TABSTOP);
+- pWindow->Show();
++ pWindow->Hide();
+
+
+ SetPool( &GetDoc()->GetPool() );
+@@ -268,6 +268,8 @@ void SlideSorterViewShell::CreateModelVi
+ DBG_ASSERT (mpSlideSorterView.get()!=NULL,
+ "Can not create view for slide browser");
+
++ mpView = mpSlideSorterView.get();
++
+ mpSlideSorterController
+ = ::std::auto_ptr<controller::SlideSorterController>(
+ CreateController());
+cvs diff: Diffing sd/source/ui/slidesorter/view
+cvs diff: Diffing sd/source/ui/toolpanel
+cvs diff: Diffing sd/source/ui/toolpanel/controls
+cvs diff: Diffing sd/source/ui/tools
+cvs diff: Diffing sd/source/ui/unoidl
+cvs diff: Diffing sd/source/ui/view
+cvs diff: Diffing sd/source/unotypes
+cvs diff: Diffing sd/uiconfig
+cvs diff: Diffing sd/uiconfig/sdraw
+cvs diff: Diffing sd/uiconfig/sdraw/accelerator
+cvs diff: Diffing sd/uiconfig/sdraw/accelerator/de
+cvs diff: Diffing sd/uiconfig/sdraw/accelerator/en-GB
+cvs diff: Diffing sd/uiconfig/sdraw/accelerator/en-US
+cvs diff: Diffing sd/uiconfig/sdraw/accelerator/es
+cvs diff: Diffing sd/uiconfig/sdraw/accelerator/fr
+cvs diff: Diffing sd/uiconfig/sdraw/menubar
+cvs diff: Diffing sd/uiconfig/sdraw/statusbar
+cvs diff: Diffing sd/uiconfig/sdraw/toolbar
+cvs diff: Diffing sd/uiconfig/simpress
+cvs diff: Diffing sd/uiconfig/simpress/accelerator
+cvs diff: Diffing sd/uiconfig/simpress/accelerator/de
+cvs diff: Diffing sd/uiconfig/simpress/accelerator/en-GB
+cvs diff: Diffing sd/uiconfig/simpress/accelerator/en-US
+cvs diff: Diffing sd/uiconfig/simpress/accelerator/es
+cvs diff: Diffing sd/uiconfig/simpress/accelerator/fr
+cvs diff: Diffing sd/uiconfig/simpress/menubar
+cvs diff: Diffing sd/uiconfig/simpress/statusbar
+cvs diff: Diffing sd/uiconfig/simpress/toolbar
+cvs diff: Diffing sd/util
+cvs diff: Diffing sd/util/defs
+Index: sd/util/defs/wntmsci8
+===================================================================
+RCS file: sd/util/defs/wntmsci8
+diff -N sd/util/defs/wntmsci8
+--- 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/ChildrenManagerImpl.cxx
+===================================================================
+RCS file: /cvs/graphics/svx/source/accessibility/ChildrenManagerImpl.cxx,v
+retrieving revision 1.33
+retrieving revision 1.33.172.1
+diff -u -p -r1.33 -r1.33.172.1
+--- svx/source/accessibility/ChildrenManagerImpl.cxx 8 Sep 2005 20:20:26 -0000 1.33
++++ svx/source/accessibility/ChildrenManagerImpl.cxx 30 Mar 2006 08:27:45 -0000 1.33.172.1
+@@ -537,34 +537,45 @@ void ChildrenManagerImpl::AddAccessibleS
+
+ void ChildrenManagerImpl::ClearAccessibleShapeList (void)
+ {
++ // Copy the list of (visible) shapes to local lists and clear the
++ // originals.
++ ChildDescriptorListType aLocalVisibleChildren;
++ aLocalVisibleChildren.swap(maVisibleChildren);
++ AccessibleShapeList aLocalAccessibleShapes;
++ aLocalAccessibleShapes.swap(maAccessibleShapes);
++
++ // Tell the listeners that all children are gone.
++ mrContext.CommitChange (
++ AccessibleEventId::INVALIDATE_ALL_CHILDREN,
++ uno::Any(),
++ uno::Any());
++
++ // There are no accessible shapes left so the index assigned to new
++ // accessible shapes can be reset.
++ mnNewNameIndex = 1;
++
++ // Now the objects in the local lists can be safely disposed without
++ // having problems with callers that want to update their child lists.
++
+ // Clear the list of visible accessible objects. Objects not created on
+ // demand for XShapes are treated below.
+- ChildDescriptorListType::iterator I,aEnd = maVisibleChildren.end();
+- for (I=maVisibleChildren.begin(); I != aEnd; ++I)
++ ChildDescriptorListType::iterator I,aEnd = aLocalVisibleChildren.end();
++ for (I=aLocalVisibleChildren.begin(); I != aEnd; ++I)
+ if ( I->mxAccessibleShape.is() && I->mxShape.is() )
+- I->disposeAccessibleObject(mrContext);
+-
+- maVisibleChildren.clear ();
+-
++ {
++ ::comphelper::disposeComponent(I->mxAccessibleShape);
++ I->mxAccessibleShape = NULL;
++ }
+
+ // Dispose all objects in the accessible shape list.
+- AccessibleShapeList::iterator J,aEnd2 = maAccessibleShapes.end();
+- for (J=maAccessibleShapes.begin(); J != aEnd2; ++J)
++ AccessibleShapeList::iterator J,aEnd2 = aLocalAccessibleShapes.end();
++ for (J=aLocalAccessibleShapes.begin(); J != aEnd2; ++J)
+ if (J->is())
+ {
+- mrContext.CommitChange (
+- AccessibleEventId::CHILD,
+- uno::Any(),
+- uno::makeAny (*J));
+-
+ // Dispose the object.
+ ::comphelper::disposeComponent(*J);
++ *J = NULL;
+ }
+- maAccessibleShapes.clear ();
+-
+- // Now that no accessible shapes remain we can reset the index assigned
+- // to new accessible shapes.
+- mnNewNameIndex = 1;
+ }
+
+
+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: svx/util/defs/wntmsci7
+===================================================================
+RCS file: svx/util/defs/wntmsci7
+diff -N svx/util/defs/wntmsci7
+--- 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: comphelper/util/defs/wntmsci7
+===================================================================
+RCS file: comphelper/util/defs/wntmsci7
+diff -N comphelper/util/defs/wntmsci7
+--- 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.36
+retrieving revision 1.35.12.2
+diff -u -p -r1.36 -r1.35.12.2
+--- vcl/inc/svapp.hxx 7 Apr 2006 15:28:31 -0000 1.36
++++ vcl/inc/svapp.hxx 13 Apr 2006 10:10:38 -0000 1.35.12.2
+@@ -348,7 +348,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.62
+retrieving revision 1.58.10.8
+diff -u -p -r1.62 -r1.58.10.8
+--- vcl/source/app/svapp.cxx 7 Apr 2006 15:29:41 -0000 1.62
++++ vcl/source/app/svapp.cxx 13 Apr 2006 10:11:31 -0000 1.58.10.8
+@@ -875,7 +875,7 @@ void Application::ImplCallEventListeners
+
+ // -----------------------------------------------------------------------
+
+-void Application::ImplCallEventListeners( VclWindowEvent* pEvent )
++void Application::ImplCallEventListeners( VclSimpleEvent* pEvent )
+ {
+ ImplSVData* pSVData = ImplGetSVData();
+
+@@ -1235,7 +1235,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() )
+@@ -1251,7 +1251,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() )
+@@ -1876,10 +1876,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
+@@ -1889,7 +1891,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.133
+retrieving revision 1.127.12.7
+diff -u -p -r1.133 -r1.127.12.7
+--- vcl/source/window/menu.cxx 7 Apr 2006 15:34:24 -0000 1.133
++++ vcl/source/window/menu.cxx 13 Apr 2006 10:14:51 -0000 1.127.12.7
+@@ -574,7 +574,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
+@@ -1109,6 +1108,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 );
+
+@@ -2881,7 +2887,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 -
+@@ -4403,9 +4422,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;
+@@ -4619,18 +4640,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 31 Mar 2006 12:19:38 -0000 1.1.2.8
+@@ -0,0 +1,283 @@
++/*************************************************************************
++ *
++ * 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 *, gint)
++{
++ // GAIL implement this only for cells
++ g_warning( "Not implemented: get_description()" );
++ return "";
++}
++
++static G_CONST_RETURN gchar *
++action_wrapper_get_localized_name (AtkAction *, gint)
++{
++ // 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 *, gint, const gchar *)
++{
++ 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 11 Apr 2006 08:45:10 -0000 1.1.2.5
+@@ -0,0 +1,115 @@
++/*************************************************************************
++ *
++ * 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"
++
++#include <stdio.h>
++
++#if ! ( defined AIX || defined HPUX ) // these have no dl* functions
++#include <dlfcn.h>
++#endif
++
++void InitAtkBridge(void)
++{
++ unsigned int major, minor, micro;
++
++ /* check gail minimum version requirements */
++ if( sscanf( atk_get_toolkit_version(), "%u.%u.%u", &major, &minor, &micro) < 3 )
++ {
++ g_warning( "unable to parse gail version number" );
++ return;
++ }
++
++ if( ( (major << 16) | (minor << 8) | micro ) < ( (1 << 16) | 8 << 8 | 6 ) )
++ {
++ g_warning( "libgail >= 1.8.6 required for accessibility support" );
++ return;
++ }
++
++ /* get at-spi version by checking the libspi.so version number */
++#if ! ( defined AIX || defined HPUX ) // these have no dl* functions
++
++ /* libspi should be mapped by loading libatk-bridge.so already */
++ void * sym = dlsym( RTLD_DEFAULT, "spi_accessible_new" );
++ g_return_if_fail( sym != NULL );
++
++ Dl_info dl_info;
++ int ret = dladdr( sym, &dl_info );
++ g_return_if_fail( ret != 0 );
++
++ char path[PATH_MAX];
++ if( NULL == realpath(dl_info.dli_fname, path) )
++ {
++ perror( "unable to resolve libspi.so.0" );
++ return;
++ }
++
++ const char * cp = strrchr(path, '/');
++ if( cp != NULL )
++ ++cp;
++ else
++ cp = dl_info.dli_fname;
++
++ if( sscanf( cp, "libspi.so.%u.%u.%u", &major, &minor, &micro) < 3 )
++ {
++ g_warning( "unable to parse at-spi version number: %s", cp );
++ return;
++ }
++
++ if( ( (major << 16) | (minor << 8) | micro ) < ( 10 << 8 | 6 ) )
++ {
++ g_warning( "at-spi >= 1.7 required for accessibility support" );
++ return;
++ }
++
++#endif // ! ( defined AIX || defined HPUX )
++
++ /* 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 31 Mar 2006 12:19:39 -0000 1.1.2.9
+@@ -0,0 +1,387 @@
++/*************************************************************************
++ *
++ * 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 )
++ 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 *, gint, gint, gint, gint, AtkCoordType)
++{
++ g_warning( "AtkComponent::set_extents unimplementable" );
++ return FALSE;
++}
++
++/*****************************************************************************/
++
++static gboolean
++component_wrapper_set_position (AtkComponent *, gint, gint, AtkCoordType)
++{
++ g_warning( "AtkComponent::set_position unimplementable" );
++ return FALSE;
++}
++
++/*****************************************************************************/
++
++static gboolean
++component_wrapper_set_size (AtkComponent *, gint, gint)
++{
++ 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 *)
++{
++ // 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 31 Mar 2006 12:19:39 -0000 1.1.2.12
+@@ -0,0 +1,174 @@
++/*************************************************************************
++ *
++ * 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 * )
++{
++ 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,
++ 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 );
++
++ /* HACK: if the parent gtk window has an accessible already assigned, use
++ * this one to avoid endless recursion (see atkwindow.cxx).
++ */
++ AtkObject* parent_accessible = (AtkObject *) g_object_get_data(G_OBJECT( parent_widget ),
++ "ooo:tooltip-accessible");
++
++ if( ! parent_accessible )
++ 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 31 Mar 2006 12:19:39 -0000 1.1.2.10
+@@ -0,0 +1,296 @@
++/*************************************************************************
++ *
++ * 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 * )
++{
++ g_warning( "FIXME: hyper_link_link_state unimplemented" );
++ return 0;
++}
++static gboolean
++hyper_link_is_selected_link( AtkHyperlink * )
++{
++ 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 (AtkHyperlinkClass),
++ 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 31 Mar 2006 12:19:39 -0000 1.1.2.5
+@@ -0,0 +1,143 @@
++/*************************************************************************
++ *
++ * 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 *, const gchar * )
++{
++ 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 31 Mar 2006 14:09:17 -0000 1.1.2.20
+@@ -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& ) 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 )
++{
++ 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:
++
++#ifdef HAS_ATKRECTANGLE
++ 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");
++#endif
++
++ 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 %d", aEvent.EventId );
++ 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 31 Mar 2006 12:19:39 -0000 1.1.2.8
+@@ -0,0 +1,726 @@
++/*************************************************************************
++ *
++ * 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 *, gint )
++{
++ g_warning( "FIXME: no simple analogue for add_row_selection" );
++ return 0;
++}
++
++/*****************************************************************************/
++
++static gboolean
++table_wrapper_remove_row_selection( AtkTable *, gint )
++{
++ g_warning( "FIXME: no simple analogue for remove_row_selection" );
++ return 0;
++}
++
++/*****************************************************************************/
++
++static gboolean
++table_wrapper_add_column_selection( AtkTable *, gint )
++{
++ g_warning( "FIXME: no simple analogue for add_column_selection" );
++ return 0;
++}
++
++/*****************************************************************************/
++
++static gboolean
++table_wrapper_remove_column_selection( AtkTable *, gint )
++{
++ g_warning( "FIXME: no simple analogue for remove_column_selection" );
++ return 0;
++}
++
++/*****************************************************************************/
++
++static void
++table_wrapper_set_caption( AtkTable *, AtkObject * )
++{ // meaningless helper
++}
++
++/*****************************************************************************/
++
++static void
++table_wrapper_set_column_description( AtkTable *, gint, const gchar * )
++{ // meaningless helper
++}
++
++
++/*****************************************************************************/
++
++static void
++table_wrapper_set_column_header( AtkTable *, gint, AtkObject * )
++{ // meaningless helper
++}
++
++
++/*****************************************************************************/
++
++static void
++table_wrapper_set_row_description( AtkTable *, gint, const gchar * )
++{ // meaningless helper
++}
++
++/*****************************************************************************/
++
++static void
++table_wrapper_set_row_header( AtkTable *, gint, AtkObject * )
++{ // meaningless helper
++}
++
++/*****************************************************************************/
++
++static void
++table_wrapper_set_summary( AtkTable *, AtkObject * )
++{ // 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->add_column_selection = table_wrapper_add_column_selection;
++ iface->remove_column_selection = table_wrapper_remove_column_selection;
++ iface->get_selected_columns = table_wrapper_get_selected_columns;
++ iface->is_column_selected = table_wrapper_is_column_selected;
++ 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 13 Apr 2006 12:48:16 -0000 1.1.2.14
+@@ -0,0 +1,549 @@
++/*************************************************************************
++ *
++ * 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;
++
++ g_return_val_if_fail( end_offset > start_offset, 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 * )
++{
++ // 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( start_offset, end_offset );
++ }
++ 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 31 Mar 2006 12:19:40 -0000 1.1.2.3
+@@ -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&)
++{
++ return NULL;
++}
++
++static bool
++InvalidValue( uno::Any&, const gchar * )
++{
++ 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( "%ld", rAny.get<sal_Int32>() );
++}
++
++static bool
++String2Long( uno::Any& rAny, const gchar * value )
++{
++ sal_Int32 lval;
++
++ if( 1 != sscanf( value, "%ld", &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 != -1 ) // 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 )
++{
++ int red, green, blue;
++
++ if( 3 != sscanf( value, "%d,%d,%d", &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( "%ld", aMargin.getHeight() );
++}
++
++static bool
++Pixel2MarginHeight( uno::Any& rAny, const gchar * value )
++{
++ sal_Int32 nHeight;
++
++ if( 1 != sscanf( value, "%ld", &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( "%ld", aMargin.getWidth() );
++}
++
++static bool
++Pixel2MarginWidth( uno::Any& rAny, const gchar * value )
++{
++ sal_Int32 nWidth;
++
++ if( 1 != sscanf( value, "%ld", &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 31 Mar 2006 12:19:40 -0000 1.1.2.15
+@@ -0,0 +1,626 @@
++/*************************************************************************
++ *
++ * 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 >&,
++ 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 *, ::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 *)
++{
++ 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,
++ 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 31 Mar 2006 12:19:40 -0000 1.1.2.6
+@@ -0,0 +1,149 @@
++/*************************************************************************
++ *
++ * 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 ) );
++
++ if( obj->role == ATK_ROLE_TOOL_TIP )
++ {
++ /* HACK: Avoid endless loop when get_name is called from
++ * gail_window_new() context, which leads to the code path
++ * showing up in wrapper_factory_create_accessible with no
++ * accessible assigned to the GtkWindow yet.
++ */
++ g_object_set_data( G_OBJECT( data ), "ooo:tooltip-accessible", obj );
++ }
++}
++
++/*****************************************************************************/
++
++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,
++ 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 31 Mar 2006 12:19:40 -0000 1.1.2.22
+@@ -0,0 +1,820 @@
++/*************************************************************************
++ *
++ * 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 )
++{
++ AtkStateType type = ATK_STATE_INVALID;
++
++ // A perfect / complete mapping ...
++ switch( nState )
++ {
++#define MAP_DIRECT( a ) \
++ case accessibility::AccessibleStateType::a: \
++ type = 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:
++ type = ATK_STATE_DEFUNCT; break;
++ case accessibility::AccessibleStateType::MULTI_SELECTABLE:
++ type = ATK_STATE_MULTISELECTABLE; break;
++ default:
++ break;
++ }
++
++ return type;
++}
++
++static AtkRole mapToAtkRole( sal_Int16 nRole )
++{
++ AtkRole role = ATK_ROLE_UNKNOWN;
++
++ switch( nRole )
++ {
++#define MAP(a,b) \
++ case a: role = 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
++ default:
++ break;
++ }
++/* 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 role;
++}
++
++
++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 i = 0; i < nTargetCount; i++ )
++ {
++ uno::Reference< accessibility::XAccessible > xAccessible(
++ aRelation.TargetSet[i], uno::UNO_QUERY );
++ pTargets[i] = 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();
++
++ if( xStateSet.is() )
++ {
++ uno::Sequence< sal_Int16 > aStates = xStateSet->getStates();
++
++ for( sal_Int32 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)
++{
++ 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,
++ NULL
++ } ;
++ 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, NULL
++ } ;
++ nType = g_type_register_static( ATK_TYPE_OBJECT_WRAPPER,
++ aTypeName, &aTypeInfo, (GTypeFlags)0 ) ;
++
++ for( int j = 0; j < aTypeTableSize; j++ )
++ if( bTypes[j] )
++ {
++ GInterfaceInfo aIfaceInfo = { NULL, NULL, NULL };
++ aIfaceInfo.interface_init = aTypeTable[j].aInit;
++ g_type_add_interface_static (nType, aTypeTable[j].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 31 Mar 2006 12:19:40 -0000 1.1.2.9
+@@ -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 31 Mar 2006 14:09:18 -0000 1.1.2.13
+@@ -0,0 +1,102 @@
++#*************************************************************************
++#
++# 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)\"
++
++ATKVERSION:=$(shell $(PKGCONFIG) --modversion atk | $(AWK) -v num=true -f $(SOLARENV)$/bin$/getcompver.awk)
++
++.IF $(ATKVERSION) >= "000100070000"
++CFLAGS+=-DHAS_ATKRECTANGLE
++.ENDIF
++
++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.45
+retrieving revision 1.28.6.21
+diff -u -p -r1.45 -r1.28.6.21
+--- vcl/unx/gtk/window/gtkframe.cxx 6 Apr 2006 15:40:19 -0000 1.45
++++ vcl/unx/gtk/window/gtkframe.cxx 13 Apr 2006 10:15:28 -0000 1.28.6.21
+@@ -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.78
+retrieving revision 1.65.110.12
+diff -u -p -r1.78 -r1.65.110.12
+--- vcl/util/makefile.mk 7 Apr 2006 15:36:14 -0000 1.78
++++ vcl/util/makefile.mk 13 Apr 2006 10:18:03 -0000 1.65.110.12
+@@ -358,8 +358,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)
+cvs diff: Diffing vcl/util/defs
+Index: vcl/util/defs/wntmsci7
+===================================================================
+RCS file: vcl/util/defs/wntmsci7
+diff -N vcl/util/defs/wntmsci7
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/disable-access.diff b/patches/src680/disable-access.diff
index 3174d9862..afb4a9966 100644
--- a/patches/src680/disable-access.diff
+++ b/patches/src680/disable-access.diff
@@ -27,7 +27,7 @@
+ AC_MSG_RESULT([yes])
+ ENABLE_ACCESS="YES"
+ AC_MSG_CHECKING([which mdbtools to use])
-+ if test "$with_system_mdbtools" == "yes"; then
++ if test "$with_system_mdbtools" = "yes"; then
+ AC_MSG_RESULT([external])
+ SYSTEM_MDBTOOLS=YES
+ else
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/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/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/helpcontent2-greek-fonts.diff b/patches/src680/helpcontent2-greek-fonts.diff
new file mode 100644
index 000000000..817f65598
--- /dev/null
+++ b/patches/src680/helpcontent2-greek-fonts.diff
@@ -0,0 +1,75 @@
+--- helpcontent2/source/auxiliary/el.old/default.css 2005-09-05 13:44:11.000000000 +0200
++++ helpcontent2/source/auxiliary/el/default.css 2006-04-20 12:02:35.000000000 +0200
+@@ -10,10 +10,10 @@
+
+
+ body, p, h1, h2, h3, h4, h5, h6, .listitem, .listitemintable, .tablecontent, .tablecontentintable
+- { font-family: "Bitstream Vera Sans",Arial,Helvetica,Lucida,Geneva,Helmet,sans-serif,"Andale Sans UI","Arial Unicode MS","Lucida Sans Unicode",Tahoma; }
++ { font-family: "Albany AMT",Albany,Arial,"DejaVu Sans","CMU Sans Serif","FreeSans","Nimbus Sans L","Bitstream Vera Sans",Helvetica,Lucida,Geneva,Helmet,"Andale Sans UI","Arial Unicode MS","Lucida Sans Unicode",Tahoma,sans-serif; }
+
+ .code, .codeintable, .example, .exampleintable, .literal, .literalintable, .path, .pathintable
+- { font-family: "Bitstream Vera Sans Mono",Cumberland,"Courier New",Courier,"Lucida Sans Typewriter","Lucida Typewriter",Monaco,Monospaced; margin-top: 1pt; margin-bottom: 1pt;}
++ { font-family: "Cumberland AMT",Cumberland,"Courier New","DejaVu Sans Mono","CMU Typewriter Text","FreeMono","Nimbus Mono L","Bitstream Vera Sans Mono",Courier,"Lucida Sans Typewriter","Lucida Typewriter",Monaco,Monospaced; margin-top: 1pt; margin-bottom: 1pt;}
+
+ .acronym
+ { font-weight: bold; }
+--- helpcontent2/source/auxiliary/el.old/highcontrastblack.css 2005-09-05 13:44:54.000000000 +0200
++++ helpcontent2/source/auxiliary/el/highcontrastblack.css 2006-04-20 12:15:35.000000000 +0200
+@@ -10,10 +10,10 @@
+
+
+ body, p, h1, h2, h3, h4, h5, h6, .listitem, .listitemintable, .tablecontent, .tablecontentintable
+- { font-family: "Bitstream Vera Sans",Arial,Helvetica,Lucida,Geneva,Helmet,sans-serif,"Andale Sans UI","Arial Unicode MS","Lucida Sans Unicode",Tahoma; }
++ { font-family: "Albany AMT",Albany,Arial,"DejaVu Sans","CMU Sans Serif","FreeSans","Nimbus Sans L","Bitstream Vera Sans",Helvetica,Lucida,Geneva,Helmet,"Andale Sans UI","Arial Unicode MS","Lucida Sans Unicode",Tahoma,sans-serif; }
+
+ .code, .codeintable, .example, .exampleintable, .literal, .literalintable, .path, .pathintable
+- { font-family: "Bitstream Vera Sans Mono",Cumberland,"Courier New",Courier,"Lucida Sans Typewriter","Lucida Typewriter",Monaco,Monospaced; margin-top: 1pt; margin-bottom: 1pt;}
++ { font-family: "Cumberland AMT",Cumberland,"Courier New","DejaVu Sans Mono","CMU Typewriter Text","FreeMono","Nimbus Mono L","Bitstream Vera Sans Mono",Courier,"Lucida Sans Typewriter","Lucida Typewriter",Monaco,Monospaced; margin-top: 1pt; margin-bottom: 1pt;}
+
+ .acronym
+ { font-weight: bold;}
+--- helpcontent2/source/auxiliary/el.old/highcontrastwhite.css 2005-09-05 13:45:19.000000000 +0200
++++ helpcontent2/source/auxiliary/el/highcontrastwhite.css 2006-04-20 12:15:50.000000000 +0200
+@@ -10,10 +10,10 @@
+
+
+ body, p, h1, h2, h3, h4, h5, h6, .listitem, .listitemintable, .tablecontent, .tablecontentintable
+- { font-family: "Bitstream Vera Sans",Arial,Helvetica,Lucida,Geneva,Helmet,sans-serif,"Andale Sans UI","Arial Unicode MS","Lucida Sans Unicode",Tahoma; }
++ { font-family: "Albany AMT",Albany,Arial,"DejaVu Sans","CMU Sans Serif","FreeSans","Nimbus Sans L","Bitstream Vera Sans",Helvetica,Lucida,Geneva,Helmet,"Andale Sans UI","Arial Unicode MS","Lucida Sans Unicode",Tahoma,sans-serif; }
+
+ .code, .codeintable, .example, .exampleintable, .literal, .literalintable, .path, .pathintable
+- { font-family: "Bitstream Vera Sans Mono",Cumberland,"Courier New",Courier,"Lucida Sans Typewriter","Lucida Typewriter",Monaco,Monospaced; margin-top: 1pt; margin-bottom: 1pt;}
++ { font-family: "Cumberland AMT",Cumberland,"Courier New","DejaVu Sans Mono","CMU Typewriter Text","FreeMono","Nimbus Mono L","Bitstream Vera Sans Mono",Courier,"Lucida Sans Typewriter","Lucida Typewriter",Monaco,Monospaced; margin-top: 1pt; margin-bottom: 1pt;}
+
+ .acronym
+ { font-weight: bold;}
+--- helpcontent2/source/auxiliary/el.old/highcontrast1.css 2005-09-05 13:44:26.000000000 +0200
++++ helpcontent2/source/auxiliary/el/highcontrast1.css 2006-04-20 12:14:48.000000000 +0200
+@@ -10,10 +10,10 @@
+
+
+ body, p, h1, h2, h3, h4, h5, h6, .listitem, .listitemintable, .tablecontent, .tablecontentintable
+- { font-family: "Bitstream Vera Sans",Arial,Helvetica,Lucida,Geneva,Helmet,sans-serif,"Andale Sans UI","Arial Unicode MS","Lucida Sans Unicode",Tahoma; }
++ { font-family: "Albany AMT",Albany,Arial,"DejaVu Sans","CMU Sans Serif","FreeSans","Nimbus Sans L","Bitstream Vera Sans",Helvetica,Lucida,Geneva,Helmet,"Andale Sans UI","Arial Unicode MS","Lucida Sans Unicode",Tahoma,sans-serif; }
+
+ .code, .codeintable, .example, .exampleintable, .literal, .literalintable, .path, .pathintable
+- { font-family: "Bitstream Vera Sans Mono",Cumberland,"Courier New",Courier,"Lucida Sans Typewriter","Lucida Typewriter",Monaco,Monospaced; margin-top: 1pt; margin-bottom: 1pt;}
++ { font-family: "Cumberland AMT",Cumberland,"Courier New","DejaVu Sans Mono","CMU Typewriter Text","FreeMono","Nimbus Mono L","Bitstream Vera Sans Mono",Courier,"Lucida Sans Typewriter","Lucida Typewriter",Monaco,Monospaced; margin-top: 1pt; margin-bottom: 1pt;}
+
+ .acronym
+ { font-weight: bold;}
+--- helpcontent2/source/auxiliary/el.old/highcontrast2.css 2005-09-05 13:44:40.000000000 +0200
++++ helpcontent2/source/auxiliary/el/highcontrast2.css 2006-04-20 12:15:10.000000000 +0200
+@@ -10,10 +10,10 @@
+
+
+ body, p, h1, h2, h3, h4, h5, h6, .listitem, .listitemintable, .tablecontent, .tablecontentintable
+- { font-family: "Bitstream Vera Sans",Arial,Helvetica,Lucida,Geneva,Helmet,sans-serif,"Andale Sans UI","Arial Unicode MS","Lucida Sans Unicode",Tahoma; }
++ { font-family: "Albany AMT",Albany,Arial,"DejaVu Sans","CMU Sans Serif","FreeSans","Nimbus Sans L","Bitstream Vera Sans",Helvetica,Lucida,Geneva,Helmet,"Andale Sans UI","Arial Unicode MS","Lucida Sans Unicode",Tahoma,sans-serif; }
+
+ .code, .codeintable, .example, .exampleintable, .literal, .literalintable, .path, .pathintable
+- { font-family: "Bitstream Vera Sans Mono",Cumberland,"Courier New",Courier,"Lucida Sans Typewriter","Lucida Typewriter",Monaco,Monospaced; margin-top: 1pt; margin-bottom: 1pt;}
++ { font-family: "Cumberland AMT",Cumberland,"Courier New","DejaVu Sans Mono","CMU Typewriter Text","FreeMono","Nimbus Mono L","Bitstream Vera Sans Mono",Courier,"Lucida Sans Typewriter","Lucida Typewriter",Monaco,Monospaced; margin-top: 1pt; margin-bottom: 1pt;}
+
+ .acronym
+ { font-weight: bold;}
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/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/recently-used.diff b/patches/src680/recently-used.diff
new file mode 100644
index 000000000..9e39089fa
--- /dev/null
+++ b/patches/src680/recently-used.diff
@@ -0,0 +1,71 @@
+Index: shell/source/unix/sysshell/recently_used_file_handler.cxx
+===================================================================
+RCS file: /cvs/gsl/shell/source/unix/sysshell/recently_used_file_handler.cxx,v
+retrieving revision 1.5
+diff -u -p -u -w -r1.5 recently_used_file_handler.cxx
+--- shell/source/unix/sysshell/recently_used_file_handler.cxx 7 Sep 2005 19:56:25 -0000 1.5
++++ shell/source/unix/sysshell/recently_used_file_handler.cxx 16 Jun 2006 10:40:51 -0000
+@@ -49,6 +49,10 @@
+ #include "rtl/string.hxx"
+ #endif
+
++#ifndef _RTL_STRBUF_HXX_
++#include "rtl/strbuf.hxx"
++#endif
++
+ #include "osl/thread.h"
+
+ #ifndef INCLUDED_RECENTLY_USED_FILE_HXX
+@@ -212,10 +216,33 @@ namespace /* private */ {
+ write_xml_end_tag(TAG_RECENT_ITEM, file);
+ }
+
++ static rtl::OString escape_content(const string_t &text)
++ {
++ rtl::OStringBuffer aBuf;
++ for (sal_Int32 i = 0; i < text.length(); i++)
++ {
++# define MAP(a,b) case a: aBuf.append(b); break
++ switch (text[i])
++ {
++ MAP ('&', "&amp;");
++ MAP ('<', "&lt;");
++ MAP ('>', "&gt;");
++ MAP ('\'', "&apos;");
++ MAP ('"', "&quot;");
++ default:
++ aBuf.append(text[i]);
++ break;
++ }
++# undef MAP
++ }
++ return aBuf.makeStringAndClear();
++ }
++
+ void write_xml_tag(const string_t& name, const string_t& value, const recently_used_file& file) const
+ {
+ write_xml_start_tag(name, file);
+- file.write(value.c_str(), value.length());
++ rtl::OString escaped = escape_content (value);
++ file.write(escaped.getStr(), escaped.getLength());
+ write_xml_end_tag(name, file);
+ }
+
+@@ -541,7 +568,7 @@ const rtl::OUString DEFAULT_CONTEXT = rt
+
+ // We need to re-encode file urls because osl_getFileURLFromSystemPath converts
+ // to UTF-8 before encoding non ascii characters, which is not what other apps expect.
+-rtl::OUString translateToExternalUrl(const rtl::OUString& internalUrl)
++static rtl::OUString translateToExternalUrl(const rtl::OUString& internalUrl)
+ {
+ rtl::OUString extUrl;
+
+@@ -572,7 +599,7 @@ extern "C" void add_to_recently_used_fil
+ rtl::OUString externalUrl = translateToExternalUrl(file_url);
+
+ read_recently_used_items(ruf, item_list);
+- recently_used_item_list_add(item_list, (externalUrl.getLength()) ? externalUrl : file_url, mime_type);
++ recently_used_item_list_add(item_list, externalUrl.getLength() ? externalUrl : file_url, mime_type);
+ write_recently_used_items(ruf, item_list);
+ }
+ catch(const char* ex)
diff --git a/patches/src680/sc-datapilot-autoformat.diff b/patches/src680/sc-datapilot-autoformat.diff
index 6b5ca6a64..3e9015292 100644
--- a/patches/src680/sc-datapilot-autoformat.diff
+++ b/patches/src680/sc-datapilot-autoformat.diff
@@ -189,15 +189,22 @@ diff -u -r ../../../sc.bak/source/ui/miscdlgs/makefile.mk sc/source/ui/miscdlgs/
diff -u -r ../../../sc.bak/source/ui/src/popup.src sc/source/ui/src/popup.src
--- ../../../sc.bak/source/ui/src/popup.src 2004-12-22 14:05:07.000000000 +0530
+++ sc/source/ui/src/popup.src 2005-01-11 13:25:54.836894216 +0530
-@@ -262,6 +262,13 @@
+@@ -262,6 +262,20 @@
Text [ x-comment ] = " ";
};
MenuItem
+ {
+ Identifier = SID_PIVOT_AFMT ;
+ HelpId = SID_PIVOT_AFMT ;
-+ Text = "A~ktualisieren" ;
+ Text [ en-US ] = "~AutoFormat..." ;
++ Text [ de ] = "A~utoFormat" ;
++ Text[ es ] = "~Autoformato";
++ Text[ fr ] = "Format ~automatique";
++ Text[ it ] = "Formattazione automatica";
++ Text[ ja ] = "~Autoformat";
++ Text[ pt-BR ] = "~Autoformatar";
++ Text[ zh-CN ] = "自动格式(~A)";
++ Text[ zh-TW ] = "自動格式化(~A)";
+ };
+ MenuItem
{
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-paste-dialog.diff b/patches/src680/sc-paste-dialog.diff
index 669e3b29e..03a6ee021 100644
--- a/patches/src680/sc-paste-dialog.diff
+++ b/patches/src680/sc-paste-dialog.diff
@@ -5,13 +5,14 @@ retrieving revision 1.29
diff -u -r1.29 viewfun5.cxx
--- sc/source/ui/view/viewfun5.cxx 8 Sep 2004 15:56:29 -0000 1.29
+++ sc/source/ui/view/viewfun5.cxx 12 Oct 2004 13:51:30 -0000
-@@ -119,6 +119,10 @@
+@@ -119,6 +119,11 @@
#include "tabvwsh.hxx" // wegen GetViewFrame
#include "compiler.hxx"
+#include "asciiopt.hxx"
+#include "scabstdlg.hxx"
+#include "vcl/msgbox.hxx"
++#include "scresid.hxx"
+
#ifndef _SFXVIEWFRM_HXX //autogen
#include <sfx2/viewfrm.hxx>
@@ -47,7 +48,7 @@ diff -u -r1.29 viewfun5.cxx
+
+ ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
+ AbstractScImportAsciiDlg *pDlg = pFact->CreateScImportAsciiDlg
-+ ( NULL, String::CreateFromAscii("Pasted Data"), &aStrm,
++ ( NULL, String( ScResId( SCSTR_PASTED_DATA ) ), &aStrm,
+ ResId(RID_SCDLG_ASCII) );
+
+ if (pDlg->Execute() == RET_OK) {
@@ -64,3 +65,45 @@ diff -u -r1.29 viewfun5.cxx
InvalidateAttribs();
GetViewData()->UpdateInputHandler();
+Index: sc/inc/sc.hrc
+===================================================================
+RCS file: /cvs/sc/sc/inc/sc.hrc,v
+retrieving revision 1.49
+diff -u -p -u -r1.49 sc.hrc
+--- sc/inc/sc.hrc 8 Sep 2005 17:52:24 -0000 1.49
++++ sc/inc/sc.hrc 29 Mar 2006 14:33:50 -0000
+@@ -1344,6 +1346,7 @@
+ #define SCSTR_FORMULA_AUTOCORRECTION (STR_START + 214)
+
+ #define SCSTR_RENAMEOBJECT (STR_START + 215)
++#define SCSTR_PASTED_DATA (STR_START + 216)
+
+ // Navigator - in der Reihenfolge wie SC_CONTENT_...
+ #define SCSTR_CONTENT_ROOT (STR_START + 250)
+
+Index: sc/source/ui/src/scstring.src
+===================================================================
+RCS file: /cvs/sc/sc/source/ui/src/scstring.src,v
+retrieving revision 1.84
+diff -u -p -u -r1.84 scstring.src
+--- sc/source/ui/src/scstring.src 23 Sep 2005 15:09:41 -0000 1.84
++++ sc/source/ui/src/scstring.src 29 Mar 2006 14:33:51 -0000
+@@ -407,6 +407,18 @@ String SCSTR_RENAMEOBJECT
+ Text [ de ] = "Objekt benennen" ;
+ Text [ en-US ] = "Name object";
+ };
++String SCSTR_PASTED_DATA
++{
++ Text [ en-US ] = "Pasted Data";
++ Text[ de ] = "Eingefügte Daten";
++ Text[ es ] = "Datos pegados";
++ Text[ fr ] = "Données collées";
++ Text[ it ] = "Dati incollati";
++ Text[ ja ] = "貼り付けられたデータ";
++ Text[ pt-BR ] = "Dados Colados";
++ Text[ zh-CN ] = "粘贴的数据";
++ Text[ zh-TW ] = "貼上的資料";
++};
+ String STR_INSERTGRAPHIC
+ {
+ Text [ de ] = "Bild einfügen" ;
diff --git a/patches/src680/sc-r1c1.diff b/patches/src680/sc-r1c1.diff
index e8e8e13e9..0d89491f6 100644
--- a/patches/src680/sc-r1c1.diff
+++ b/patches/src680/sc-r1c1.diff
@@ -3667,7 +3667,7 @@ retrieving revision 1.63.24.1
diff -u -w -p -r1.63 -r1.63.24.1
--- sc/source/ui/src/globstr.src 23 Sep 2005 15:06:42 -0000 1.63
+++ sc/source/ui/src/globstr.src 18 Nov 2005 15:50:47 -0000 1.63.24.1
-@@ -1798,6 +1798,10 @@ Resource RID_GLOBSTR
+@@ -1798,6 +1798,18 @@ Resource RID_GLOBSTR
{
Text [ de ] = "Tabelle wenden" ;
Text [ en-US ] = "Flip sheet" ;
@@ -3675,6 +3675,14 @@ diff -u -w -p -r1.63 -r1.63.24.1
+ String STR_UNDO_TAB_R1C1
+ {
+ Text [ en-US ] = "Toggle the use of R1C1 notation" ;
++ Text[ de ] = "Verwendung der R1C1-Notation umschalten";
++ Text[ es ] = "Alternar el uso de la notación R1C1";
++ Text[ fr ] = "Activer/Désactiver l'usage de la notation R1C1";
++ Text[ it ] = "Alterna l'utilizzo della notazione R1C1";
++ Text[ ja ] = "R1C1表記の使用をトグルする";
++ Text[ pt-BR ] = "Alterna o uso da notação R1C1";
++ Text[ zh-CN ] = "切换使用 R1C1 表示法";
++ Text[ zh-TW ] = "切換使用 R1C1 標記";
};
String STR_CHART_MAINTITLE
{
@@ -3686,7 +3694,7 @@ retrieving revision 1.115.24.2
diff -u -w -p -r1.115 -r1.115.24.2
--- sc/source/ui/src/menue.src 23 Sep 2005 15:07:14 -0000 1.115
+++ sc/source/ui/src/menue.src 25 Nov 2005 04:44:54 -0000 1.115.24.2
-@@ -409,6 +409,14 @@ Menu RID_OBJECTMENU_CELLS
+@@ -409,6 +409,21 @@ Menu RID_OBJECTMENU_CELLS
Text [ de ] = "~Rechts-nach-links" ;
Text [ en-US ] = "R~ight-To-Left" ;
};
@@ -3694,28 +3702,42 @@ diff -u -w -p -r1.115 -r1.115.24.2
+ {
+ Identifier = FID_TAB_USE_R1C1 ;
+ HelpId = FID_TAB_USE_R1C1 ;
-+ Text [ de ] = "R1C1" ;
+ Text [ en-US ] = "Use R1~C1" ;
++ Text[ de ] = "R1~C1 verwenden";
++ Text[ es ] = "Usar R1~C1";
++ Text[ fr ] = "Utiliser R1~C1";
++ Text[ it ] = "Utilizza R1~C1";
++ Text[ ja ] = "R1~C1を使用する";
++ Text[ pt-BR ] = "Usar R1~C1 ";
++ Text[ zh-CN ] = "使用 R1C1(~C)";
++ Text[ zh-TW ] = "使用 R1C1(~C)";
+ Text [ x-comment ] = " ";
+ };
};
};
Text [ x-comment ] = " ";
-@@ -715,6 +723,14 @@ Menu RID_OBJECTMENU_EDIT
- HelpId = FID_TAB_RTL ;
+@@ -716,6 +731,21 @@ Menu RID_OBJECTMENU_EDIT
Text [ de ] = "~Rechts-nach-links" ;
Text [ en-US ] = "R~ight-To-Left" ;
-+ };
+ };
+ MenuItem
+ {
+ Identifier = FID_TAB_USE_R1C1 ;
+ HelpId = FID_TAB_USE_R1C1 ;
-+ Text [ de ] = "R1C1" ;
+ Text [ en-US ] = "Use R1~C1" ;
++ Text[ de ] = "R1~C1 verwenden";
++ Text[ es ] = "Usar R1~C1";
++ Text[ fr ] = "Utiliser R1~C1";
++ Text[ it ] = "Utilizza R1~C1";
++ Text[ ja ] = "R1~C1を使用する";
++ Text[ pt-BR ] = "Usar R1~C1 ";
++ Text[ zh-CN ] = "使用 R1C1(~C)";
++ Text[ zh-TW ] = "使用 R1C1(~C)";
+ Text [ x-comment ] = " ";
- };
++ };
};
};
+ Text [ x-comment ] = " ";
Index: sc/source/ui/src/scfuncs.src
===================================================================
RCS file: /cvs/sc/sc/source/ui/src/scfuncs.src,v
@@ -3724,7 +3746,7 @@ retrieving revision 1.84.22.2
diff -u -w -p -r1.85 -r1.84.22.2
--- sc/source/ui/src/scfuncs.src 21 Oct 2005 12:08:35 -0000 1.85
+++ sc/source/ui/src/scfuncs.src 28 Nov 2005 16:06:41 -0000 1.84.22.2
-@@ -9049,6 +9049,81 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
+@@ -9049,6 +9049,95 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
Text [ x-comment ] = " ";
};
};
@@ -3732,8 +3754,15 @@ diff -u -w -p -r1.85 -r1.84.22.2
+ {
+ String 1 // Description
+ {
-+ Text [ de ] = "Bestimmt den Bezug auf eine Zelle als Text." ;
+ Text [ en-US ] = "Returns the reference to a cell as text." ;
++ Text[ de ] = "Gibt die Referenz auf eine Zelle als Text zurück.";
++ Text[ es ] = "Devuelve la referencia a una celda en formato de texto.";
++ Text[ fr ] = "Retourne la référence à une cellule sous forme de texte.";
++ Text[ it ] = "Restituisce un riferimento a una cella come testo.";
++ Text[ ja ] = "セルへの参照をテキストとして戻します。";
++ Text[ pt-BR ] = "Retorna a referência a uma célula como texto.";
++ Text[ zh-CN ] = "将引用作为文本返回至单元。";
++ Text[ zh-TW ] = "以文字方式傳回儲存格參考。";
+ Text [ x-comment ] = " ";
+ };
+ ExtraData =
@@ -3786,8 +3815,15 @@ diff -u -w -p -r1.85 -r1.84.22.2
+ };
+ String 9 // Description of Parameter 4
+ {
-+ Text [ de ] = " ";
+ Text [ en-US ] = "If TRUE (or 1) or omitted generate A1 style address, otherwise produce R1C1 style address.";
++ Text[ de ] = "Wenn TRUE (oder 1) bzw. ausgelassen, A1-Adresse generieren, anderenfalls R1C1-Adresse erstellen.";
++ Text[ es ] = "Si el valor es TRUE (o 1) o se omite, genera una dirección del estilo A1; de lo contrario, genera una dirección del estilo R1C1.";
++ Text[ fr ] = "Si TRUE (ou 1) ou omis, générer une adresse de style A1. Sinon, produire une adresse de style R1C1.";
++ Text[ it ] = "Se impostato su TRUE (o 1) oppure se omesso genera un indirizzo tipo A1, altrimenti genera un indirizzo di tipo R1C1.";
++ Text[ ja ] = "TRUE (1)またはA1スタイルアドレスが作成されていない場合、R1C1スタイルアドレスが作成されます。";
++ Text[ pt-BR ] = "Se VERDADEIRO (ou 1) ou omitido, gerar endereço em estilo A1; caso contrário produzir endereço em estilo R1C1.";
++ Text[ zh-CN ] = "如果为 TRUE(或 1),忽略生成 A1 样式地址,否则生成 R1C1 样式地址。";
++ Text[ zh-TW ] = "如果是傳回 TRUE (或 1) 或是省略就會產生 A1 格式位址,傳回其他值則會產生 R1C1 格式位址。";
+ Text [ x-comment ] = " ";
+ };
+ String 10 // Name of Parameter 5
@@ -3806,7 +3842,7 @@ diff -u -w -p -r1.85 -r1.84.22.2
// -=*# Resource for function BEREICHE #*=-
Resource SC_OPCODE_AREAS
{
-@@ -9511,6 +9586,46 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
+@@ -9511,6 +9586,53 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
{
Text [ de ] = "Die Zelle, deren Inhalt ausgewertet werden soll als Bezug in Textform (z.B. \"A1\")." ;
Text [ en-US ] = "The cell whose contents are to be evaluated is to be referenced in text form (e.g. \"A1\")." ;
@@ -3848,8 +3884,15 @@ diff -u -w -p -r1.85 -r1.84.22.2
+ };
+ String 5 // Description of Parameter 2
+ {
-+ Text [ de ] = "Verwendete Adressierungsart. TRUE für A1, FALSE für R1C1. Der Default ist A1." ;
+ Text [ en-US ] = "What address format to expect. TRUE for A1, FALSE for R1C1. Defaults to A1." ;
++ Text[ de ] = "Zu erwartendes Adressformat. TRUE für A1, FALSE für R1C1. Standardmäßig wird A1 verwendet.";
++ Text[ es ] = "Formato de dirección que se debe esperar. TRUE para A1, FALSE para R1C1. El valor por defecto es A1.";
++ Text[ fr ] = "Quel format d'adresse attendre. TRUE pour A1, FALSE pour R1C1. La valeur par défaut est A1.";
++ Text[ it ] = "Formato di indirizzo previsto. TRUE per A1, FALSE per R1C1. Il valore predefinito è A1.";
++ Text[ ja ] = "作成されるアドレス形式 TRUEの場合はA1、FALSEの場合はR1C1が作成されます。 デフォルトでは、A1になります。";
++ Text[ pt-BR ] = "Formato do endereço esperado. VERDADEIRO para A1, FALSO para R1C1. Usa A1 por padrão.";
++ Text[ zh-CN ] = "期望何种地址格式。TRUE 代表 A1,FALSE 代表 R1C1。默认值为 A1。";
++ Text[ zh-TW ] = "預期會產生的位址格式。TRUE 會產生 A1 格式,FALSE 會產生 R1C1 格式。預設是產生 A1 格式。";
Text [ x-comment ] = " ";
};
};
@@ -4043,13 +4086,21 @@ retrieving revision 1.14
diff -u -w -p -r1.14 CalcCommands.xcu
--- officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu 15 Mar 2005 12:42:05 -0000 1.14
+++ officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu 28 Nov 2005 19:35:06 -0000
-@@ -1418,6 +1418,11 @@
+@@ -1418,6 +1418,19 @@
<value xml:lang="en-US">R~ight-To-Left</value>
</prop>
</node>
+ <node oor:name=".uno:SheetUseR1C1" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Use R1~C1</value>
++ <value xml:lang="de">R1~C1 verwenden</value>
++ <value xml:lang="es">Usar R1~C1</value>
++ <value xml:lang="fr">Utiliser R1~C1</value>
++ <value xml:lang="it">Utilizza R1~C1</value>
++ <value xml:lang="ja">R1~C1を使用する</value>
++ <value xml:lang="pt-BR">Usar R1~C1</value>
++ <value xml:lang="zh-CN">使用 R1C1(~C)</value>
++ <value xml:lang="zh-TW">使用 R1C1(~C)</value>
+ </prop>
+ </node>
<node oor:name=".uno:SetAnchorToPage" oor:op="replace">
diff --git a/patches/src680/sc-source-ui-unobj-funcuno-cxx.diff b/patches/src680/sc-source-ui-unobj-funcuno-cxx.diff
index f5d56e482..5499d402a 100644
--- a/patches/src680/sc-source-ui-unobj-funcuno-cxx.diff
+++ b/patches/src680/sc-source-ui-unobj-funcuno-cxx.diff
@@ -5,7 +5,7 @@ retrieving revision 1.13
diff -u -p -r1.13 funcuno.cxx
--- sc/source/ui/unoobj/funcuno.cxx 8 Sep 2005 22:47:16 -0000 1.13
+++ sc/source/ui/unoobj/funcuno.cxx 24 Jan 2006 12:05:37 -0000
-@@ -376,6 +376,130 @@ void lcl_AddRef( ScTokenArray& rArray, l
+@@ -376,6 +376,129 @@ void lcl_AddRef( ScTokenArray& rArray, l
aRef.Ref2.nRow = (SCROW) (nStartRow + nRowCount - 1);
rArray.AddDoubleReference(aRef);
}
@@ -16,7 +16,7 @@ diff -u -p -r1.13 funcuno.cxx
+ ScDocument* mpDoc;
+public:
+ SimpleVisitor( ScDocument* pDoc ) : mpDoc( pDoc ), mbArgError( false ) {}
-+ // could possibly just get away with JUST the following overloads
++ // could possibly just get away with JUST the following overload
+ // 1) virtual void visitElem( long& nCol, long& nRow, const double& elem )
+ // 2) virtual void visitElem( long& nCol, long& nRow, const rtl::OUString& elem )
+ // 3) virtual void visitElem( long& nCol, long& nRow, const uno::Any& elem )
@@ -37,8 +37,9 @@ diff -u -p -r1.13 funcuno.cxx
+ }
+ virtual void visitElem( long& nCol, long& nRow, const rtl::OUString& elem )
+ {
-+ mpDoc->PutCell( (SCCOL) nCol, (SCROW) nRow, 0,
-+ new ScStringCell(elem) );
++ if ( elem.getLength() )
++ mpDoc->PutCell( (SCCOL) nCol, (SCROW) nRow, 0,
++ new ScStringCell( elem ) );
+ }
+ virtual void visitElem( long& nCol, long& nRow, const uno::Any& rElement )
+ {
@@ -59,15 +60,13 @@ diff -u -p -r1.13 funcuno.cxx
+ // variable as byte, short or long if it's an integer number.
+ double fVal;
+ rElement >>= fVal;
-+ mpDoc->SetValue( (SCCOL) nCol, (SCROW) nRow, 0, fVal );
++ visitElem( nCol, nRow, fVal );
+ }
+ else if ( eElemClass == uno::TypeClass_STRING )
+ {
+ rtl::OUString aUStr;
+ rElement >>= aUStr;
-+ if ( aUStr.getLength() )
-+ mpDoc->PutCell( (SCCOL) nCol, (SCROW) nRow, 0,
-+ new ScStringCell( aUStr ) );
++ visitElem( nCol, nRow, aUStr );
+ }
+ else
+ mbArgError = true;
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-standard-filter-options-i18n.diff b/patches/src680/sc-standard-filter-options-i18n.diff
new file mode 100644
index 000000000..cdae64b20
--- /dev/null
+++ b/patches/src680/sc-standard-filter-options-i18n.diff
@@ -0,0 +1,131 @@
+--- sc/source/ui/src/localize.sdf.orig 2006-02-06 20:07:43.000000000 +0100
++++ sc/source/ui/src/localize.sdf 2006-06-14 18:09:53.000000000 +0200
+@@ -9149,6 +9149,42 @@
+ 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 de Enthält 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 fr Contient 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 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 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 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 es No contiene 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 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 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 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 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 es Empieza por 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 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 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 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 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 es Finaliza por 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 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 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 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 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
+@@ -9683,6 +9719,42 @@
+ 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 de Enthält 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 fr Contient 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 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 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 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 es No contiene 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 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 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 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 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 es Empieza por 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 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 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 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 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 es Finaliza por 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 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 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 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 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
+@@ -10217,6 +10289,42 @@
+ 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 de Enthält 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 fr Contient 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 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 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 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 es No contiene 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 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 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 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 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 es Empieza por 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 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 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 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 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 es Finaliza por 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 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 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 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 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/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/sdk-filenames-with-dollar.diff b/patches/src680/sdk-filenames-with-dollar.diff
new file mode 100644
index 000000000..5a6d9ea50
--- /dev/null
+++ b/patches/src680/sdk-filenames-with-dollar.diff
@@ -0,0 +1,15 @@
+--- solenv/bin/modules/installer/worker.pm.old 2006-02-06 11:52:50.000000000 +0100
++++ solenv/bin/modules/installer/worker.pm 2006-04-25 19:57:02.000000000 +0200
+@@ -711,6 +711,12 @@
+ my $destination = $onefile->{'destination'};
+ my $sourcepath = $onefile->{'sourcepath'};
+
++ # This is necessary to install SDK that includes files with $ in its name
++ # Otherwise, the following shell commands does not work and the file list
++ # is not correct
++ $destination =~ s/\$\$/\$/;
++ $sourcepath =~ s/\$\$/\$/;
++
+ # printf "mv $sourcepath $destdir$destination\n";
+ `cp -af '$sourcepath' '$destdir$destination'`;
+ `chmod $unixrights '$destdir$destination'`;
diff --git a/patches/src680/sensible-browser.diff b/patches/src680/sensible-browser.diff
index 7aa33f7db..2e6cc957c 100644
--- a/patches/src680/sensible-browser.diff
+++ b/patches/src680/sensible-browser.diff
@@ -31,10 +31,10 @@ diff -u -u -r1.2 kde-open-url.sh
# special handling for mailto: uris
if echo $1 | grep '^mailto:' > /dev/null; then
- kmailservice $1 &
-+ sensible-ooomua $1
++ sensible-ooomua $1 &
else
- kfmclient openURL $1 &
-+ sensible-browser $1
++ sensible-browser $1 &
fi
exit 0
diff --git a/patches/src680/speed-local-link-except.diff b/patches/src680/speed-local-link-except.diff
new file mode 100644
index 000000000..0aaabfc0c
--- /dev/null
+++ b/patches/src680/speed-local-link-except.diff
@@ -0,0 +1,223 @@
+Index: codemaker/source/cppumaker/cppumaker.cxx
+===================================================================
+RCS file: /cvs/udk/codemaker/source/cppumaker/cppumaker.cxx,v
+retrieving revision 1.8
+diff -u -p -u -r1.8 cppumaker.cxx
+--- codemaker/source/cppumaker/cppumaker.cxx 8 Sep 2005 02:11:34 -0000 1.8
++++ codemaker/source/cppumaker/cppumaker.cxx 28 Mar 2006 08:54:32 -0000
+@@ -245,6 +249,36 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
+ exit(99);
+ }
+
++ if (!aIncludes.empty() && options.isValid("-O"))
++ {
++ OString outPath = options.getOption("-O");
++ outPath += "/catch.hxx";
++ FILE *excepts = fopen (outPath, "w+");
++ fprintf (excepts, "// This file is autogenerated by cppumaker\n");
++ fprintf (excepts, "// include exception headers\n");
++
++ ::std::list<rtl::OString>::const_iterator iter;
++
++ for (iter = aIncludes.begin(); iter != aIncludes.end(); iter++)
++ {
++ rtl::OString aStr = *iter;
++ fprintf (excepts, "#include <%s.hpp>\n", (const sal_Char *) aStr);
++ }
++
++ fprintf (excepts, "// dummy method\n");
++ fprintf (excepts, "extern void force_emit ()\n");
++ fprintf (excepts, "{\n");
++ for (iter = aExceptionNames.begin(); iter != aExceptionNames.end(); iter++) {
++ fprintf (excepts, " try {\n");
++ fprintf (excepts, " force_emit ();\n");
++ fprintf (excepts, " }\n");
++ rtl::OString aStr = *iter;
++ fprintf (excepts, "catch (const %s &r) {} \n", (const sal_Char *)aStr);
++ }
++ fprintf (excepts, "}\n\n");
++ fclose (excepts);
++ }
++
+ return 0;
+ }
+
+
+Index: codemaker/source/cppumaker/cpputype.cxx
+===================================================================
+RCS file: /cvs/udk/codemaker/source/cppumaker/cpputype.cxx,v
+retrieving revision 1.37
+diff -u -p -u -r1.37 cpputype.cxx
+--- codemaker/source/cppumaker/cpputype.cxx 26 Jan 2006 17:42:38 -0000 1.37
++++ codemaker/source/cppumaker/cpputype.cxx 28 Mar 2006 08:54:34 -0000
+@@ -56,6 +56,9 @@
+
+ using namespace rtl;
+
++::std::list<rtl::OString> aExceptionNames;
++::std::list<rtl::OString> aIncludes;
++
+ namespace {
+
+ rtl::OString translateSimpleUnoType(rtl::OString const & unoType) {
+@@ -3265,6 +3294,16 @@ sal_Bool ExceptionType::dumpHFile(
+ return sal_True;
+ }
+
++bool
++ExceptionType::dumpFiles(CppuOptions * options, rtl::OString const & outPath)
++{
++ OString aTypeName = scopedName (OString(), m_typeName);
++ aExceptionNames.insert(aExceptionNames.end(), aTypeName);
++
++ aIncludes.insert(aIncludes.end(), m_typeName);
++ return CppuType::dumpFiles (options, outPath);
++}
++
+ sal_Bool ExceptionType::dumpDeclaration(FileStream& o)
+ throw( CannotDumpException )
+ {
+
+
+Index: codemaker/source/cppumaker/cpputype.hxx
+===================================================================
+RCS file: /cvs/udk/codemaker/source/cppumaker/cpputype.hxx,v
+retrieving revision 1.9
+diff -u -p -u -r1.9 cpputype.hxx
+--- codemaker/source/cppumaker/cpputype.hxx 10 Jan 2006 15:46:47 -0000 1.9
++++ codemaker/source/cppumaker/cpputype.hxx 28 Mar 2006 08:54:34 -0000
+@@ -61,6 +61,11 @@ enum CppuTypeDecl
+ class CppuOptions;
+ class FileStream;
+
++#include <list>
++extern ::std::list<rtl::OString> aExceptionNames;
++extern ::std::list<rtl::OString> aIncludes;
++extern bool do_internal;
++
+ class CppuType
+ {
+ public:
+@@ -300,6 +305,7 @@ public:
+
+ virtual ~ExceptionType();
+
++ bool dumpFiles(CppuOptions * options, rtl::OString const & outPath);
+ sal_Bool dumpDeclaration(FileStream& o) throw( CannotDumpException );
+ sal_Bool dumpHFile(FileStream& o, codemaker::cppumaker::Includes & includes) throw( CannotDumpException );
+ sal_Bool dumpHxxFile(FileStream& o, codemaker::cppumaker::Includes & includes) throw( CannotDumpException );
+
+
+--- /dev/null
++++ offuh/except/except.cxx
+@@ -0,0 +1,25 @@
++#include <sal/config.h>
++#include <cppu/macros.hxx>
++
++// We don't want to hide all this shared goodness:
++#undef CPPU_GCC_DLLPUBLIC_EXPORT
++#define CPPU_GCC_DLLPUBLIC_EXPORT
++#undef CPPU_GCC_DLLPRIVATE
++#define CPPU_GCC_DLLPRIVATE
++
++#define CPPU_INTERNAL_IMPL 1
++
++// Evilness: sal/config.h includes stdlib.h
++// that has some workarounds for 'major' / 'minor'
++// issues, at least on Linux. These then cause problems
++// with chained constructors: FooClass : major(0) tec.
++
++// obscure CORBA compat interfaces
++#undef major
++#undef minor
++
++// com/sun/star/drawing/CaptionEscapeDirection.idl: keyword genius
++#define auto not_auto
++
++#include <catch.hxx>
++
+
+
+--- /dev/null 2006-03-11 13:25:00.000000000 +0000
++++ offuh/except/makefile.mk 2006-03-17 11:44:41.000000000 +0000
+@@ -0,0 +1,23 @@
++# --- Settings -----------------------------------------------------
++
++PRJ=..
++
++PRJNAME=offuh
++TARGET=unotypes
++ENABLE_EXCEPTIONS=TRUE
++
++.INCLUDE : settings.mk
++
++LIB1TARGET= $(SLB)$/$(TARGET).lib
++LIB1OBJFILES= $(SLO)$/except.obj
++
++SHL1TARGET=exlink$(UPD)$(DLLPOSTFIX)
++SHL1LIBS=$(LIB1TARGET)
++SHL1STDLIBS= $(SALLIB) $(SALHELPERLIB) $(REGLIB) $(CPPULIB)
++
++# --- Targets -------------------------------------------------------
++
++.INCLUDE : target.mk
++
++$(LIB1OBJFILES) : $(MISC)$/offuh.don
++
+
+
+Index: offuh/prj/build.lst
+===================================================================
+RCS file: /cvs/api/offuh/prj/build.lst,v
+retrieving revision 1.4
+diff -u -p -u -r1.4 build.lst
+--- offuh/prj/build.lst 18 Sep 2002 09:14:33 -0000 1.4
++++ offuh/prj/build.lst 3 Apr 2006 09:56:29 -0000
+@@ -2,3 +2,4 @@ ou offuh :: offapi codemaker NULL
+ ou offuh usr1 - all ou_mkout NULL
+ ou offuh\prj get - all ou_prj NULL
+ ou offuh\source nmake - all ou_source NULL
++ou offuh\except nmake - all ou_except ou_source NULL
+
+
+Index: offuh/prj/d.lst
+===================================================================
+RCS file: /cvs/api/offuh/prj/d.lst,v
+retrieving revision 1.59
+diff -u -p -u -r1.59 d.lst
+--- offuh/prj/d.lst 9 Jun 2005 14:54:16 -0000 1.59
++++ offuh/prj/d.lst 3 Apr 2006 09:56:29 -0000
+@@ -319,6 +326,9 @@ mkdir: %_DEST%\inc%_EXT%\com\sun\star\xm
+
+ ..\%__SRC%\inc\com\sun\star\script\browse\*.hpp %_DEST%\inc%_EXT%\com\sun\star\script\browse\*.hpp
+ ..\%__SRC%\inc\com\sun\star\script\browse\*.hdl %_DEST%\inc%_EXT%\com\sun\star\script\browse\*.hdl
++
++..\%__SRC%\lib\*.so %_DEST%\lib%_EXT%\*.so
++
+ ..\%__SRC%\inc\com\sun\star\script\provider\*.hpp %_DEST%\inc%_EXT%\com\sun\star\script\provider\*.hpp
+ ..\%__SRC%\inc\com\sun\star\script\provider\*.hdl %_DEST%\inc%_EXT%\com\sun\star\script\provider\*.hdl
+
+
+Index: scp2/source/ooo/file_library_ooo.scp
+===================================================================
+RCS file: /cvs/installation/scp2/source/ooo/file_library_ooo.scp,v
+retrieving revision 1.184.2.2
+diff -u -p -u -r1.184.2.2 file_library_ooo.scp
+--- scp2/source/ooo/file_library_ooo.scp 17 Feb 2006 16:52:02 -0000 1.184.2.2
++++ scp2/source/ooo/file_library_ooo.scp 3 Apr 2006 10:13:58 -0000
+@@ -468,6 +490,15 @@ STD_UNO_LIB_FILE( gid_File_Lib_Ctl , ctl
+
+ STD_LIB_FILE_PATCH( gid_File_Lib_Cui, cui)
+
++#ifdef LINUX
++File gid_File_Lib_ExLib
++ TXT_FILE_BODY;
++ Styles = (PACKED,PATCH);
++ Dir = gid_Dir_Program;
++ Name = LIBNAME(exlink);
++End
++#endif
++
+ #ifndef SYSTEM_CURL
+
+ File gid_File_Lib_Curl
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-ooqstart-options.diff b/patches/src680/speed-ooqstart-options.diff
new file mode 100644
index 000000000..2b3c32089
--- /dev/null
+++ b/patches/src680/speed-ooqstart-options.diff
@@ -0,0 +1,18 @@
+--- desktop/unx/source/start.c 2006-04-10 17:33:14.000000000 +0000
++++ desktop/unx/source/start.c 2006-04-12 13:29:35.000000000 +0000
+@@ -415,10 +415,13 @@ setup_args (int argc, char **argv, const
+
+ else if (arg_check (argv[i], "nologo") ||
+ arg_check (argv[i], "headless") ||
+- arg_check (argv[i], "invisible"))
++ arg_check (argv[i], "invisible") ||
++ arg_check (argv[i], "help") || arg_check (argv[i], "h") || arg_check (argv[i], "?") ||
++ arg_check (argv[i], "minimized"))
+ *inhibit_splash = TRUE;
+
+- else if (arg_check (argv[i], "-pt"))
++ else if (arg_check (argv[i], "pt") ||
++ arg_check (argv[i], "display"))
+ next_arg_not_filename = TRUE;
+ }
+
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/svx-vbaimport-basic-hang.diff b/patches/src680/svx-vbaimport-basic-hang.diff
new file mode 100644
index 000000000..3ec3995ca
--- /dev/null
+++ b/patches/src680/svx-vbaimport-basic-hang.diff
@@ -0,0 +1,25 @@
+Index: svx/source/msfilter/svxmsbas.cxx
+===================================================================
+RCS file: /cvs/graphics/svx/source/msfilter/svxmsbas.cxx,v
+retrieving revision 1.15
+diff -u -p -r1.15 svxmsbas.cxx
+--- svx/source/msfilter/svxmsbas.cxx 3 Feb 2006 18:30:38 -0000 1.15
++++ svx/source/msfilter/svxmsbas.cxx 29 Mar 2006 14:34:21 -0000
+@@ -375,10 +379,16 @@ BOOL SvxImportMSVBasic::ImportCode_Impl(
+ const char cLineEnd = bMac ? '\x0D' : '\x0A';
+ const String sAttribute(String::CreateFromAscii(
+ bAsComment ? "Rem Attribute" : "Attribute"));
+- while (STRING_NOTFOUND != (nBegin = pStr->Search(sAttribute)))
++ nBegin = 0;
++ while (STRING_NOTFOUND != (nBegin = pStr->Search(sAttribute, nBegin)))
+ {
+ if ((nBegin) && pStr->GetChar(nBegin-1) != cLineEnd)
++ {
++ // Need to skip instances of Attribute
++ // that are NOT Attribute statements
++ nBegin += sAttribute.Len();
+ continue;
++ }
+ xub_StrLen nEnd = pStr->Search(cLineEnd ,nBegin);
+ // DR #i26521# catch STRING_NOTFOUND, will loop endless otherwise
+ if( nEnd == STRING_NOTFOUND )
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/tools-smb-url.diff b/patches/src680/tools-smb-url.diff
new file mode 100644
index 000000000..2b948810d
--- /dev/null
+++ b/patches/src680/tools-smb-url.diff
@@ -0,0 +1,60 @@
+diff -rup tools.orig/inc/urlobj.hxx tools/inc/urlobj.hxx
+--- tools.orig/inc/urlobj.hxx 2006-05-18 09:47:10.000000000 +0200
++++ tools/inc/urlobj.hxx 2006-05-18 09:47:18.000000000 +0200
+@@ -105,6 +105,7 @@ namespace com { namespace sun { namespac
+ #define INET_DB_SCHEME "db:"
+ #define INET_BUGID_SCHEME "bugid:"
+ #define INET_TELNET_SCHEME "telnet://"
++#define INET_SAMBA_SCHEME "smb://"
+
+ #define URL_PREFIX_PRIV_SOFFICE "private:"
+ enum
+@@ -162,8 +163,9 @@ enum INetProtocol
+ INET_PROT_TELNET = 28,
+ INET_PROT_VND_SUN_STAR_EXPAND = 29,
+ INET_PROT_VND_SUN_STAR_TDOC = 30,
+- INET_PROT_GENERIC = 31,
+- INET_PROT_END = 32
++ INET_PROT_SAMBA = 31,
++ INET_PROT_GENERIC = 32,
++ INET_PROT_END = 33
+ };
+
+ //============================================================================
+diff -rup tools.orig/source/fsys/urlobj.cxx tools/source/fsys/urlobj.cxx
+--- tools.orig/source/fsys/urlobj.cxx 2006-05-18 09:47:10.000000000 +0200
++++ tools/source/fsys/urlobj.cxx 2006-05-18 09:47:18.000000000 +0200
+@@ -288,6 +288,8 @@ using namespace com::sun;
+ vnd-sun-star-tdoc-url = "VND.SUN.STAR.TDOC:/" segment *("/" segment)
+ segment = *pchar
+
++ ; private (http://ubiqx.org/cifs/Appendix-D.html)
++ samba-url = smb://[[[authdomain;]user@]host[:port][/share[/path][/name]]][?context]
+
+ ; private
+ unknown-url = scheme ":" 1*uric
+@@ -452,6 +454,8 @@ static INetURLObject::SchemeInfo const a
+ false, false, false, false, false },
+ { "vnd.sun.star.tdoc", "vnd.sun.star.tdoc:", 0, false, false, false,
+ false, false, false, true, false },
++ { "smb", "smb://", 139, true, true, false, true, true, true, true,
++ false },
+ { "", "", 0, false, false, false, false, false, false, false, false } };
+
+ // static
+@@ -2086,6 +2090,7 @@ INetURLObject::getPrefix(sal_Unicode con
+ INET_PROT_PRIV_SOFFICE, PrefixInfo::INTERNAL },
+ { "slot:", "staroffice.slot:", INET_PROT_SLOT,
+ PrefixInfo::INTERNAL },
++ { "smb:", 0, INET_PROT_SAMBA, PrefixInfo::OFFICIAL },
+ { "staroffice.component:", ".component:", INET_PROT_COMPONENT,
+ PrefixInfo::EXTERNAL },
+ { "staroffice.db:", "db:", INET_PROT_DB, PrefixInfo::EXTERNAL },
+@@ -2472,6 +2477,7 @@ bool INetURLObject::parsePath(INetProtoc
+ return false;
+
+ case INET_PROT_FTP:
++ case INET_PROT_SAMBA:
+ case INET_PROT_IMAP:
+ if (pPos < pEnd && *pPos != '/')
+ return false;
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-glyphs-cjk-embolden.diff b/patches/src680/vcl-glyphs-cjk-embolden.diff
new file mode 100644
index 000000000..692b8f6e1
--- /dev/null
+++ b/patches/src680/vcl-glyphs-cjk-embolden.diff
@@ -0,0 +1,170 @@
+--- vcl.orig/source/glyphs/makefile.mk 2005-09-09 13:15:13.000000000 +0100
++++ vcl/source/glyphs/makefile.mk 2006-06-28 10:13:45.000000000 +0100
+@@ -48,6 +48,10 @@ TARGET=glyphs
+ CFLAGS+=-DSYSTEM_FREETYPE $(FREETYPE_CFLAGS)
+ .ENDIF
+
++.IF "$(USE_FT_EMBOLDEN)" == "YES"
++CFLAGS+=-DUSE_FT_EMBOLDEN
++.ENDIF
++
+ # --- Files --------------------------------------------------------
+
+ .IF "$(USE_BUILTIN_RASTERIZER)" != ""
+--- vcl.orig/source/glyphs/gcach_ftyp.cxx 2006-06-28 09:40:26.000000000 +0100
++++ vcl/source/glyphs/gcach_ftyp.cxx 2006-06-28 10:16:36.000000000 +0100
+@@ -60,6 +60,8 @@
+ #include FT_TRUETYPE_TABLES_H
+ #include FT_TRUETYPE_TAGS_H
+ #include FT_TRUETYPE_IDS_H
++#include FT_SYNTHESIS_H
++
+
+ #ifndef INCLUDED_RTL_INSTANCE_HXX
+ #include <rtl/instance.hxx>
+@@ -488,8 +490,9 @@ FreetypeManager::FreetypeManager()
+ pEnv = ::getenv( "SAL_AUTOHINTING_PRIORITY" );
+ if( pEnv )
+ nPrioAutoHint = pEnv[0] - '0';
+-
++#ifndef USE_FT_EMBOLDEN
+ InitGammaTable();
++#endif
+ }
+
+ // -----------------------------------------------------------------------
+@@ -818,6 +821,7 @@ FreetypeServerFont::FreetypeServerFont(
+ static const int TT_CODEPAGE_RANGE_1361 = (1L << 21); // Korean Johab
+ static const int TT_CODEPAGE_RANGES1_CJKT = 0x3F0000; // all of the above
+ const TT_OS2* pOs2 = (const TT_OS2*)FT_Get_Sfnt_Table( maFaceFT, ft_sfnt_os2 );
++#ifndef USE_FT_EMBOLDEN
+ if ((pOs2) && (pOs2->ulCodePageRange1 & TT_CODEPAGE_RANGES1_CJKT )
+ && rFSD.mnHeight < 20)
+ mbUseGamma = true;
+@@ -826,7 +830,12 @@ FreetypeServerFont::FreetypeServerFont(
+
+ if (mbUseGamma)
+ mnLoadFlags |= FT_LOAD_FORCE_AUTOHINT;
+-
++#else
++// ----------------------------------------------------------------------------------
++ if ((pOs2) && (pOs2->ulCodePageRange1 & TT_CODEPAGE_RANGES1_CJKT ))
++ mnLoadFlags |= FT_LOAD_FORCE_AUTOHINT;
++#endif
++
+ if( (mnSin != 0) && (mnCos != 0) ) // hinting for 0/90/180/270 degrees only
+ mnLoadFlags |= FT_LOAD_NO_HINTING;
+ mnLoadFlags |= FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH; //#88334#
+@@ -1324,7 +1333,18 @@ bool FreetypeServerFont::GetGlyphBitmap1
+ return false;
+
+ FT_Glyph pGlyphFT;
++#ifndef USE_FT_EMBOLDEN
+ rc = FT_Get_Glyph( maFaceFT->glyph, &pGlyphFT );
++#else
++ if( mbArtBold )
++ {
++ FT_GlyphSlot slot = maFaceFT->glyph;
++ FT_GlyphSlot_Embolden( slot );
++ rc = FT_Get_Glyph( slot, &pGlyphFT );
++ }
++ else
++ rc = FT_Get_Glyph( maFaceFT->glyph, &pGlyphFT );
++#endif
+ if( rc != FT_Err_Ok )
+ return false;
+
+@@ -1363,6 +1383,7 @@ bool FreetypeServerFont::GetGlyphBitmap1
+ const FT_Bitmap& rBitmapFT = rBmpGlyphFT->bitmap;
+ rRawBitmap.mnHeight = rBitmapFT.rows;
+ rRawBitmap.mnBitCount = 1;
++#ifndef USE_FT_EMBOLDEN
+ if( mbArtBold )
+ {
+ rRawBitmap.mnWidth = rBitmapFT.width + 1;
+@@ -1371,9 +1392,12 @@ bool FreetypeServerFont::GetGlyphBitmap1
+ }
+ else
+ {
++#endif
+ rRawBitmap.mnWidth = rBitmapFT.width;
+ rRawBitmap.mnScanlineSize = rBitmapFT.pitch;
++#ifndef USE_FT_EMBOLDEN
+ }
++#endif
+
+ const ULONG nNeededSize = rRawBitmap.mnScanlineSize * rRawBitmap.mnHeight;
+
+@@ -1384,9 +1408,12 @@ bool FreetypeServerFont::GetGlyphBitmap1
+ rRawBitmap.mpBits = new unsigned char[ rRawBitmap.mnAllocated ];
+ }
+
++#ifndef USE_FT_EMBOLDEN
+ if( !mbArtBold )
+ {
++#endif
+ memcpy( rRawBitmap.mpBits, rBitmapFT.buffer, nNeededSize );
++#ifndef USE_FT_EMBOLDEN
+ }
+ else
+ {
+@@ -1413,6 +1440,7 @@ bool FreetypeServerFont::GetGlyphBitmap1
+ p += rRawBitmap.mnScanlineSize;
+ }
+ }
++#endif
+
+ FT_Done_Glyph( pGlyphFT );
+
+@@ -1476,7 +1504,21 @@ bool FreetypeServerFont::GetGlyphBitmap8
+ return false;
+
+ FT_Glyph pGlyphFT;
++#ifndef USE_FT_EMBOLDEN
+ rc = FT_Get_Glyph( maFaceFT->glyph, &pGlyphFT );
++#else
++
++ //if mbArtBold true, using freetype API FT_GlyphSlot_Embolden embolden font to generate fake bold font.
++ //but, this method still have to be improve for big cjk font. but I think this should be improve by freetype
++ if( mbArtBold )
++ {
++ FT_GlyphSlot slot = maFaceFT->glyph;
++ FT_GlyphSlot_Embolden( slot );
++ rc = FT_Get_Glyph( slot, &pGlyphFT );
++ }
++ else
++ rc = FT_Get_Glyph( maFaceFT->glyph, &pGlyphFT );
++#endif
+ if( rc != FT_Err_Ok )
+ return false;
+
+@@ -1513,11 +1555,13 @@ bool FreetypeServerFont::GetGlyphBitmap8
+ rRawBitmap.mnWidth = rBitmapFT.width;
+ rRawBitmap.mnBitCount = 8;
+ rRawBitmap.mnScanlineSize = bEmbedded ? rBitmapFT.width : rBitmapFT.pitch;
++#ifndef USE_FT_EMBOLDEN
+ if( mbArtBold )
+ {
+ ++rRawBitmap.mnWidth;
+ ++rRawBitmap.mnScanlineSize;
+ }
++#endif
+ rRawBitmap.mnScanlineSize = (rRawBitmap.mnScanlineSize + 3) & -4;
+
+ const ULONG nNeededSize = rRawBitmap.mnScanlineSize * rRawBitmap.mnHeight;
+@@ -1556,6 +1600,7 @@ bool FreetypeServerFont::GetGlyphBitmap8
+ }
+ }
+
++#ifndef USE_FT_EMBOLDEN
+ if( mbArtBold )
+ {
+ // overlay with glyph image shifted by one left pixel
+@@ -1585,6 +1630,7 @@ bool FreetypeServerFont::GetGlyphBitmap8
+ p += rRawBitmap.mnScanlineSize;
+ }
+ }
++#endif
+
+ FT_Done_Glyph( pGlyphFT );
+
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/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-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/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/vbachartobjects.cxx b/scratch/sc-vba/vbachartobjects.cxx
index 0f7911a12..785815bdb 100644
--- a/scratch/sc-vba/vbachartobjects.cxx
+++ b/scratch/sc-vba/vbachartobjects.cxx
@@ -19,7 +19,7 @@ public:
virtual uno::Any SAL_CALL nextElement( ) throw (container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
{
uno::Reference< table::XTableChart > xTableChart( m_xEnumeration->nextElement(), uno::UNO_QUERY_THROW );
- return makeAny( uno::Reference< vba::XChartObject > ( new ScVbaChartObject( m_xContext, xTableChart ) ) );
+ return uno::makeAny( uno::Reference< vba::XChartObject > ( new ScVbaChartObject( m_xContext, xTableChart ) ) );
}
};
@@ -47,6 +47,6 @@ uno::Any
ScVbaChartObjects::createCollectionObject( const css::uno::Any& aSource )
{
uno::Reference< table::XTableChart > xTableChart( aSource, uno::UNO_QUERY_THROW );
- return makeAny( uno::Reference< vba::XChartObject > ( new ScVbaChartObject( m_xContext, xTableChart ) ) );
+ return uno::makeAny( uno::Reference< vba::XChartObject > ( new ScVbaChartObject( m_xContext, xTableChart ) ) );
}
diff --git a/scratch/sc-vba/vbacollectionimpl.cxx b/scratch/sc-vba/vbacollectionimpl.cxx
index cfae261f0..6ec611511 100644
--- a/scratch/sc-vba/vbacollectionimpl.cxx
+++ b/scratch/sc-vba/vbacollectionimpl.cxx
@@ -89,13 +89,13 @@ uno::Any SAL_CALL ScVbaCollectionBaseImpl::Item( const uno::Any& aIndex ) throw
return getItemByStringIndex( aStringSheet );
}
-/*
- // XEnumerationAccess
-uno::Reference< container::XEnumeration > SAL_CALL ScVbaCollectionBaseImpl::createEnumeration() throw (uno::RuntimeException)
+::rtl::OUString SAL_CALL
+ScVbaCollectionBaseImpl::getName( ) throw (css::uno::RuntimeException)
{
- return uno::Reference< container::XEnumeration > ();
+ const static rtl::OUString sName( RTL_CONSTASCII_USTRINGPARAM("Item") );
+ return sName;
}
-*/
+
// XElementAccess
::sal_Bool SAL_CALL ScVbaCollectionBaseImpl::hasElements() throw (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/vbafont.hxx b/scratch/sc-vba/vbafont.hxx
index 2444908b4..b3698417e 100644
--- a/scratch/sc-vba/vbafont.hxx
+++ b/scratch/sc-vba/vbafont.hxx
@@ -6,6 +6,7 @@
#include <org/openoffice/vba/XFont.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include "vbahelper.hxx"
+#include "vbapalette.hxx"
class ScTableSheetsObj;
@@ -14,16 +15,16 @@ typedef ::cppu::WeakImplHelper1< oo::vba::XFont > ScVbaFont_BASE;
class ScVbaFont : public ScVbaFont_BASE
{
css::uno::Reference< css::beans::XPropertySet > mxFont;
+ ScVbaPalette mPalette;
public:
- ScVbaFont( css::uno::Reference< css::beans::XPropertySet > xPropertySet ) throw ( css::uno::RuntimeException ) :
- mxFont( xPropertySet, css::uno::UNO_QUERY_THROW ){}
+ ScVbaFont( const ScVbaPalette& dPalette, css::uno::Reference< css::beans::XPropertySet > xPropertySet ) throw ( css::uno::RuntimeException ) : mPalette( dPalette ), mxFont( xPropertySet, css::uno::UNO_QUERY_THROW ){}
virtual ~ScVbaFont() {}
// Attributes
virtual void SAL_CALL setBold( sal_Bool bValue ) throw (css::uno::RuntimeException);
virtual sal_Bool SAL_CALL getBold() throw (css::uno::RuntimeException);
- virtual void SAL_CALL setUnderline( sal_Bool bValue ) throw (css::uno::RuntimeException);
- virtual sal_Bool SAL_CALL getUnderline() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setUnderline( const css::uno::Any& aValue ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL getUnderline() throw (css::uno::RuntimeException);
virtual void SAL_CALL setStrikethrough( sal_Bool bValue ) throw (css::uno::RuntimeException);
virtual sal_Bool SAL_CALL getStrikethrough() throw (css::uno::RuntimeException);
virtual void SAL_CALL setShadow( sal_Bool bValue ) throw (css::uno::RuntimeException);
@@ -31,8 +32,25 @@ public:
virtual void SAL_CALL setItalic( sal_Bool bValue ) throw (css::uno::RuntimeException);
virtual sal_Bool SAL_CALL getItalic() throw (css::uno::RuntimeException);
virtual void SAL_CALL setName( const ::rtl::OUString &rString ) throw (css::uno::RuntimeException);
- virtual ::rtl::OUString getName() throw (css::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getName() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setSubscript( sal_Bool bValue ) throw (css::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL getSubscript() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setSuperscript( sal_Bool bValue ) throw (css::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL getSuperscript() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setStandardFontSize( float dValue ) throw (css::uno::RuntimeException);
+ virtual float SAL_CALL getStandardFontSize() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setStandardFont( const ::rtl::OUString &rString ) throw (css::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getStandardFont() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setColorIndex( sal_Int32 bValue ) throw (css::uno::RuntimeException);
+ virtual sal_Int32 SAL_CALL getColorIndex() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setSize( float fValue ) throw (css::uno::RuntimeException);
+ virtual float SAL_CALL getSize() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setFontStyle( const ::rtl::OUString &rString ) throw (css::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getFontStyle() throw (css::uno::RuntimeException);
+
};
+
+
#endif /* SC_VBA_FONT_HXX */
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/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/vbawindow.cxx b/scratch/sc-vba/vbawindow.cxx
index bf072b03d..2bef41010 100644
--- a/scratch/sc-vba/vbawindow.cxx
+++ b/scratch/sc-vba/vbawindow.cxx
@@ -53,7 +53,7 @@ public:
{
throw container::NoSuchElementException();
}
- return makeAny( uno::Reference< vba::XWorksheet > ( new ScVbaWorksheet( m_xContext, *(m_it++), m_xModel ) ) );
+ return uno::makeAny( uno::Reference< vba::XWorksheet > ( new ScVbaWorksheet( m_xContext, *(m_it++), m_xModel ) ) );
}
@@ -114,7 +114,7 @@ public:
|| Index >= sheets.size() )
throw lang::IndexOutOfBoundsException();
- return makeAny( sheets[ Index ] );
+ return uno::makeAny( sheets[ Index ] );
}
//XElementAccess
@@ -134,7 +134,7 @@ public:
NameIndexHash::const_iterator it = namesToIndices.find( aName );
if ( it == namesToIndices.end() )
throw container::NoSuchElementException();
- return makeAny( sheets[ it->second ] );
+ return uno::makeAny( sheets[ it->second ] );
}
@@ -212,7 +212,7 @@ uno::Any SAL_CALL
ScVbaWindow::SelectedSheets( const uno::Any& aIndex ) throw (uno::RuntimeException)
{
uno::Reference< container::XEnumerationAccess > xEnumAccess( new SelectedSheetsEnumAccess( m_xContext, m_xModel ) );
- return makeAny( uno::Reference< vba::XWorksheets > ( new ScVbaWorksheets( m_xContext, xEnumAccess, m_xModel ) ) );
+ return uno::makeAny( uno::Reference< vba::XWorksheets > ( new ScVbaWorksheets( m_xContext, xEnumAccess, m_xModel ) ) );
}
void SAL_CALL
diff --git a/scratch/sc-vba/vbaworkbook.cxx b/scratch/sc-vba/vbaworkbook.cxx
index 5b0c480b0..52bca1e77 100644
--- a/scratch/sc-vba/vbaworkbook.cxx
+++ b/scratch/sc-vba/vbaworkbook.cxx
@@ -6,6 +6,7 @@
#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
#include <com/sun/star/frame/XStorable.hpp>
#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
#include "vbaworksheet.hxx"
#include "vbaworksheets.hxx"
@@ -49,8 +50,24 @@ public:
::rtl::OUString
ScVbaWorkbook::getName() throw (uno::RuntimeException)
{
- INetURLObject aURL( getModel()->getURL() );
- return aURL.GetLastName();
+ rtl::OUString sName = getModel()->getURL();
+ if ( sName.getLength() )
+ {
+
+ INetURLObject aURL( getModel()->getURL() );
+ sName = aURL.GetLastName();
+ }
+ else
+ {
+ const static rtl::OUString sTitle( RTL_CONSTASCII_USTRINGPARAM("Title" ) );
+ // process "UntitledX - $(PRODUCTNAME)"
+ uno::Reference< frame::XFrame > xFrame( getModel()->getCurrentController()->getFrame(), uno::UNO_QUERY_THROW );
+ uno::Reference< beans::XPropertySet > xProps( xFrame, uno::UNO_QUERY_THROW );
+ xProps->getPropertyValue(sTitle ) >>= sName;
+ sal_Int32 pos = 0;
+ sName = sName.getToken(0,' ',pos);
+ }
+ return sName;
}
::rtl::OUString
ScVbaWorkbook::getPath() throw (uno::RuntimeException)
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
diff --git a/src/Novell.dic b/src/Novell.dic
index 1e13748c9..e778f7cd7 100644
--- a/src/Novell.dic
+++ b/src/Novell.dic
@@ -14,6 +14,7 @@ NetIdentity
NetMail
NetStorage
NetWare
+Novell
OnDemand
PolyServe
SecretStore
@@ -29,4 +30,6 @@ iFolder
iManager
iPrint
Ximian
-SUSE
+SLES
+SLED
+SUSE \ No newline at end of file