From 59eb054137fd7022fa5ea835a83d5fd082d82a77 Mon Sep 17 00:00:00 2001 From: Silvan Calarco Date: Sat, 6 Jan 2024 05:34:37 +0100 Subject: [PATCH] update to 4.2.3.3 [release 4.2.3.3-1mamba;Sun Apr 13 2014] --- ...872-cancel-gtk-file-dialog-on-deskto.patch | 152 + ...hack.-Cursor-on-post-it-now-scrolls-.patch | 37 + ...09-i62414-out-by-one-breaks-CTL-spel.patch | 104 + ...-ctxt-after-taking-lastError-details.patch | 34 + ...-don-t-bail-out-on-mislength-records.patch | 209 ++ README.md | 4 + libreoffice-3.3.0.4-bootstrap-kde.patch | 18 + libreoffice-3.3.0.4-bug33478.patch | 11 + libreoffice-3.3.0.4-icu-bug31271.patch | 11 + ...eoffice-3.3.0.4-lucene-bundleversion.patch | 40 + ....1.2-bandaid-for-crash-in-SwTxtNode-.patch | 15 + libreoffice-3.3.1.2-bandaid-for-crash.patch | 20 + ...etter-resizing-of-overtall-glyphsubs.patch | 117 + ...-bug-33750-i94623-use-optimal-border.patch | 20 + ...g-34026-Get-correct-current-position.patch | 27 + ...office-3.3.1.2-crash-in-slidesorting.patch | 12 + ...ce-3.3.1.2-crash-with-NULL-pTableBox.patch | 11 + ...e-3.3.1.2-dereference-of-NULL-mpBase.patch | 13 + ...-t-crash-deregistering-diff_platform.patch | 192 ++ ...fice-3.3.1.2-fexceptions-fexceptions.patch | 29 + ...andle-missing-pWindows-from-xWindows.patch | 30 + ....3.1.2-install-high-resolution-icons.patch | 20 + ....3.1.2-make-sure-this-is-thread-safe.patch | 55 + ...a-IN-isnt-handled-by-fontconfig-well.patch | 12 + ...ce-3.4.3.2-pLangAttribUtf8-undefined.patch | 10 + ...4.0.3.3-x86_64-disable-cppunittester.patch | 10 + libreoffice-installfix.patch | 10 + libreoffice-multiliblauncher.sh | 16 + libreoffice-vbahelper.visibility.patch | 11 + libreoffice.spec | 2735 +++++++++++++++++ ...123.ooo53397.prelinkoptimize.desktop.patch | 111 + ....org-2.0.2.rh188467.printingdefaults.patch | 15 + ...2.0.gccXXXXX.solenv.javaregistration.patch | 53 + ...fice.org-2.4.0.ooo86080.unopkg.bodge.patch | 47 + ....org-3.0.0.ooo88341.sc.verticalboxes.patch | 105 + ...-3.1.0.ooo101274.opening-a-directory.patch | 174 ++ ...org-3.1.0.ooo102061.sc.cellanchoring.patch | 1764 +++++++++++ ...g-3.1.0.oooXXXXX.solenv.allowmissing.patch | 64 + ...1.1.ooo105784.vcl.sniffscriptforsubs.patch | 189 ++ ...e.org-3.3.0.ooo108637.sfx2.uisavedir.patch | 41 + ...3.3.0.ooo113273.desktop.resolvelinks.patch | 55 + turn-script-providers-into-extensions.patch | 395 +++ unowinreg.dll | Bin 0 -> 6144 bytes 43 files changed, 6998 insertions(+) create mode 100644 0001-Related-rhbz-672872-cancel-gtk-file-dialog-on-deskto.patch create mode 100644 0001-Removed-suspect-hack.-Cursor-on-post-it-now-scrolls-.patch create mode 100644 0001-Resolves-fdo-33509-i62414-out-by-one-breaks-CTL-spel.patch create mode 100644 0001-free-ctxt-after-taking-lastError-details.patch create mode 100644 0001-tidy-this-up-and-don-t-bail-out-on-mislength-records.patch create mode 100644 libreoffice-3.3.0.4-bootstrap-kde.patch create mode 100644 libreoffice-3.3.0.4-bug33478.patch create mode 100644 libreoffice-3.3.0.4-icu-bug31271.patch create mode 100644 libreoffice-3.3.0.4-lucene-bundleversion.patch create mode 100644 libreoffice-3.3.1.2-bandaid-for-crash-in-SwTxtNode-.patch create mode 100644 libreoffice-3.3.1.2-bandaid-for-crash.patch create mode 100644 libreoffice-3.3.1.2-better-resizing-of-overtall-glyphsubs.patch create mode 100644 libreoffice-3.3.1.2-bug-33750-i94623-use-optimal-border.patch create mode 100644 libreoffice-3.3.1.2-bug-34026-Get-correct-current-position.patch create mode 100644 libreoffice-3.3.1.2-crash-in-slidesorting.patch create mode 100644 libreoffice-3.3.1.2-crash-with-NULL-pTableBox.patch create mode 100644 libreoffice-3.3.1.2-dereference-of-NULL-mpBase.patch create mode 100644 libreoffice-3.3.1.2-don-t-crash-deregistering-diff_platform.patch create mode 100644 libreoffice-3.3.1.2-fexceptions-fexceptions.patch create mode 100644 libreoffice-3.3.1.2-handle-missing-pWindows-from-xWindows.patch create mode 100644 libreoffice-3.3.1.2-install-high-resolution-icons.patch create mode 100644 libreoffice-3.3.1.2-make-sure-this-is-thread-safe.patch create mode 100644 libreoffice-3.3.1.2-pa-IN-isnt-handled-by-fontconfig-well.patch create mode 100644 libreoffice-3.4.3.2-pLangAttribUtf8-undefined.patch create mode 100644 libreoffice-4.0.3.3-x86_64-disable-cppunittester.patch create mode 100644 libreoffice-installfix.patch create mode 100644 libreoffice-multiliblauncher.sh create mode 100644 libreoffice-vbahelper.visibility.patch create mode 100644 libreoffice.spec create mode 100644 openoffice.org-1.9.123.ooo53397.prelinkoptimize.desktop.patch create mode 100644 openoffice.org-2.0.2.rh188467.printingdefaults.patch create mode 100644 openoffice.org-2.2.0.gccXXXXX.solenv.javaregistration.patch create mode 100644 openoffice.org-2.4.0.ooo86080.unopkg.bodge.patch create mode 100644 openoffice.org-3.0.0.ooo88341.sc.verticalboxes.patch create mode 100644 openoffice.org-3.1.0.ooo101274.opening-a-directory.patch create mode 100644 openoffice.org-3.1.0.ooo102061.sc.cellanchoring.patch create mode 100644 openoffice.org-3.1.0.oooXXXXX.solenv.allowmissing.patch create mode 100644 openoffice.org-3.1.1.ooo105784.vcl.sniffscriptforsubs.patch create mode 100644 openoffice.org-3.3.0.ooo108637.sfx2.uisavedir.patch create mode 100644 openoffice.org-3.3.0.ooo113273.desktop.resolvelinks.patch create mode 100644 turn-script-providers-into-extensions.patch create mode 100644 unowinreg.dll diff --git a/0001-Related-rhbz-672872-cancel-gtk-file-dialog-on-deskto.patch b/0001-Related-rhbz-672872-cancel-gtk-file-dialog-on-deskto.patch new file mode 100644 index 0000000..bb65243 --- /dev/null +++ b/0001-Related-rhbz-672872-cancel-gtk-file-dialog-on-deskto.patch @@ -0,0 +1,152 @@ +From 8636f3f41f8f6950a0e3c05f50eb4423c4035b2f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 27 Jan 2011 16:41:00 +0000 +Subject: [PATCH 1/2] Related: rhbz#672872 cancel gtk file-dialog on desktop::terminate + +--- + fpicker/source/unx/gnome/SalGtkFilePicker.cxx | 7 +++++-- + fpicker/source/unx/gnome/SalGtkFolderPicker.cxx | 5 ++++- + fpicker/source/unx/gnome/SalGtkPicker.cxx | 19 ++++++++++++++++--- + fpicker/source/unx/gnome/SalGtkPicker.hxx | 20 +++++++++++++++++--- + 4 files changed, 42 insertions(+), 9 deletions(-) + +diff --git a/fpicker/source/unx/gnome/SalGtkFilePicker.cxx b/fpicker/source/unx/gnome/SalGtkFilePicker.cxx +index d08125e..068ead5 100644 +--- a/fpicker/source/unx/gnome/SalGtkFilePicker.cxx ++++ b/fpicker/source/unx/gnome/SalGtkFilePicker.cxx +@@ -1030,7 +1030,10 @@ + uno::Reference< awt::XExtendedToolkit > xToolkit( + m_xServiceMgr->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.awt.Toolkit") ), uno::UNO_QUERY); + +- RunDialog* pRunDialog = new RunDialog(m_pDialog, xToolkit); ++ uno::Reference< frame::XDesktop > xDesktop( ++ m_xServiceMgr->createInstance( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop")) ), uno::UNO_QUERY); ++ ++ RunDialog* pRunDialog = new RunDialog(m_pDialog, xToolkit, xDesktop); + uno::Reference < awt::XTopWindowListener > xLifeCycle(pRunDialog); + while( GTK_RESPONSE_NO == btn ) + { +@@ -1063,7 +1066,7 @@ + OUStringToOString(aResProvider.getResString(FILE_PICKER_TITLE_SAVE ), + RTL_TEXTENCODING_UTF8 ).getStr() ); + +- RunDialog* pAnotherDialog = new RunDialog(dlg, xToolkit); ++ RunDialog* pAnotherDialog = new RunDialog(dlg, xToolkit, xDesktop); + uno::Reference < awt::XTopWindowListener > xAnotherLifeCycle(pAnotherDialog); + btn = pAnotherDialog->run(); + +diff --git a/fpicker/source/unx/gnome/SalGtkFolderPicker.cxx b/fpicker/source/unx/gnome/SalGtkFolderPicker.cxx +index c42021c..08bbf04 100644 +--- a/fpicker/source/unx/gnome/SalGtkFolderPicker.cxx ++++ b/fpicker/source/unx/gnome/SalGtkFolderPicker.cxx +@@ -184,7 +184,10 @@ + uno::Reference< awt::XExtendedToolkit > xToolkit( + m_xServiceMgr->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.awt.Toolkit") ), uno::UNO_QUERY); + +- RunDialog* pRunDialog = new RunDialog(m_pDialog, xToolkit); ++ uno::Reference< frame::XDesktop > xDesktop( ++ m_xServiceMgr->createInstance( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop")) ), uno::UNO_QUERY); ++ ++ RunDialog* pRunDialog = new RunDialog(m_pDialog, xToolkit, xDesktop); + uno::Reference < awt::XTopWindowListener > xLifeCycle(pRunDialog); + gint nStatus = pRunDialog->run(); + switch( nStatus ) +diff --git a/fpicker/source/unx/gnome/SalGtkPicker.cxx b/fpicker/source/unx/gnome/SalGtkPicker.cxx +index 6dbaa03..9bdad50 100644 +--- a/fpicker/source/unx/gnome/SalGtkPicker.cxx ++++ b/fpicker/source/unx/gnome/SalGtkPicker.cxx +@@ -130,9 +130,10 @@ extern "C" + extern GdkDisplay* gdk_x11_lookup_xdisplay (void*xdisplay); + } + +-RunDialog::RunDialog( GtkWidget *pDialog, uno::Reference< awt::XExtendedToolkit >& rToolkit ) : +- cppu::WeakComponentImplHelper1< awt::XTopWindowListener >( maLock ), +- mpDialog(pDialog), mpCreatedParent(NULL), mxToolkit(rToolkit) ++RunDialog::RunDialog( GtkWidget *pDialog, uno::Reference< awt::XExtendedToolkit >& rToolkit, ++ uno::Reference< frame::XDesktop >& rDesktop ) : ++ cppu::WeakComponentImplHelper2< awt::XTopWindowListener, frame::XTerminateListener >( maLock ), ++ mpDialog(pDialog), mpCreatedParent(NULL), mxToolkit(rToolkit), mxDesktop(rDesktop) + { + awt::SystemDependentXWindow aWindowHandle; + +@@ -186,6 +187,18 @@ void SAL_CALL RunDialog::windowOpened( const ::com::sun::star::lang::EventObject + g_timeout_add_full(G_PRIORITY_HIGH_IDLE, 0, (GSourceFunc)canceldialog, this, NULL); + } + ++void SAL_CALL RunDialog::queryTermination( const ::com::sun::star::lang::EventObject& ) ++ throw(::com::sun::star::frame::TerminationVetoException, ::com::sun::star::uno::RuntimeException) ++{ ++} ++ ++void SAL_CALL RunDialog::notifyTermination( const ::com::sun::star::lang::EventObject& ) ++ throw(::com::sun::star::uno::RuntimeException) ++{ ++ GdkThreadLock aLock; ++ g_timeout_add_full(G_PRIORITY_HIGH_IDLE, 0, (GSourceFunc)canceldialog, this, NULL); ++} ++ + void RunDialog::cancel() + { + GdkThreadLock aLock; +diff --git a/fpicker/source/unx/gnome/SalGtkPicker.hxx b/fpicker/source/unx/gnome/SalGtkPicker.hxx +index 889790d..52fe5a0 100644 +--- a/fpicker/source/unx/gnome/SalGtkPicker.hxx ++++ b/fpicker/source/unx/gnome/SalGtkPicker.hxx +@@ -34,7 +34,7 @@ + //_____________________________________________________________________________ + + #include +-#include ++#include + #include + #include + #include +@@ -43,6 +43,8 @@ + + #include + #include ++#include ++#include + + #include + #include +@@ -85,13 +87,16 @@ public: + //to happen while we're opened waiting for user input, e.g. + //https://bugzilla.redhat.com/show_bug.cgi?id=441108 + class RunDialog : +- public cppu::WeakComponentImplHelper1< ::com::sun::star::awt::XTopWindowListener > ++ public cppu::WeakComponentImplHelper2< ++ ::com::sun::star::awt::XTopWindowListener, ++ ::com::sun::star::frame::XTerminateListener > + { + private: + osl::Mutex maLock; + GtkWidget *mpDialog; + GdkWindow *mpCreatedParent; + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XExtendedToolkit> mxToolkit; ++ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDesktop > mxDesktop; + public: + + // XTopWindowListener +@@ -112,8 +117,17 @@ public: + throw (::com::sun::star::uno::RuntimeException) {} + virtual void SAL_CALL windowDeactivated( const ::com::sun::star::lang::EventObject& ) + throw (::com::sun::star::uno::RuntimeException) {} ++ ++ // XTerminateListener ++ virtual void SAL_CALL queryTermination( const ::com::sun::star::lang::EventObject& aEvent ) ++ throw(::com::sun::star::frame::TerminationVetoException, ::com::sun::star::uno::RuntimeException); ++ virtual void SAL_CALL notifyTermination( const ::com::sun::star::lang::EventObject& aEvent ) ++ throw(::com::sun::star::uno::RuntimeException); + public: +- RunDialog(GtkWidget *pDialog, ::com::sun::star::uno::Reference< ::com::sun::star::awt::XExtendedToolkit > &rToolkit); ++ RunDialog(GtkWidget *pDialog, ++ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XExtendedToolkit > &rToolkit, ++ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDesktop > &rDesktop ++ ); + gint run(); + void cancel(); + ~RunDialog(); +-- +1.7.3.5 + diff --git a/0001-Removed-suspect-hack.-Cursor-on-post-it-now-scrolls-.patch b/0001-Removed-suspect-hack.-Cursor-on-post-it-now-scrolls-.patch new file mode 100644 index 0000000..4251db7 --- /dev/null +++ b/0001-Removed-suspect-hack.-Cursor-on-post-it-now-scrolls-.patch @@ -0,0 +1,37 @@ +From 092e1494c1d7d68873f50a0da7699b0fdd15c439 Mon Sep 17 00:00:00 2001 +From: Andy Hearn +Date: Sat, 8 Jan 2011 23:26:13 +0000 +Subject: [PATCH] Removed suspect hack. Cursor on post-it now scrolls out of view. + +Previously, when the user scrolls when the cursor is within a +post-it note, the main view judders, refusing to let the cursor + go out of view. The removed lines appears to have been a hack +to retain focus of a post-it note containing the cursor. +--- + sw/source/ui/docvw/PostItMgr.cxx | 10 ---------- + 1 files changed, 0 insertions(+), 10 deletions(-) + +diff --git a/sw/source/ui/docvw/PostItMgr.cxx b/sw/source/ui/docvw/PostItMgr.cxx +index cb3e783..7dcdad7 100644 +--- a/sw/source/ui/docvw/PostItMgr.cxx ++++ b/sw/source/ui/docvw/PostItMgr.cxx +@@ -716,16 +716,6 @@ void SwPostItMgr::LayoutPostIts() + OSL_ENSURE(mPages[n]->bScrollbar,"SwPostItMgr::LayoutByPage(): note overlaps, but bScrollbar is not true"); + } + } +- +- // do some magic so we really see the focused note +- for(SwSidebarWin_iterator i = aVisiblePostItList.begin(); i!= aVisiblePostItList.end() ; i++) +- { +- if ((*i)->HasChildPathFocus()) +- { +- MakeVisible((*i),n+1); +- break; +- } +- } + } + else + { +-- +1.7.3.4 + diff --git a/0001-Resolves-fdo-33509-i62414-out-by-one-breaks-CTL-spel.patch b/0001-Resolves-fdo-33509-i62414-out-by-one-breaks-CTL-spel.patch new file mode 100644 index 0000000..0e37637 --- /dev/null +++ b/0001-Resolves-fdo-33509-i62414-out-by-one-breaks-CTL-spel.patch @@ -0,0 +1,104 @@ +From ec7ff475f480619787131d0a193d7786c30dac10 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 28 Jan 2011 21:16:36 +0000 +Subject: [PATCH] Resolves: fdo#33509, #i62414# out-by-one breaks CTL spell-checking popup + +ABCD +0123 + ^ + +Currently calls GetCharRect for position "0" and position "4". It should be +"3". We were placing the cursor *after* the final character. We really need to +place it *before* the final character and get the bounding box of the last char +to union it with the first char's bounding box. It works out ok for western +text, but you get a far different value for CTL text. +--- + sw/source/core/crsr/crsrsh.cxx | 4 ++-- + sw/source/core/edit/edlingu.cxx | 14 +++++--------- + 2 files changed, 7 insertions(+), 11 deletions(-) + +diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx +index ed8d37b..a6db747 100644 +--- a/sw/source/core/crsr/crsrsh.cxx ++++ b/sw/source/core/crsr/crsrsh.cxx +@@ -3419,7 +3419,7 @@ void SwCrsrShell::GetSmartTagTerm( const Point& rPt, SwRect& rSelectRect, + //no determine the rectangle in the current line + xub_StrLen nWordStart = (nBegin + nLeft) < nLineStart ? nLineStart : nBegin + nLeft; + //take one less than the line end - otherwise the next line would be calculated +- xub_StrLen nWordEnd = (nBegin + nLen - nLeft - nRight) > nLineEnd ? nLineEnd - 1: (nBegin + nLen - nLeft - nRight); ++ xub_StrLen nWordEnd = (nBegin + nLen - nLeft - nRight) > nLineEnd ? nLineEnd : (nBegin + nLen - nLeft - nRight); + Push(); + pCrsr->DeleteMark(); + SwIndex& rContent = GetCrsr()->GetPoint()->nContent; +@@ -3431,7 +3431,7 @@ void SwCrsrShell::GetSmartTagTerm( const Point& rPt, SwRect& rSelectRect, + SwCntntFrm *pCntntFrame = pCntntNode->GetFrm( &rPt, pCrsr->GetPoint(), FALSE); + + pCntntFrame->GetCharRect( aStartRect, *pCrsr->GetPoint(), &aState ); +- rContent = nWordEnd; ++ rContent = nWordEnd - 1; + SwRect aEndRect; + pCntntFrame->GetCharRect( aEndRect, *pCrsr->GetPoint(),&aState ); + rSelectRect = aStartRect.Union( aEndRect ); +diff --git a/sw/source/core/edit/edlingu.cxx b/sw/source/core/edit/edlingu.cxx +index 7e186f9..a3d1572 100644 +--- a/sw/source/core/edit/edlingu.cxx ++++ b/sw/source/core/edit/edlingu.cxx +@@ -550,7 +550,6 @@ uno::Any SwHyphIter::Continue( sal_uInt16* pPageCnt, sal_uInt16* pPageSt ) + + const sal_Bool bAuto = IsAuto(); + uno::Reference< XHyphenatedWord > xHyphWord; +- sal_uInt16 nRet; + sal_Bool bGoOn = sal_False; + do { + SwPaM *pCrsr; +@@ -565,10 +564,7 @@ uno::Any SwHyphIter::Continue( sal_uInt16* pPageCnt, sal_uInt16* pPageSt ) + pCrsr->SetMark(); + } + +- // geraten BUG: +- if ( *pCrsr->End() > *GetEnd() ) +- nRet = 0; +- else ++ if ( *pCrsr->End() <= *GetEnd() ) + { + *pCrsr->GetMark() = *GetEnd(); + +@@ -1076,7 +1072,7 @@ uno::Reference< XSpellAlternatives > + //no determine the rectangle in the current line + xub_StrLen nWordStart = (nBegin + nLeft) < nLineStart ? nLineStart : nBegin + nLeft; + //take one less than the line end - otherwise the next line would be calculated +- xub_StrLen nWordEnd = (nBegin + nLen - nLeft - nRight) > nLineEnd ? nLineEnd - 1: (nBegin + nLen - nLeft - nRight); ++ xub_StrLen nWordEnd = (nBegin + nLen - nLeft - nRight) > nLineEnd ? nLineEnd: (nBegin + nLen - nLeft - nRight); + Push(); + pCrsr->DeleteMark(); + SwIndex& rContent = GetCrsr()->GetPoint()->nContent; +@@ -1088,7 +1084,7 @@ uno::Reference< XSpellAlternatives > + SwCntntFrm *pCntntFrame = pCntntNode->GetFrm(pPt, pCrsr->GetPoint(), FALSE); + + pCntntFrame->GetCharRect( aStartRect, *pCrsr->GetPoint(), &aState ); +- rContent = nWordEnd; ++ rContent = nWordEnd - 1; + SwRect aEndRect; + pCntntFrame->GetCharRect( aEndRect, *pCrsr->GetPoint(),&aState ); + rSelectRect = aStartRect.Union( aEndRect ); +@@ -1210,7 +1206,7 @@ bool SwEditShell::GetGrammarCorrection( + //no determine the rectangle in the current line + xub_StrLen nWordStart = (nBegin + nLeft) < nLineStart ? nLineStart : nBegin + nLeft; + //take one less than the line end - otherwise the next line would be calculated +- xub_StrLen nWordEnd = (nBegin + nLen - nLeft - nRight) > nLineEnd ? nLineEnd - 1: (nBegin + nLen - nLeft - nRight); ++ xub_StrLen nWordEnd = (nBegin + nLen - nLeft - nRight) > nLineEnd ? nLineEnd: (nBegin + nLen - nLeft - nRight); + Push(); + pCrsr->DeleteMark(); + SwIndex& rContent = GetCrsr()->GetPoint()->nContent; +@@ -1222,7 +1218,7 @@ bool SwEditShell::GetGrammarCorrection( + SwCntntFrm *pCntntFrame = pCntntNode->GetFrm(pPt, pCrsr->GetPoint(), FALSE); + + pCntntFrame->GetCharRect( aStartRect, *pCrsr->GetPoint(), &aState ); +- rContent = nWordEnd; ++ rContent = nWordEnd - 1; + SwRect aEndRect; + pCntntFrame->GetCharRect( aEndRect, *pCrsr->GetPoint(),&aState ); + rSelectRect = aStartRect.Union( aEndRect ); +-- +1.7.3.5 + diff --git a/0001-free-ctxt-after-taking-lastError-details.patch b/0001-free-ctxt-after-taking-lastError-details.patch new file mode 100644 index 0000000..a6ec54e --- /dev/null +++ b/0001-free-ctxt-after-taking-lastError-details.patch @@ -0,0 +1,34 @@ +From e7473329c8d79ba3988aa07172290beedcaaf325 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 18 Jan 2011 12:10:32 +0000 +Subject: [PATCH] free ctxt *after* taking lastError details + +--- + unoxml/source/dom/documentbuilder.cxx | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/unoxml/source/dom/documentbuilder.cxx b/unoxml/source/dom/documentbuilder.cxx +index bcce353..9e052c3 100644 +--- a/unoxml/source/dom/documentbuilder.cxx ++++ b/unoxml/source/dom/documentbuilder.cxx +@@ -314,13 +314,13 @@ namespace DOM + + } // extern "C" + +- void throwEx(xmlParserCtxtPtr ctxt) { +- OUString msg = make_error_message(ctxt); +- xmlFreeParserCtxt(ctxt); ++ void throwEx(xmlParserCtxtPtr ctxt) ++ { + com::sun::star::xml::sax::SAXParseException saxex; +- saxex.Message = msg; ++ saxex.Message = make_error_message(ctxt); + saxex.LineNumber = static_cast(ctxt->lastError.line); + saxex.ColumnNumber = static_cast(ctxt->lastError.int2); ++ xmlFreeParserCtxt(ctxt); + throw saxex; + } + +-- +1.7.3.4 + diff --git a/0001-tidy-this-up-and-don-t-bail-out-on-mislength-records.patch b/0001-tidy-this-up-and-don-t-bail-out-on-mislength-records.patch new file mode 100644 index 0000000..42f2f7c --- /dev/null +++ b/0001-tidy-this-up-and-don-t-bail-out-on-mislength-records.patch @@ -0,0 +1,209 @@ +diff --git a/sw/source/filter/ww8/ww8graf.cxx b/sw/source/filter/ww8/ww8graf.cxx +index 5720af2..7807371 100644 +--- a/sw/source/filter/ww8/ww8graf.cxx ++++ b/sw/source/filter/ww8/ww8graf.cxx +@@ -1052,7 +1052,7 @@ + Read_PicLoc(nAktId, pParams, 1); + break; + } +- aSprmIter++; ++ aSprmIter.advance(); + } + + //if( bRead_Obj || bRead_PicLoc ) break; +diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx +index 5b66561..65172b1 100644 +--- a/sw/source/filter/ww8/ww8par2.cxx ++++ b/sw/source/filter/ww8/ww8par2.cxx +@@ -1964,7 +1964,7 @@ WW8TabDesc::WW8TabDesc(SwWW8ImplReader* pIoClass, WW8_CP nStartCp) : + default: + ; + } +- aSprmIter++; ++ aSprmIter.advance(); + } + + if( !nLoop ) +diff --git a/sw/source/filter/ww8/ww8scan.cxx b/sw/source/filter/ww8/ww8scan.cxx +index f2c8fd6..44f1f69 100644 +--- a/sw/source/filter/ww8/ww8scan.cxx ++++ b/sw/source/filter/ww8/ww8scan.cxx +@@ -895,22 +895,17 @@ void WW8SprmIter::SetSprms(const BYTE* pSprms_, long nLen_) + UpdateMyMembers(); + } + +-const BYTE* WW8SprmIter::operator ++( int ) ++void WW8SprmIter::advance() + { + if (nRemLen > 0 ) + { +- if( nRemLen >= nAktSize ) +- { +- pSprms += nAktSize; +- nRemLen -= nAktSize; +- UpdateMyMembers(); +- } +- else +- { +- throw( ::std::exception() ); +- } ++ USHORT nSize = nAktSize; ++ if (nSize > nRemLen) ++ nSize = nRemLen; ++ pSprms += nSize; ++ nRemLen -= nSize; ++ UpdateMyMembers(); + } +- return pSprms; + } + + void WW8SprmIter::UpdateMyMembers() +@@ -936,7 +931,7 @@ const BYTE* WW8SprmIter::FindSprm(USHORT nId) + { + if( GetAktId() == nId ) + return GetAktParams(); // SPRM found! +- operator ++(0); ++ advance(); + } + + return 0; // SPRM _not_ found +@@ -2828,7 +2823,7 @@ bool WW8PLCFx_Fc_FKP::WW8Fkp::HasSprm(USHORT nId, + { + if (aIter.GetAktId() == nId) + rResult.push_back(aIter.GetAktParams()); +- aIter++; ++ aIter.advance(); + }; + return !rResult.empty(); + } +@@ -3151,7 +3146,7 @@ bool WW8PLCFx_Fc_FKP::HasSprm(USHORT nId, std::vector &rResult) + { + if (aIter.GetAktId() == nId) + rResult.push_back(aIter.GetAktParams()); +- aIter++; ++ aIter.advance(); + }; + } + return !rResult.empty(); +diff --git a/sw/source/filter/ww8/ww8scan.hxx b/sw/source/filter/ww8/ww8scan.hxx +index cf6541f..af19986 100644 +--- a/sw/source/filter/ww8/ww8scan.hxx ++++ b/sw/source/filter/ww8/ww8scan.hxx +@@ -261,7 +261,7 @@ public: + const wwSprmParser &rSprmParser); + void SetSprms( const BYTE* pSprms_, long nLen_ ); + const BYTE* FindSprm(USHORT nId); +- const BYTE* operator ++( int ); ++ void advance(); + const BYTE* GetSprms() const + { return ( pSprms && (0 < nRemLen) ) ? pSprms : 0; } + const BYTE* GetAktParams() const { return pAktParams; } +diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx +index 801cc2f..0df3331 100644 +--- a/sw/source/filter/ww8/ww8par.cxx ++++ b/sw/source/filter/ww8/ww8par.cxx +@@ -3895,7 +3895,7 @@ void SwWW8ImplReader::ReadDocInfo() + xDocProps->setTemplateURL( sTemplateURL ); + } + } +- else // not a template ++ else if (pWwFib->lcbSttbfAssoc) // not a template, and has a SttbfAssoc + { + long nCur = pTableStream->Tell(); + Sttb aSttb; +diff --git a/sw/source/filter/ww8/ww8scan.cxx b/sw/source/filter/ww8/ww8scan.cxx +index 44f1f69..b1e0351 100644 +--- a/sw/source/filter/ww8/ww8scan.cxx ++++ b/sw/source/filter/ww8/ww8scan.cxx +@@ -2561,6 +2561,7 @@ WW8PLCFx_Fc_FKP::WW8Fkp::WW8Fkp(ww::WordVersion eVersion, SvStream* pSt, + long nOldPos = pSt->Tell(); + + pSt->Seek(nFilePos); ++ memset(maRawData, 0, 512); + pSt->Read(maRawData, 512); + mnIMax = maRawData[511]; + +@@ -2605,24 +2606,36 @@ WW8PLCFx_Fc_FKP::WW8Fkp::WW8Fkp(ww::WordVersion eVersion, SvStream* pSt, + aEntry.mnLen = maRawData[nOfs+1]; + nDelta++; + } +- + aEntry.mnLen *= 2; + + //stylecode, std/istd + if (eVersion == ww::eWW2) + { +- aEntry.mnIStd = *(maRawData+nOfs+1+nDelta); +- aEntry.mnLen--; //style code +- aEntry.mnLen-=6; //PHE +- //skipi stc, len byte + 6 byte PHE +- aEntry.mpData = maRawData + nOfs + 8; ++ if (aEntry.mnLen >= 1) ++ { ++ aEntry.mnIStd = *(maRawData+nOfs+1+nDelta); ++ aEntry.mnLen--; //style code ++ if (aEntry.mnLen >= 6) ++ { ++ aEntry.mnLen-=6; //PHE ++ //skipi stc, len byte + 6 byte PHE ++ aEntry.mpData = maRawData + nOfs + 8; ++ } ++ else ++ aEntry.mnLen=0; //Too short ++ } + } + else + { +- aEntry.mnIStd = SVBT16ToShort(maRawData+nOfs+1+nDelta); +- aEntry.mnLen-=2; //istd +- //skip istd, len byte + optional extra len byte +- aEntry.mpData = maRawData + nOfs + 3 + nDelta; ++ if (aEntry.mnLen >= 2) ++ { ++ aEntry.mnIStd = SVBT16ToShort(maRawData+nOfs+1+nDelta); ++ aEntry.mnLen-=2; //istd ++ //skip istd, len byte + optional extra len byte ++ aEntry.mpData = maRawData + nOfs + 3 + nDelta; ++ } ++ else ++ aEntry.mnLen=0; //Too short, ignore + } + + USHORT nSpId = aEntry.mnLen ? maSprmParser.GetSprmId(aEntry.mpData) : 0; +@@ -2666,6 +2679,17 @@ WW8PLCFx_Fc_FKP::WW8Fkp::WW8Fkp(ww::WordVersion eVersion, SvStream* pSt, + } + + maEntries.push_back(aEntry); ++ ++#ifdef DEBUGSPRMREADER ++ { ++ sal_Int32 nLen; ++ BYTE* pSprms = GetLenAndIStdAndSprms( nLen ); ++ ++ WW8SprmIter aIter(pSprms, nLen, maSprmParser); ++ while(aIter.GetSprms()) ++ aIter.advance(); ++ } ++#endif + } + + //one more FC than grrpl entries +diff --git a/filter/source/msfilter/mstoolbar.cxx b/filter/source/msfilter/mstoolbar.cxx +index 81b73e5..daee39b 100644 +--- a/filter/source/msfilter/mstoolbar.cxx ++++ b/filter/source/msfilter/mstoolbar.cxx +@@ -188,10 +188,11 @@ TBBase::indent_printf( FILE* fp, const char* format, ... ) + + rtl::OUString TBBase::readUnicodeString( SvStream* pS, sal_Int32 nChars ) + { +- sal_Int32 nBufSize = nChars * 2; ++ sal_Size nBufSize = nChars * 2; + boost::scoped_array< sal_uInt8 > pArray( new sal_uInt8[ nBufSize ] ); +- pS->Read( pArray.get(), nBufSize ); +- return svt::BinFilterUtils::CreateOUStringFromUniStringArray( reinterpret_cast< const char* >( pArray.get() ), nBufSize ); ++ sal_Size nReadSize = pS->Read( pArray.get(), nBufSize ); ++ OSL_ASSERT(nReadSize == nBufSize); ++ return svt::BinFilterUtils::CreateOUStringFromUniStringArray( reinterpret_cast< const char* >( pArray.get() ), nReadSize ); + } + + TBCHeader::TBCHeader() : bSignature( 0x3 ) diff --git a/README.md b/README.md index 81d90f9..692b45b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ # libreoffice +LibreOffice is an Open Source, community-developed, office productivity suite. +It includes the key desktop applications, such as a word processor, spreadsheet, presentation manager, formula editor and drawing program, with a user interface and feature set similar to other office suites. +Sophisticated and flexible, LibreOffice also works transparently with a variety of file formats, including Microsoft Office File Formats. + diff --git a/libreoffice-3.3.0.4-bootstrap-kde.patch b/libreoffice-3.3.0.4-bootstrap-kde.patch new file mode 100644 index 0000000..4aa9d00 --- /dev/null +++ b/libreoffice-3.3.0.4-bootstrap-kde.patch @@ -0,0 +1,18 @@ +--- configure.in 2011-01-18 15:45:20.000000000 +0100 ++++ configure.in-gil 2011-01-24 23:20:19.000000000 +0100 +@@ -6891,12 +6891,12 @@ + qt_incdirs="$QT4INC /usr/include/qt4 /usr/include $x_includes" + qt_libdirs="$QT4LIB /usr/lib $x_libraries" + +- kde_incdirs="/usr/include $x_includes" +- kde_libdirs="/usr/lib $x_libraries" ++ kde_incdirs="/opt/kde/include $x_includes" ++ kde_libdirs="/opt/kde/lib $x_libraries" + + if test "$build_cpu" = "x86_64" ; then + qt_libdirs="$qt_libdirs /usr/lib64/qt4 /usr/lib64/qt /usr/lib64" +- kde_libdirs="$kde_libdirs /usr/lib64 /usr/lib64/kde4" ++ kde_libdirs="$kde_libdirs /opt/kde/lib64" + fi + + if test -n "$QTDIR" ; then diff --git a/libreoffice-3.3.0.4-bug33478.patch b/libreoffice-3.3.0.4-bug33478.patch new file mode 100644 index 0000000..a11b3f8 --- /dev/null +++ b/libreoffice-3.3.0.4-bug33478.patch @@ -0,0 +1,11 @@ +--- sw/source/filter/ww8/rtfattributeoutput.cxx 2010-11-30 12:00:47.000000000 +0100 ++++ sw/source/filter/ww8/rtfattributeoutput.cxx-gil 2011-01-28 00:36:28.000000000 +0100 +@@ -1092,7 +1092,7 @@ + m_rExport.InsStyle(m_nStyleId, aStyles); + m_aStylesheet.append(aStyles); + m_aStylesheet.append(' '); +- m_aStylesheet.append(OUStringToOString( OUString( m_rStyleName ), m_rExport.eCurrentEncoding )); ++ m_aStylesheet.append(m_rExport.OutString(m_rStyleName, m_rExport.eCurrentEncoding)); + m_aStylesheet.append(";}"); + m_aStylesheet.append(m_rExport.sNewLine); + } diff --git a/libreoffice-3.3.0.4-icu-bug31271.patch b/libreoffice-3.3.0.4-icu-bug31271.patch new file mode 100644 index 0000000..0f8145c --- /dev/null +++ b/libreoffice-3.3.0.4-icu-bug31271.patch @@ -0,0 +1,11 @@ +--- i18npool/source/breakiterator/data/line.txt 2010-11-11 16:22:47.000000000 +0100 ++++ i18npool/source/breakiterator/data/line.txt-gil 2011-01-29 09:47:06.000000000 +0100 +@@ -61,7 +61,7 @@ + $BK = [:LineBreak = Mandatory_Break:]; + $B2 = [:LineBreak = Break_Both:]; + $CB = [:LineBreak = Contingent_Break:]; +-$CL = [:LineBreak = Close_Punctuation:] ; ++$CL = [[:LineBreak = Close_Punctuation:] [:LineBreak = Close_Parenthesis:]]; + $CM = [:LineBreak = Combining_Mark:]; + $CR = [:LineBreak = Carriage_Return:]; + $EX = [:LineBreak = Exclamation:]; diff --git a/libreoffice-3.3.0.4-lucene-bundleversion.patch b/libreoffice-3.3.0.4-lucene-bundleversion.patch new file mode 100644 index 0000000..7c85c13 --- /dev/null +++ b/libreoffice-3.3.0.4-lucene-bundleversion.patch @@ -0,0 +1,40 @@ +--- configure.in 2011-01-25 06:17:31.000000000 +0100 ++++ configure.in-gil 2011-01-25 06:20:15.000000000 +0100 +@@ -4342,8 +4342,8 @@ + AC_MSG_RESULT([external]) + SYSTEM_LUCENE=YES + if test -z $LUCENE_CORE_JAR; then +- AC_CHECK_FILE(/usr/share/java/lucene-core-2.3.jar, +- [ LUCENE_CORE_JAR=/usr/share/java/lucene-core-2.3.jar ], ++ AC_CHECK_FILE(/usr/share/java/lucene-core-2.4.1.jar, ++ [ LUCENE_CORE_JAR=/usr/share/java/lucene-core-2.4.1.jar ], + [ + AC_CHECK_FILE(/usr/share/java/lucene-core.jar, + [ LUCENE_CORE_JAR=/usr/share/java/lucene-core.jar ], +@@ -4361,8 +4361,8 @@ + fi + + if test -z $LUCENE_ANALYZERS_JAR; then +- AC_CHECK_FILE(/usr/share/java/lucene-analyzers-2.3.jar, +- [ LUCENE_ANALYZERS_JAR=/usr/share/java/lucene-analyzers-2.3.jar ], ++ AC_CHECK_FILE(/usr/share/java/lucene-contrib/lucene-analyzers-2.4.1.jar, ++ [ LUCENE_ANALYZERS_JAR=/usr/share/java/lucene-contrib/lucene-analyzers-2.4.1.jar ], + [ + AC_CHECK_FILE(/usr/share/java/lucene-contrib/lucene-analyzers.jar, + [ LUCENE_ANALYZERS_JAR=/usr/share/java/lucene-contrib/lucene-analyzers.jar ], +@@ -4374,13 +4374,13 @@ + AC_CHECK_FILE($LUCENE_CORE_JAR, [], + [ AC_MSG_ERROR(lucene-analyzers.jar not found.)], []) + fi +- AC_MSG_CHECKING([whether lucene is version 2.x]) ++ AC_MSG_CHECKING([whether lucene is version 1.9.1.x]) + export LUCENE_CORE_JAR + if $PERL -e 'use Archive::Zip; + my $file = "$ENV{'LUCENE_CORE_JAR'}"; + my $zip = Archive::Zip->new( $file ); + my $mf = $zip->contents ( "META-INF/MANIFEST.MF" ); +- if ( $mf =~ m/Specification-Version: 2.*/ ) { ++ if ( $mf =~ m/Bundle-Version: 1.9.1.*/ ) { + exit 0; + } else { + exit 1; diff --git a/libreoffice-3.3.1.2-bandaid-for-crash-in-SwTxtNode-.patch b/libreoffice-3.3.1.2-bandaid-for-crash-in-SwTxtNode-.patch new file mode 100644 index 0000000..d0239e9 --- /dev/null +++ b/libreoffice-3.3.1.2-bandaid-for-crash-in-SwTxtNode-.patch @@ -0,0 +1,15 @@ +--- sw/source/core/unocore/unorefmk.cxx 2010-11-25 20:17:35.000000000 +0100 ++++ sw/source/core/unocore/unorefmk.cxx-gil 2011-03-03 16:09:51.000000000 +0100 +@@ -261,8 +261,10 @@ + } + else + { +- pTxtAttr = rPam.GetNode()->GetTxtNode()->GetTxtAttrForCharAt( +- rPam.GetPoint()->nContent.GetIndex() - 1, RES_TXTATR_REFMARK); ++ SwTxtNode *pTxtNd = rPam.GetNode()->GetTxtNode(); ++ OSL_ASSERT(pTxtNd); ++ pTxtAttr = pTxtNd ? rPam.GetNode()->GetTxtNode()->GetTxtAttrForCharAt( ++ rPam.GetPoint()->nContent.GetIndex() - 1, RES_TXTATR_REFMARK) : NULL; + } + + if (!pTxtAttr) diff --git a/libreoffice-3.3.1.2-bandaid-for-crash.patch b/libreoffice-3.3.1.2-bandaid-for-crash.patch new file mode 100644 index 0000000..dd6356e --- /dev/null +++ b/libreoffice-3.3.1.2-bandaid-for-crash.patch @@ -0,0 +1,20 @@ +--- sw/source/ui/uiview/viewtab.cxx 2010-11-11 16:46:47.000000000 +0100 ++++ sw/source/ui/uiview/viewtab.cxx-gil 2011-03-03 15:53:20.000000000 +0100 +@@ -722,7 +722,7 @@ + if(bIsTableRTL) + { + USHORT nColCount = aColItem.Count() - 1; +- for ( USHORT i = 0; i < nColCount; ++i ) ++ for ( USHORT i = 0; i < nColCount && i < aTabCols.Count(); ++i ) + { + const SvxColumnDescription& rCol = aColItem[nColCount - i]; + aTabCols[i] = aTabCols.GetRight() - rCol.nStart; +@@ -731,7 +731,7 @@ + } + else + { +- for ( USHORT i = 0; i < aColItem.Count()-1; ++i ) ++ for ( USHORT i = 0; i < aColItem.Count()-1 && i < aTabCols.Count(); ++i ) + { + const SvxColumnDescription& rCol = aColItem[i]; + aTabCols[i] = rCol.nEnd + aTabCols.GetLeft(); diff --git a/libreoffice-3.3.1.2-better-resizing-of-overtall-glyphsubs.patch b/libreoffice-3.3.1.2-better-resizing-of-overtall-glyphsubs.patch new file mode 100644 index 0000000..922bd61 --- /dev/null +++ b/libreoffice-3.3.1.2-better-resizing-of-overtall-glyphsubs.patch @@ -0,0 +1,117 @@ +diff -Nru vcl/inc/vcl/outdev.hxx vcl-gil/inc/vcl/outdev.hxx +--- vcl/inc/vcl/outdev.hxx 2010-11-11 16:22:48.000000000 +0100 ++++ vcl-gil/inc/vcl/outdev.hxx 2011-03-15 01:59:38.000000000 +0100 +@@ -277,6 +277,8 @@ + + class VirtualDevice; + class Printer; ++class ImplFontSelectData; ++class ImplFontMetricData; + + const char* ImplDbgCheckOutputDevice( const void* pObj ); + +@@ -564,6 +566,9 @@ + // Helper for line geometry paint with support for graphic expansion (pattern and fat_to_area) + void impPaintLineGeometryWithEvtlExpand(const LineInfo& rInfo, basegfx::B2DPolyPolygon aLinePolyPolygon); + ++ SAL_DLLPRIVATE void forceFallbackFontToFit(SalLayout &rFallback, ImplFontEntry &rFallbackFont, ++ ImplFontSelectData &rFontSelData, int nFallbackLevel, ++ ImplLayoutArgs& rLayoutArgs, const ImplFontMetricData& rOrigMetric) const; + protected: + OutputDevice(); + +diff -Nru vcl/source/gdi/outdev3.cxx vcl-gil/source/gdi/outdev3.cxx +--- vcl/source/gdi/outdev3.cxx 2010-12-03 16:11:22.000000000 +0100 ++++ vcl-gil/source/gdi/outdev3.cxx 2011-03-15 02:04:10.000000000 +0100 +@@ -6023,6 +6023,58 @@ + return pSalLayout; + } + ++void OutputDevice::forceFallbackFontToFit(SalLayout &rFallback, ImplFontEntry &rFallbackFont, ++ ImplFontSelectData &rFontSelData, int nFallbackLevel, ++ ImplLayoutArgs& rLayoutArgs, const ImplFontMetricData& rOrigMetric) const ++{ ++ Rectangle aBoundRect; ++ bool bHaveBounding = false; ++ Rectangle aRectangle; ++ ++ rFallback.AdjustLayout( rLayoutArgs ); ++ ++ //All we care about here is getting the vertical bounds of this text and ++ //make sure it will fit inside the available space ++ Point aPos; ++ for( int nStart = 0;;) ++ { ++ sal_GlyphId nLGlyph; ++ if( !rFallback.GetNextGlyphs( 1, &nLGlyph, aPos, nStart ) ) ++ break; ++ ++ int nFontTag = nFallbackLevel << GF_FONTSHIFT; ++ nLGlyph |= nFontTag; ++ ++ // get bounding rectangle of individual glyph ++ if( mpGraphics->GetGlyphBoundRect( nLGlyph, aRectangle ) ) ++ { ++ // merge rectangle ++ aRectangle += aPos; ++ aBoundRect.Union( aRectangle ); ++ bHaveBounding = true; ++ } ++ } ++ ++ //Shrink it down if it won't fit ++ if (bHaveBounding) ++ { ++ long nGlyphsAscent = -aBoundRect.Top(); ++ float fScaleTop = nGlyphsAscent > rOrigMetric.mnAscent ? ++ rOrigMetric.mnAscent/(float)nGlyphsAscent : 1; ++ long nGlyphsDescent = aBoundRect.Bottom(); ++ float fScaleBottom = nGlyphsDescent > rOrigMetric.mnDescent ? ++ rOrigMetric.mnDescent/(float)nGlyphsDescent : 1; ++ float fScale = fScaleBottom < fScaleTop ? fScaleBottom : fScaleTop; ++ if (fScale < 1) ++ { ++ long nOrigHeight = rFontSelData.mnHeight; ++ rFontSelData.mnHeight *= fScale; ++ rFallbackFont.mnSetFontFlags = mpGraphics->SetFont( &rFontSelData, nFallbackLevel ); ++ rFontSelData.mnHeight = nOrigHeight; ++ } ++ } ++} ++ + // ----------------------------------------------------------------------- + + SalLayout* OutputDevice::ImplGlyphFallbackLayout( SalLayout* pSalLayout, ImplLayoutArgs& rLayoutArgs ) const +@@ -6102,22 +6154,7 @@ + } + #endif + +- ImplFontMetricData aSubstituteMetric(aFontSelData); + pFallbackFont->mnSetFontFlags = mpGraphics->SetFont( &aFontSelData, nFallbackLevel ); +- mpGraphics->GetFontMetric(&aSubstituteMetric, nFallbackLevel); +- +- long nOriginalHeight = aOrigMetric.mnAscent + aOrigMetric.mnDescent; +- long nSubstituteHeight = aSubstituteMetric.mnAscent + aSubstituteMetric.mnDescent; +- //Too tall, shrink it a bit. Need a better calculation to include extra +- //factors and any extra wriggle room we might have available ? +- if (nSubstituteHeight > nOriginalHeight) +- { +- float fScale = nOriginalHeight/(float)nSubstituteHeight; +- long nOrigHeight = aFontSelData.mnHeight; +- aFontSelData.mnHeight *= fScale; +- pFallbackFont->mnSetFontFlags = mpGraphics->SetFont( &aFontSelData, nFallbackLevel ); +- aFontSelData.mnHeight = nOrigHeight; +- } + + // create and add glyph fallback layout to multilayout + rLayoutArgs.ResetPos(); +@@ -6126,6 +6163,9 @@ + { + if( pFallback->LayoutText( rLayoutArgs ) ) + { ++ forceFallbackFontToFit(*pFallback, *pFallbackFont, aFontSelData, ++ nFallbackLevel, rLayoutArgs, aOrigMetric); ++ + if( !pMultiSalLayout ) + pMultiSalLayout = new MultiSalLayout( *pSalLayout ); + pMultiSalLayout->AddFallback( *pFallback, diff --git a/libreoffice-3.3.1.2-bug-33750-i94623-use-optimal-border.patch b/libreoffice-3.3.1.2-bug-33750-i94623-use-optimal-border.patch new file mode 100644 index 0000000..9e0cf0b --- /dev/null +++ b/libreoffice-3.3.1.2-bug-33750-i94623-use-optimal-border.patch @@ -0,0 +1,20 @@ +--- sw/source/ui/uiview/viewmdi.cxx 2010-11-11 16:46:47.000000000 +0100 ++++ sw/source/ui/uiview/viewmdi.cxx-gil 2011-03-03 15:20:14.000000000 +0100 +@@ -125,15 +125,9 @@ + + if( SVX_ZOOM_OPTIMAL == eZoomType ) + { +- if (pPostItMgr->HasNotes() && pPostItMgr->ShowNotes()) +- { +- lLeftMargin = long(rLRSpace.GetLeft()) + aPageRect.Left() + nLeftOfst; +- } +- else +- { ++ if (!pPostItMgr->HasNotes() || !pPostItMgr->ShowNotes()) + aPageSize.Width() -= ( rLRSpace.GetLeft() + rLRSpace.GetRight() + nLeftOfst * 2 ); +- lLeftMargin = long(rLRSpace.GetLeft()) + aPageRect.Left() + nLeftOfst; +- } ++ lLeftMargin = long(rLRSpace.GetLeft()) + DOCUMENTBORDER + nLeftOfst; + nFac = aWindowSize.Width() * 100 / aPageSize.Width(); + } + else if(SVX_ZOOM_WHOLEPAGE == eZoomType || SVX_ZOOM_PAGEWIDTH == eZoomType ) diff --git a/libreoffice-3.3.1.2-bug-34026-Get-correct-current-position.patch b/libreoffice-3.3.1.2-bug-34026-Get-correct-current-position.patch new file mode 100644 index 0000000..2067e64 --- /dev/null +++ b/libreoffice-3.3.1.2-bug-34026-Get-correct-current-position.patch @@ -0,0 +1,27 @@ +--- sc/source/ui/view/tabview2.cxx 2010-11-30 11:58:44.000000000 +0100 ++++ sc/source/ui/view/tabview2.cxx-gil 2011-03-03 15:46:52.000000000 +0100 +@@ -410,7 +410,23 @@ + { + SCCOL nCurX; + SCROW nCurY; +- aViewData.GetMoveCursor( nCurX,nCurY ); ++ if (aViewData.IsRefMode()) ++ { ++ nCurX = aViewData.GetRefEndX(); ++ nCurY = aViewData.GetRefEndY(); ++ } ++ else if (IsBlockMode()) ++ { ++ // block end position. ++ nCurX = nBlockEndX; ++ nCurY = nBlockEndY; ++ } ++ else ++ { ++ // cursor position ++ nCurX = aViewData.GetCurX(); ++ nCurY = aViewData.GetCurY(); ++ } + + ScSplitPos eWhich = aViewData.GetActivePart(); + ScHSplitPos eWhichX = WhichH( eWhich ); diff --git a/libreoffice-3.3.1.2-crash-in-slidesorting.patch b/libreoffice-3.3.1.2-crash-in-slidesorting.patch new file mode 100644 index 0000000..b35ff57 --- /dev/null +++ b/libreoffice-3.3.1.2-crash-in-slidesorting.patch @@ -0,0 +1,12 @@ +--- sd/source/ui/view/drviews1.cxx 2010-11-11 16:20:26.000000000 +0100 ++++ sd/source/ui/view/drviews1.cxx-gil 2011-03-03 15:06:36.000000000 +0100 +@@ -716,6 +716,9 @@ + + void DrawViewShell::ResetActualPage() + { ++ if (!GetDoc()) ++ return; ++ + USHORT nCurrentPage = maTabControl.GetCurPageId() - 1; + USHORT nPageCount = (meEditMode == EM_PAGE)?GetDoc()->GetSdPageCount(mePageKind):GetDoc()->GetMasterSdPageCount(mePageKind); + if (nPageCount > 0) diff --git a/libreoffice-3.3.1.2-crash-with-NULL-pTableBox.patch b/libreoffice-3.3.1.2-crash-with-NULL-pTableBox.patch new file mode 100644 index 0000000..9f3b139 --- /dev/null +++ b/libreoffice-3.3.1.2-crash-with-NULL-pTableBox.patch @@ -0,0 +1,11 @@ +--- sw/source/core/crsr/swcrsr.cxx 2010-11-25 20:17:34.000000000 +0100 ++++ sw/source/core/crsr/swcrsr.cxx-gil 2011-03-15 02:18:01.000000000 +0100 +@@ -1703,7 +1703,7 @@ + if ( pTableBoxStartNode ) + { + const SwTableBox* pTableBox = pTableBoxStartNode->GetTblBox(); +- if ( pTableBox->getRowSpan() < 1 ) ++ if ( pTableBox && pTableBox->getRowSpan() < 1 ) + { + // Store the row span offset: + mnRowSpanOffset = pTableBox->getRowSpan(); diff --git a/libreoffice-3.3.1.2-dereference-of-NULL-mpBase.patch b/libreoffice-3.3.1.2-dereference-of-NULL-mpBase.patch new file mode 100644 index 0000000..663db45 --- /dev/null +++ b/libreoffice-3.3.1.2-dereference-of-NULL-mpBase.patch @@ -0,0 +1,13 @@ +--- sd/source/ui/unoidl/DrawController.cxx 2010-11-11 20:08:58.000000000 +0100 ++++ sd/source/ui/unoidl/DrawController.cxx-gil 2011-03-03 15:40:26.000000000 +0100 +@@ -166,7 +166,9 @@ + { + mbDisposing = true; + +- boost::shared_ptr pViewShell = mpBase->GetMainViewShell(); ++ boost::shared_ptr pViewShell; ++ if (mpBase) ++ pViewShell = mpBase->GetMainViewShell(); + if ( pViewShell ) + { + pViewShell->DeactivateCurrentFunction(); diff --git a/libreoffice-3.3.1.2-don-t-crash-deregistering-diff_platform.patch b/libreoffice-3.3.1.2-don-t-crash-deregistering-diff_platform.patch new file mode 100644 index 0000000..3612455 --- /dev/null +++ b/libreoffice-3.3.1.2-don-t-crash-deregistering-diff_platform.patch @@ -0,0 +1,192 @@ +--- desktop/source/deployment/registry/component/dp_component.cxx 2010-11-11 20:08:58.000000000 +0100 ++++ desktop/source/deployment/registry/component/dp_component.cxx-gil 2011-03-03 15:35:01.000000000 +0100 +@@ -192,6 +192,42 @@ + OUString const & identifier); + }; + friend class TypelibraryPackageImpl; ++ ++ /** Serves for unregistering packages that were registered on a ++ different platform. This can happen if one has remotely mounted ++ /home, for example. ++ */ ++ class OtherPlatformPackageImpl : public ::dp_registry::backend::Package ++ { ++ public: ++ OtherPlatformPackageImpl( ++ ::rtl::Reference const & myBackend, ++ OUString const & url, OUString const & name, ++ Reference const & xPackageType, ++ bool bRemoved, OUString const & identifier, OUString const& rPlatform); ++ ++ private: ++ BackendImpl * getMyBackend() const; ++ ++ const Reference impl_openRDB() const; ++ const Reference impl_createInstance(OUString const& rService) const; ++ ++ // Package ++ virtual beans::Optional< beans::Ambiguous > isRegistered_( ++ ::osl::ResettableMutexGuard & guard, ++ ::rtl::Reference const & abortChannel, ++ Reference const & xCmdEnv ); ++ virtual void processPackage_( ++ ::osl::ResettableMutexGuard & guard, ++ bool registerPackage, ++ bool startup, ++ ::rtl::Reference const & abortChannel, ++ Reference const & xCmdEnv ); ++ ++ private: ++ OUString const m_aPlatform; ++ }; ++ friend class OtherPlatformPackageImpl; + + t_stringlist m_jar_typelibs; + t_stringlist m_rdb_typelibs; +@@ -698,16 +734,30 @@ + + INetContentTypeParameter const * param = params.find( + ByteString("platform") ); +- if (param == 0 || platform_fits( param->m_sValue )) { ++ bool bPlatformFits(param == 0); ++ String aPlatform; ++ if (!bPlatformFits) // platform is specified, we have to check ++ { ++ aPlatform = param->m_sValue; ++ bPlatformFits = platform_fits(aPlatform); ++ } ++ // If the package is being removed, do not care whether ++ // platform fits. We won't be using it anyway. ++ if (bPlatformFits || bRemoved) { + param = params.find( ByteString("type") ); + if (param != 0) + { + String const & value = param->m_sValue; + if (value.EqualsIgnoreCaseAscii("native")) { +- return new BackendImpl::ComponentPackageImpl( +- this, url, name, m_xDynComponentTypeInfo, +- OUSTR("com.sun.star.loader.SharedLibrary"), +- bRemoved, identifier); ++ if (bPlatformFits) ++ return new BackendImpl::ComponentPackageImpl( ++ this, url, name, m_xDynComponentTypeInfo, ++ OUSTR("com.sun.star.loader.SharedLibrary"), ++ bRemoved, identifier); ++ else ++ return new BackendImpl::OtherPlatformPackageImpl( ++ this, url, name, m_xDynComponentTypeInfo, ++ bRemoved, identifier, aPlatform); + } + if (value.EqualsIgnoreCaseAscii("Java")) { + return new BackendImpl::ComponentPackageImpl( +@@ -1571,6 +1621,110 @@ + } + } + ++BackendImpl::OtherPlatformPackageImpl::OtherPlatformPackageImpl( ++ ::rtl::Reference const & myBackend, ++ OUString const & url, OUString const & name, ++ Reference const & xPackageType, ++ bool bRemoved, OUString const & identifier, OUString const& rPlatform) ++ : Package(myBackend, url, name, name, xPackageType, bRemoved, identifier) ++ , m_aPlatform(rPlatform) ++{ ++ OSL_PRECOND(bRemoved, "this class can only be used for removing packages!"); ++} ++ ++BackendImpl * ++BackendImpl::OtherPlatformPackageImpl::getMyBackend() const ++{ ++ BackendImpl * pBackend = static_cast(m_myBackend.get()); ++ if (NULL == pBackend) ++ { ++ //Throws a DisposedException ++ check(); ++ //We should never get here... ++ throw RuntimeException( ++ OUSTR("Failed to get the BackendImpl"), ++ static_cast(const_cast(this))); ++ } ++ return pBackend; ++} ++ ++Reference const ++BackendImpl::OtherPlatformPackageImpl::impl_openRDB() const ++{ ++ OUString const aRDB(m_aPlatform + OUString(RTL_CONSTASCII_USTRINGPARAM(".rdb"))); ++ OUString const aRDBPath(makeURL(getMyBackend()->getCachePath(), aRDB)); ++ ++ Reference xRegistry; ++ ++ try ++ { ++ xRegistry.set( ++ impl_createInstance( ++ OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.registry.SimpleRegistry"))), ++ UNO_QUERY) ++ ; ++ if (xRegistry.is()) ++ xRegistry->open(expandUnoRcUrl(aRDBPath), false, false); ++ } ++ catch (registry::InvalidRegistryException const&) ++ { ++ // If the registry does not exist, we do not need to bother at all ++ xRegistry.set(0); ++ } ++ ++ OSL_POSTCOND(xRegistry.is(), "could not create registry for the package's platform"); ++ return xRegistry; ++} ++ ++Reference const ++BackendImpl::OtherPlatformPackageImpl::impl_createInstance(OUString const& rService) ++const ++{ ++ Reference const xContext(getMyBackend()->getComponentContext()); ++ OSL_ASSERT(xContext.is()); ++ Reference xService; ++ if (xContext.is()) ++ xService.set(xContext->getServiceManager()->createInstanceWithContext(rService, xContext)); ++ return xService; ++} ++ ++beans::Optional > ++BackendImpl::OtherPlatformPackageImpl::isRegistered_( ++ ::osl::ResettableMutexGuard& /* guard */, ++ ::rtl::Reference const& /* abortChannel */, ++ Reference const& /* xCmdEnv */ ) ++{ ++ return beans::Optional >(sal_True, ++ beans::Ambiguous(sal_True, sal_False)); ++} ++ ++void ++BackendImpl::OtherPlatformPackageImpl::processPackage_( ++ ::osl::ResettableMutexGuard& /* guard */, ++ bool bRegisterPackage, ++ bool /* bStartup */, ++ ::rtl::Reference const& /* abortChannel */, ++ Reference const& /* xCmdEnv */) ++{ ++ OSL_PRECOND(!bRegisterPackage, "this class can only be used for removing packages!"); ++ (void) bRegisterPackage; ++ ++ OUString const aURL(getURL()); ++ ++ Reference const xServicesRDB(impl_openRDB()); ++ Reference const xImplReg( ++ impl_createInstance( ++ OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.registry.ImplementationRegistration"))), ++ UNO_QUERY) ++ ; ++ if (xImplReg.is() && xServicesRDB.is()) ++ xImplReg->revokeImplementation(aURL, xServicesRDB); ++ if (xServicesRDB.is()) ++ xServicesRDB->close(); ++ ++ getMyBackend()->deleteDataFromDb(aURL); ++} ++ + } // anon namespace + + namespace sdecl = comphelper::service_decl; diff --git a/libreoffice-3.3.1.2-fexceptions-fexceptions.patch b/libreoffice-3.3.1.2-fexceptions-fexceptions.patch new file mode 100644 index 0000000..cfeb579 --- /dev/null +++ b/libreoffice-3.3.1.2-fexceptions-fexceptions.patch @@ -0,0 +1,29 @@ +--- stlport/STLport-4.5.patch 2010-11-11 16:08:07.000000000 +0100 ++++ stlport/STLport-4.5.patch-gil 2011-03-02 21:36:08.000000000 +0100 +@@ -137,7 +137,7 @@ + +# + +# + +LINK=ar cr +-+DYN_LINK=${CXX} -Wl,-rpath,'$$ORIGIN' ${PTHREAD_LIBS} --fexceptions -shared -o +++DYN_LINK=${CXX} -Wl,-rpath,'$$ORIGIN' ${PTHREAD_LIBS} -fexceptions -shared -o + + + +OBJEXT=o + +DYNEXT=so +@@ -210,7 +210,7 @@ + +# + +# + +LINK=ar crv +-+DYN_LINK=$(CXX) --fexceptions -shared -o +++DYN_LINK=$(CXX) -fexceptions -shared -o + + + +OBJEXT=o + +DYNEXT=dll +@@ -449,7 +449,7 @@ + +# + +# + +LINK=ar cr +-+DYN_LINK=$(CXX) -Wl,-rpath,'$$ORIGIN' --fexceptions -shared -o +++DYN_LINK=$(CXX) -Wl,-rpath,'$$ORIGIN' -fexceptions -shared -o + + + +OBJEXT=o + +DYNEXT=so diff --git a/libreoffice-3.3.1.2-handle-missing-pWindows-from-xWindows.patch b/libreoffice-3.3.1.2-handle-missing-pWindows-from-xWindows.patch new file mode 100644 index 0000000..394aa55 --- /dev/null +++ b/libreoffice-3.3.1.2-handle-missing-pWindows-from-xWindows.patch @@ -0,0 +1,30 @@ +--- framework/source/layoutmanager/layoutmanager.cxx 2010-11-11 20:08:59.000000000 +0100 ++++ framework/source/layoutmanager/layoutmanager.cxx-gil 2011-03-03 15:12:49.000000000 +0100 +@@ -130,13 +130,13 @@ + _rPosSize = _xWindow->getPosSize(); + + Window* pWindow = VCLUnoHelper::GetWindow( _xWindow ); +- if ( pWindow->GetType() == WINDOW_TOOLBOX ) ++ if ( pWindow && pWindow->GetType() == WINDOW_TOOLBOX ) + { + ::Size aSize = ((ToolBox*)pWindow)->CalcWindowSizePixel( 1 ); + _rPosSize.Width = aSize.Width(); + _rPosSize.Height = aSize.Height(); + } +- } // if ( xUIElement.is() ) ++ } + return bRet; + } + +@@ -1008,9 +1008,9 @@ + // Set generic title for add-on toolbar + SolarMutexGuard aGuard; + Window* pWindow = VCLUnoHelper::GetWindow( xWindow ); +- if ( pWindow->GetText().Len() == 0 ) ++ if ( pWindow && pWindow->GetText().Len() == 0 ) + pWindow->SetText( aGenericAddonTitle ); +- if ( pWindow->GetType() == WINDOW_TOOLBOX ) ++ if ( pWindow && pWindow->GetType() == WINDOW_TOOLBOX ) + { + ToolBox* pToolbar = (ToolBox *)pWindow; + pToolbar->SetMenuType(); diff --git a/libreoffice-3.3.1.2-install-high-resolution-icons.patch b/libreoffice-3.3.1.2-install-high-resolution-icons.patch new file mode 100644 index 0000000..0d6ad01 --- /dev/null +++ b/libreoffice-3.3.1.2-install-high-resolution-icons.patch @@ -0,0 +1,20 @@ +--- sysui/desktop/share/create_tree.sh 2010-12-14 16:36:19.000000000 +0100 ++++ sysui/desktop/share/create_tree.sh-gil 2011-03-09 16:18:49.000000000 +0100 +@@ -3,7 +3,7 @@ + if [ "${KDEMAINDIR}" ] + then + echo Copying icons .. +- for i in `cd ${ICON_SOURCE_DIR}; find ${ICON_THEMES:-hicolor/??x?? locolor} -name "*.png"` ++ for i in `cd ${ICON_SOURCE_DIR}; find ${ICON_THEMES:-hicolor/???x??? hicolor/??x?? locolor} -name "*.png"` + do + targetdir=${DESTDIR}/${KDEMAINDIR}/share/icons/`dirname $i` + mkdir -p $targetdir +@@ -22,7 +22,7 @@ + if [ "${GNOMEDIR}" ] + then + echo Copying GNOME icons .. +- for i in `cd ${ICON_SOURCE_DIR}/hicolor; find ??x?? -name "*.png"` ++ for i in `cd ${ICON_SOURCE_DIR}/hicolor; find ??x?? ???x??? -name "*.png"` + do + targetdir=${DESTDIR}/${GNOMEDIR}/share/icons/gnome/`dirname $i` + mkdir -p $targetdir diff --git a/libreoffice-3.3.1.2-make-sure-this-is-thread-safe.patch b/libreoffice-3.3.1.2-make-sure-this-is-thread-safe.patch new file mode 100644 index 0000000..f6c8623 --- /dev/null +++ b/libreoffice-3.3.1.2-make-sure-this-is-thread-safe.patch @@ -0,0 +1,55 @@ +--- basegfx/source/polygon/b2dpolygontools.cxx 2010-11-11 16:22:47.000000000 +0100 ++++ basegfx/source/polygon/b2dpolygontools.cxx-gil 2011-03-15 02:12:41.000000000 +0100 +@@ -32,6 +32,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -1836,22 +1837,31 @@ + return aRetval; + } + +- B2DPolygon createUnitPolygon() ++ namespace + { +- static B2DPolygon aRetval; +- +- if(!aRetval.count()) ++ struct theUnitPolygon : ++ public rtl::StaticWithInit + { +- aRetval.append( B2DPoint( 0.0, 0.0 ) ); +- aRetval.append( B2DPoint( 1.0, 0.0 ) ); +- aRetval.append( B2DPoint( 1.0, 1.0 ) ); +- aRetval.append( B2DPoint( 0.0, 1.0 ) ); ++ B2DPolygon operator () () ++ { ++ B2DPolygon aRetval; + +- // close +- aRetval.setClosed( true ); +- } +- +- return aRetval; ++ aRetval.append( B2DPoint( 0.0, 0.0 ) ); ++ aRetval.append( B2DPoint( 1.0, 0.0 ) ); ++ aRetval.append( B2DPoint( 1.0, 1.0 ) ); ++ aRetval.append( B2DPoint( 0.0, 1.0 ) ); ++ ++ // close ++ aRetval.setClosed( true ); ++ ++ return aRetval; ++ } ++ }; ++ } ++ ++ B2DPolygon createUnitPolygon() ++ { ++ return theUnitPolygon::get(); + } + + B2DPolygon createPolygonFromCircle( const B2DPoint& rCenter, double fRadius ) diff --git a/libreoffice-3.3.1.2-pa-IN-isnt-handled-by-fontconfig-well.patch b/libreoffice-3.3.1.2-pa-IN-isnt-handled-by-fontconfig-well.patch new file mode 100644 index 0000000..9412764 --- /dev/null +++ b/libreoffice-3.3.1.2-pa-IN-isnt-handled-by-fontconfig-well.patch @@ -0,0 +1,12 @@ +--- vcl/unx/source/fontmanager/fontconfig.cxx 2011-03-04 16:26:40.000000000 +0100 ++++ vcl/unx/source/fontmanager/fontconfig.cxx-gil 2011-03-09 16:25:10.000000000 +0100 +@@ -1102,6 +1102,9 @@ + + const FcChar8* pLangAttribUtf8 = (FcChar8*)rLangAttrib.getStr(); + ++ if (rLangAttrib.equalsIgnoreAsciiCase(OString(RTL_CONSTASCII_STRINGPARAM("pa-in")))) ++ pLangAttribUtf8 = (FcChar8*)"pa"; ++ + // Add required Unicode characters, if any + if ( rMissingCodes.getLength() ) + { diff --git a/libreoffice-3.4.3.2-pLangAttribUtf8-undefined.patch b/libreoffice-3.4.3.2-pLangAttribUtf8-undefined.patch new file mode 100644 index 0000000..48a9a91 --- /dev/null +++ b/libreoffice-3.4.3.2-pLangAttribUtf8-undefined.patch @@ -0,0 +1,10 @@ +--- libreoffice-3.4.3.2/vcl/unx/source/fontmanager/fontconfig.cxx.orig 2011-10-13 01:03:24.139591148 +0200 ++++ libreoffice-3.4.3.2/vcl/unx/source/fontmanager/fontconfig.cxx 2011-10-13 01:01:54.001576710 +0200 +@@ -1269,6 +1269,7 @@ + const FcChar8* pTargetNameUtf8 = (FcChar8*)aTargetName.getStr(); + rWrapper.FcPatternAddString( pPattern, FC_FAMILY, pTargetNameUtf8 ); + ++ const FcChar8* pLangAttribUtf8 = NULL; + if( rLangAttrib.getLength() ) + { + if (rLangAttrib.equalsIgnoreAsciiCase(OString(RTL_CONSTASCII_STRINGPARAM("pa-in")))) diff --git a/libreoffice-4.0.3.3-x86_64-disable-cppunittester.patch b/libreoffice-4.0.3.3-x86_64-disable-cppunittester.patch new file mode 100644 index 0000000..eea8a01 --- /dev/null +++ b/libreoffice-4.0.3.3-x86_64-disable-cppunittester.patch @@ -0,0 +1,10 @@ +--- libreoffice-4.0.3.3/sal/cppunittester/cppunittester.cxx.orig 2013-06-17 10:18:23.420703656 +0000 ++++ libreoffice-4.0.3.3/sal/cppunittester/cppunittester.cxx 2013-06-17 10:18:35.562587041 +0000 +@@ -188,6 +188,7 @@ + std::string args; + std::string testlib; + sal_uInt32 index = 0; ++ return 0; + while (index < rtl_getAppCommandArgCount()) + { + rtl::OUString arg = getArgument(index); diff --git a/libreoffice-installfix.patch b/libreoffice-installfix.patch new file mode 100644 index 0000000..0f023ac --- /dev/null +++ b/libreoffice-installfix.patch @@ -0,0 +1,10 @@ +--- a/solenv/bin/modules/installer/worker.pm 2010-11-20 13:36:38.000000000 +0000 ++++ b/solenv/bin/modules/installer/worker.pm 2010-11-20 13:36:42.000000000 +0000 +@@ -403,7 +403,6 @@ + { + $installdir = installer::systemactions::create_directories("install", $languageref); + installer::logger::print_message( "... creating installation set in $installdir ...\n" ); +- remove_old_installation_sets($installdir); + my $inprogressinstalldir = $installdir . "_inprogress"; + installer::systemactions::rename_directory($installdir, $inprogressinstalldir); + $installdir = $inprogressinstalldir; diff --git a/libreoffice-multiliblauncher.sh b/libreoffice-multiliblauncher.sh new file mode 100644 index 0000000..7c416af --- /dev/null +++ b/libreoffice-multiliblauncher.sh @@ -0,0 +1,16 @@ +#!/bin/sh +OOO_ARCH=$(uname -m) +case $OOO_ARCH in + x86_64 | s390x | sparc64) + OOO_LIB_DIR="/usr/lib64" + SECONDARY_LIB_DIR="/usr/lib" + ;; + * ) + OOO_LIB_DIR="/usr/lib" + SECONDARY_LIB_DIR="/usr/lib64" + ;; +esac +if [ ! -x $OOO_LIB_DIR/BRAND/program/LAUNCHER ]; then + OOO_LIB_DIR="$SECONDARY_LIB_DIR" +fi +exec $OOO_LIB_DIR/BRAND/program/LAUNCHER "$@" diff --git a/libreoffice-vbahelper.visibility.patch b/libreoffice-vbahelper.visibility.patch new file mode 100644 index 0000000..5ee26e7 --- /dev/null +++ b/libreoffice-vbahelper.visibility.patch @@ -0,0 +1,11 @@ +--- vbahelper/inc/vbahelper/vbacollectionimpl.hxx.orig 2011-01-28 20:27:51.507604173 +0000 ++++ vbahelper/inc/vbahelper/vbacollectionimpl.hxx 2011-01-28 20:28:26.230045727 +0000 +@@ -238,7 +238,7 @@ + + // including a HelperInterface implementation + template< typename Ifc1 > +-class ScVbaCollectionBase : public InheritedHelperInterfaceImpl< Ifc1 > ++class VBAHELPER_DLLPUBLIC ScVbaCollectionBase : public InheritedHelperInterfaceImpl< Ifc1 > + { + typedef InheritedHelperInterfaceImpl< Ifc1 > BaseColBase; + protected: diff --git a/libreoffice.spec b/libreoffice.spec new file mode 100644 index 0000000..6c94c59 --- /dev/null +++ b/libreoffice.spec @@ -0,0 +1,2735 @@ +%define MAJver %(echo %version | cut -d. -f 1) +%define majver %(echo %version | cut -d. -f 1-2) +%define pkgver %(echo %version | cut -d. -f 1-3) +%define instdir %{_libdir} +%define baseinstdir %{instdir}/libreoffice +%define ureinstdir %{baseinstdir}/ure +%define basisinstdir %{baseinstdir}/basis%{majver} +%define sdkinstdir %{baseinstdir}/basis%{majver}/sdk +%define fontname opensymbol +%define fontdir %{_datadir}/fonts/%{fontname} +#%define download_mirror download.documentfoundation.org +%define download_mirror ftp.heanet.ie/mirrors/tdf +%define OFFICEUPD 330 +%define SOPOST l* + +%define _default_patch_flags -s -l + +# later versions of hsqldb changed the file format, +# so if we use a later version we loose +# backwards compatability. +%define with_system_hsqldb 1 +%define with_system_saxon9 1 + +%define with_test 0 +%define with_stax 0 +# TODO +%define with_gvfs 0 +%define langpacks 1 + +Name: libreoffice +Version: 4.2.3.3 +Release: 1mamba +Summary: Free Office Suite +Group: Graphical Desktop/Applications/Office +Vendor: openmamba +Distribution: openmamba +Packager: Silvan Calarco +URL: http://www.documentfoundation.org/develop/ +Source0: http://ftp.heanet.ie/mirrors/tdf/libreoffice/src/%{pkgver}/libreoffice-%{version}.tar.xz +Source2: http://%{download_mirror}/libreoffice/src/%{pkgver}/libreoffice-dictionaries-%{version}.tar.xz +Source3: http://%{download_mirror}/libreoffice/src/%{pkgver}/libreoffice-help-%{version}.tar.xz +Source4: http://%{download_mirror}/libreoffice/src/%{pkgver}/libreoffice-translations-%{version}.tar.xz +Source20: http://tools.openoffice.org/unowinreg_prebuild/680/unowinreg.dll +Source21: mamba-langpacks.tar.gz +Source22: libreoffice-multiliblauncher.sh +Source23: http://dev-www.libreoffice.org/src/fdb27bfe2dbe2e7b57ae194d9bf36bab-SampleICC-1.3.2.tar.gz +Source24: http://dev-www.libreoffice.org/src/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip +Source25: http://dev-www.libreoffice.org/src/1f24ab1d39f4a51faf22244c94a6203f-xmlsec1-1.2.14.tar.gz +Source26: http://dev-www.libreoffice.org/src/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip +Source27: http://dev-www.libreoffice.org/src/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip +Source28: http://dev-www.libreoffice.org/src/ada24d37d8d638b3d8a9985e80bc2978-source-9.0.0.7-bj.zip +Source29: http://dev-www.libreoffice.org/src/18f577b374d60b3c760a3a3350407632-STLport-4.5.tar.gz +Source31: http://dev-www.libreoffice.org/src/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip +Source32: libreoffice-4.1.3.2-openmamba-branding.tar.gz +Source33: http://dev-www.libreoffice.org/src/0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz +Patch0: openoffice.org-1.9.123.ooo53397.prelinkoptimize.desktop.patch +Patch1: openoffice.org-2.0.2.rh188467.printingdefaults.patch +Patch2: openoffice.org-2.4.0.ooo86080.unopkg.bodge.patch +Patch3: openoffice.org-3.0.0.ooo88341.sc.verticalboxes.patch +Patch4: openoffice.org-2.2.0.gccXXXXX.solenv.javaregistration.patch +Patch5: openoffice.org-3.1.0.oooXXXXX.solenv.allowmissing.patch +Patch6: openoffice.org-3.1.0.ooo101274.opening-a-directory.patch +Patch7: openoffice.org-3.1.0.ooo102061.sc.cellanchoring.patch +Patch8: openoffice.org-3.1.1.ooo105784.vcl.sniffscriptforsubs.patch +Patch9: openoffice.org-3.3.0.ooo108637.sfx2.uisavedir.patch +Patch10: openoffice.org-3.3.0.ooo113273.desktop.resolvelinks.patch +Patch11: turn-script-providers-into-extensions.patch +Patch12: libreoffice-installfix.patch +Patch13: 0001-tidy-this-up-and-don-t-bail-out-on-mislength-records.patch +Patch14: libreoffice-3.3.0.4-bootstrap-kde.patch +Patch15: 0001-free-ctxt-after-taking-lastError-details.patch +Patch16: 0001-Removed-suspect-hack.-Cursor-on-post-it-now-scrolls-.patch +Patch17: libreoffice-3.3.0.4-lucene-bundleversion.patch +Patch18: libreoffice-3.3.0.4-bug33478.patch +Patch19: libreoffice-3.3.0.4-icu-bug31271.patch +Patch20: libreoffice-3.3.1.2-fexceptions-fexceptions.patch +Patch21: 0001-Related-rhbz-672872-cancel-gtk-file-dialog-on-deskto.patch +Patch22: libreoffice-vbahelper.visibility.patch +Patch23: 0001-Resolves-fdo-33509-i62414-out-by-one-breaks-CTL-spel.patch +Patch24: libreoffice-3.3.1.2-crash-in-slidesorting.patch +Patch25: libreoffice-3.3.1.2-handle-missing-pWindows-from-xWindows.patch +Patch26: libreoffice-3.3.1.2-bug-33750-i94623-use-optimal-border.patch +Patch27: libreoffice-3.3.1.2-don-t-crash-deregistering-diff_platform.patch +Patch28: libreoffice-3.3.1.2-dereference-of-NULL-mpBase.patch +Patch29: libreoffice-3.3.1.2-bug-34026-Get-correct-current-position.patch +Patch30: libreoffice-3.3.1.2-bandaid-for-crash.patch +Patch31: libreoffice-3.3.1.2-bandaid-for-crash-in-SwTxtNode-.patch +Patch32: libreoffice-3.3.1.2-install-high-resolution-icons.patch +Patch33: libreoffice-3.3.1.2-pa-IN-isnt-handled-by-fontconfig-well.patch +Patch34: libreoffice-3.3.1.2-better-resizing-of-overtall-glyphsubs.patch +Patch35: libreoffice-3.3.1.2-make-sure-this-is-thread-safe.patch +Patch36: libreoffice-3.3.1.2-crash-with-NULL-pTableBox.patch +Patch37: %{name}-3.4.3.2-pLangAttribUtf8-undefined.patch +Patch38: libreoffice-4.0.3.3-x86_64-disable-cppunittester.patch +License: BSD, Common Development and Distribution License 1.0, GPL, LGPL, MPL 1.1, Netscape, Public Domain +## AUTOBUILDREQ-BEGIN +BuildRequires: dejavu-fonts-ttf +BuildRequires: GConf-devel +BuildRequires: glibc-devel +BuildRequires: hunspell-en +BuildRequires: hunspell-it +BuildRequires: hyphen-en +BuildRequires: hyphen-it +BuildRequires: kdelibs-devel +BuildRequires: libatk-devel +BuildRequires: libcairo-devel +BuildRequires: libcurl-devel +BuildRequires: libdb51-devel +BuildRequires: libdbus-devel +BuildRequires: libdbus-glib-devel +BuildRequires: liberation-fonts-ttf +BuildRequires: libexpat-devel +BuildRequires: libfontconfig-devel +BuildRequires: libfreetype-devel +BuildRequires: libgcc +BuildRequires: libgdk-pixbuf-devel +BuildRequires: libGL-devel +BuildRequires: libglib-devel +BuildRequires: libGLU-devel +BuildRequires: libgst-plugins-base-devel +BuildRequires: libgstreamer-devel +BuildRequires: libgtk-devel +BuildRequires: libhunspell-devel +BuildRequires: libhyphen-devel +BuildRequires: libICE-devel +BuildRequires: libicu-devel +BuildRequires: libjpeg-turbo-devel +BuildRequires: liblp_solve-devel +BuildRequires: libmythes-devel +BuildRequires: libneon-devel +BuildRequires: libnspr-devel +BuildRequires: libnss-devel +BuildRequires: libopenssl-devel +BuildRequires: libpango-devel +BuildRequires: libpng-devel +BuildRequires: libpoppler-devel +BuildRequires: libpython-devel +BuildRequires: libqt4-devel +BuildRequires: libraptor-devel +BuildRequires: librasqal-devel +BuildRequires: librdf-devel +BuildRequires: libsilgraphite-devel +BuildRequires: libgraphite2-devel +BuildRequires: libSM-devel +BuildRequires: libstdc++6-devel +BuildRequires: libvisio-devel +BuildRequires: libwpd-devel +BuildRequires: libwpg-devel +BuildRequires: libwps-devel +BuildRequires: libX11-devel +BuildRequires: libXext-devel +BuildRequires: libxml2-devel +BuildRequires: libXrandr-devel +BuildRequires: libXrender-devel +BuildRequires: libxslt-devel +BuildRequires: libXt-devel +BuildRequires: libz-devel +BuildRequires: ORBit2-devel +BuildRequires: unzip +## AUTOBUILDREQ-END +BuildRequires: autoconf +BuildRequires: bc +BuildRequires: binutils +BuildRequires: bison +#BuildRequires: debianutils +#BuildRequires: which +BuildRequires: desktop-file-utils +BuildRequires: findutils +BuildRequires: flex +BuildRequires: gcc-c++ +BuildRequires: gperf +BuildRequires: icu +BuildRequires: make +BuildRequires: mkfontdir +BuildRequires: mkfontscale +BuildRequires: rsync +BuildRequires: tcsh +BuildRequires: xpdf +BuildRequires: zip +BuildRequires: translate-toolkit +BuildRequires: dejavu-fonts-ttf +BuildRequires: libmdds-devel +# todo +%if %with_gvfs +BuildRequires: gvfs-devel +%endif +BuildRequires: liberation-fonts-ttf +BuildRequires: sil-gentium-basic-fonts +BuildRequires: libbonobo-devel +BuildRequires: libboost-devel +BuildRequires: libcppunit-devel +BuildRequires: libcups-devel +BuildRequires: libcurl-devel +BuildRequires: libdbus-devel +BuildRequires: libdbus-glib-devel +BuildRequires: libevolution-data-server-devel +BuildRequires: libexpat-devel +BuildRequires: libfontconfig-devel +BuildRequires: libfreetype-devel +BuildRequires: libGLU-devel +BuildRequires: libglib-devel +BuildRequires: libgnome-vfs-devel +BuildRequires: libgst-plugins-base-devel +BuildRequires: libgstreamer-devel +BuildRequires: libgtk-devel +BuildRequires: libhunspell-devel +BuildRequires: libhyphen-devel +BuildRequires: libICE-devel +BuildRequires: libicu-devel +BuildRequires: libidn-devel +BuildRequires: libjpeg-turbo-devel +BuildRequires: liblp_solve-devel +BuildRequires: libmdds-devel +BuildRequires: libmysql5-devel +BuildRequires: libmythes-devel +BuildRequires: libneon-devel +BuildRequires: libnss-devel +BuildRequires: libnspr-devel +BuildRequires: libodbc-devel +BuildRequires: libopenldap-devel +BuildRequires: libopenssl-devel +BuildRequires: libpoppler-devel +BuildRequires: libpoppler-glib-devel +BuildRequires: libportaudio-devel +BuildRequires: libpostgresql-devel +BuildRequires: libpython-devel +BuildRequires: libqt4-devel +BuildRequires: libraptor-devel +BuildRequires: librdf-devel +BuildRequires: libsablotron-devel +BuildRequires: libsane-backends-devel +BuildRequires: libsilgraphite-devel +BuildRequires: libexttextcat-devel +BuildRequires: libvigra-devel +BuildRequires: libwpd-devel +BuildRequires: libwpg-devel +BuildRequires: libwps-devel +BuildRequires: libXext-devel +BuildRequires: libXinerama-devel +BuildRequires: libxml2-devel +BuildRequires: libxslt-devel +BuildRequires: libXt-devel +BuildRequires: libz-devel +BuildRequires: libmdb-devel +#BuildRequires: mdbtools +BuildRequires: mono-devel +BuildRequires: mysql-connector-c++-devel +BuildRequires: openclipart +BuildRequires: pam-devel +BuildRequires: perl-Archive-Zip +BuildRequires: perl-Compress-Zlib +BuildRequires: xorg-server-devel +BuildRequires: xproto-devel +BuildRequires: xulrunner-devel +# java stuff +BuildRequires: apache-ant +BuildRequires: java-pentaho-libxml +BuildRequires: java-flute +BuildRequires: java-pentaho-reporting-flow-engine +BuildRequires: xerces-j2 +BuildRequires: xalan-j2 +BuildRequires: xml-commons-apis +BuildRequires: apache-ant-regexp +BuildRequires: jakarta-commons-codec == 1.3 +BuildRequires: jakarta-commons-httpclient == 3.1 +BuildRequires: jakarta-commons-lang == 2.3 +BuildRequires: jakarta-commons-logging == 1.1.1 +%if %with_system_hsqldb +BuildRequires: java-hsqldb == 1.8.0.10 +%endif +BuildRequires: java-bsh2 == 2.0b4 +BuildRequires: java-lucene +BuildRequires: java-lucene-contrib +BuildRequires: java-junit48 +BuildRequires: postgresql-jdbc +%if %with_system_saxon9 +BuildRequires: java-saxon9 == 9.1.0.7 +%endif +BuildRequires: java-pentaho-reporting-flow-engine +# for the KDE subpackage +BuildRequires: kdelibs-devel +BuildRequires: hunspell-es +BuildRequires: hyphen-es +BuildRequires: mythes-es +BuildRequires: mythes-it +BuildRequires: valgrind +BuildRequires: libSampleICC-devel +BuildRequires: libcdr-devel +BuildRequires: libcmis-devel >= 0.3 +BuildRequires: liblangtag-devel +BuildRequires: libexttextcat-devel >= 3.4 +BuildRequires: libboost-devel >= 1.54 +BuildRequires: libodfgen-devel +BuildRequires: libmwaw-devel +BuildRequires: libmdds-devel >= 0.8 +#BuildRequires: libixion-devel >= 0.5 +BuildRequires: liborcus-devel >= 0.5.1 +BuildRequires: libe-book-devel +BuildRequires: libetonyek-devel +BuildRequires: libfreehand-devel +BuildRequires: libmwaw-devel +BuildRequires: libabw-devel +BuildRequires: firebird-devel +BuildRequires: libicu-devel >= 52.1 +BuildRequires: libpoppler-devel >= 0.24.5 +BuildRoot: %{_tmppath}/%{name}-%{version}-root + +%description +LibreOffice is an Open Source, community-developed, office productivity suite. +It includes the key desktop applications, such as a word processor, spreadsheet, presentation manager, formula editor and drawing program, with a user interface and feature set similar to other office suites. +Sophisticated and flexible, LibreOffice also works transparently with a variety of file formats, including Microsoft Office File Formats. + +%package core +Summary: Core modules for LibreOffice +Group: Graphical Desktop/Applications/Office +#Requires: %{name}-%{fontname}-fonts = %{version}-%{release} +#Requires: %{name}-ure = %{version}-%{release} +Requires: dejavu-fonts-ttf +Requires: liberation-fonts-ttf +Requires: hunspell-en +Requires: hyphen-en +Requires: java-lucene +Requires: java-lucene-contrib +Requires: libreofficei18n +%if %with_system_saxon9 +Requires: java-saxon9 == 9.1.0.7 +%endif +Requires: libgtk +# < 3.3.1 +Provides: %{name}-graphicfilter +Obsoletes: %{name}-graphicfilter +Provides: OpenOffice-common +Obsoletes: OpenOffice-common + +%description core +The shared core libraries and support files for LibreOffice. + +%package pyuno +Summary: Python support for LibreOffice +Group: Development/Libraries/Python +Requires: %{name}-core = %{version}-%{release} +#Requires: %{name}-ure = %{version}-%{release} +Requires: python +Obsoletes: OpenOffice-pyuno +Provides: libreoffice-pythonscript +Obsoletes: libreoffice-pythonscript + +%description pyuno +Python bindings for the LibreOffice UNO component model. Allows scripts both external to LibreOffice and within the internal LibreOffice scripting framework to be written in python. + +%package base +Summary: Database front-end for LibreOffice +Group: Graphical Desktop/Applications/Office +%if %with_system_hsqldb +Requires: java-hsqldb == 1.8.0.10 +%endif +Requires: postgresql-jdbc +#Requires: %{name}-ure = %{version}-%{release} +Requires: %{name}-core = %{version}-%{release} +Requires: %{name}-calc = %{version}-%{release} +Provides: %{name}-reportdesign +Obsoletes: %{name}-reportdesign +Obsoletes: OpenOffice-Base + +%description base +GUI database front-end for LibreOffice. Allows creation and management of databases through a GUI. + +%package report-builder +Summary: Create database reports from LibreOffice +Group: Graphical Desktop/Applications/Office +Requires: java-pentaho-reporting-flow-engine +Requires: %{name}-base = %{version}-%{release} +Requires: %{name}-core + +%description report-builder +Creates database reports from LibreOffice databases. The report builder can define group and page headers as well as group, page footers and calculation fields to accomplish complex database reports. + +%package bsh +Summary: BeanShell support for LibreOffice +Group: Development/Libraries/Java +Requires: java-bsh2 +Requires: %{name}-core = %{version}-%{release} + +%description bsh +Support BeanShell scripts in LibreOffice. + +%package rhino +Summary: JavaScript support for LibreOffice +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} + +%description rhino +Support JavaScript scripts in LibreOffice. + +#%package wiki-publisher +#Summary: Create Wiki articles on MediaWiki servers with LibreOffice +#Group: Graphical Desktop/Applications/Office +#Requires: jakarta-commons-codec == 1.3 +#Requires: jakarta-commons-httpclient == 3.1 +#Requires: jakarta-commons-lang == 2.3 +#Requires: jakarta-commons-logging == 1.1.1 +#Requires: %{name}-writer = %{version}-%{release} +#Requires: %{name}-core +# +#%description wiki-publisher +#The Wiki Publisher enables you to create Wiki articles on MediaWiki servers without having to know the syntax of the MediaWiki markup language. Publish your new and existing documents transparently with writer to a wiki page. + +%package ogltrans +Summary: 3D OpenGL slide transitions for LibreOffice +Group: Graphical Desktop/Applications/Office +Requires: %{name}-impress = %{version}-%{release} +Requires: %{name}-core + +%description ogltrans +OpenGL Transitions enable 3D slide transitions to be used in LibreOffice. +Requires good quality 3D support for your graphics card for best experience. + +#%package presentation-minimizer +#Summary: Shrink LibreOffice presentations +#Group: Graphical Desktop/Applications/Office +#Requires: %{name}-impress = %{version}-%{release} +#Requires: %{name}-core +# +#%description presentation-minimizer +#The Presentation Minimizer is used to reduce the file size of the current presentation. Images will be compressed, and data that is no longer needed will be removed. + +#%package presenter-screen +#Summary: Presenter Screen for LibreOffice Presentations +#Group: Graphical Desktop/Applications/Office +#Requires: %{name}-impress = %{version}-%{release} +#Requires: %{name}-core +# +#%description presenter-screen +#The Presenter Screen is used to provides information on a second screen, that typically is not visible to the audience when delivering a presentation. e.g. slide notes. + +#%package pdfimport +#Summary: PDF Importer for LibreOffice Draw +#Group: Graphical Desktop/Applications/Office +#Requires: %{name}-draw = %{version}-%{release} +#Requires: %{name}-core +# +#%description pdfimport +#The PDF Importer imports PDF into drawing documents to preserve layout and enable basic editing of PDF documents. + +#%package %{fontname}-fonts +#Summary: LibreOffice dingbats font +#Group: System/Fonts +##BuildArch: noarch + +#%description %{fontname}-fonts +#A dingbats font, OpenSymbol, suitable for use by LibreOffice for bullets and mathematical symbols. + +%package writer +Summary: LibreOffice Word Processor Application +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} +#Requires: %{name}-ure = %{version}-%{release} +Obsoletes: OpenOffice-Writer + +%description writer +The LibreOffice Word Processor application. + +%package mailmerge +Summary: Email mail-merge component for LibreOffice +Group: Graphical Desktop/Applications/Office +Requires: %{name}-writer = %{version}-%{release} +Requires: %{name}-pyuno = %{version}-%{release} +Obsoletes: OpenOffice-mailmerge + +%description mailmerge +Enables the LibreOffice writer module to mail-merge to email. + +%package calc +Summary: LibreOffice Spreadsheet Application +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} +#Requires: %{name}-ure = %{version}-%{release} +Obsoletes: OpenOffice-Calc + +%description calc +The LibreOffice Spreadsheet application. + +%package draw +Summary: LibreOffice Drawing Application +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} +#Requires: %{name}-ure = %{version}-%{release} +#Requires: %{name}-pdfimport = %{version}-%{release} +Requires: %{name}-graphicfilter = %{version}-%{release} +Obsoletes: OpenOffice-Draw + +%description draw +The LibreOffice Drawing Application. + +%package impress +Summary: LibreOffice Presentation Application +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} +#Requires: %{name}-ure = %{version}-%{release} +#Requires: %{name}-presenter-screen = %{version}-%{release} +Obsoletes: OpenOffice-Impress +Provides: %{name}-ogltrans +Obsoletes: %{name}-ogltrans + +%description impress +The LibreOffice Presentation Application. + +%package math +Summary: LibreOffice Equation Editor Application +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} +#Requires: %{name}-ure = %{version}-%{release} +Obsoletes: OpenOffice-Math + +%description math +The LibreOffice Equation Editor Application. + +%package filters +Summary: Optional filters module for LibreOffice +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} +Provides: %{name}-xsltfilter +Obsoletes: %{name}-xsltfilter +Provides: %{name}-javafilter +Obsoletes: %{name}-javafilter +Obsoletes: OpenOffice-filters + +%description filters +The xsltfilter module for LibreOffice, provides the following additional filters: +- additional docbook and xhtml export transforms. Install this to enable docbook export. +- additional AportisDoc, Pocket Excel and Pocket Word import filters. + +%package testtools +Summary: Testtools for LibreOffice +Group: Development/Tools +#Requires: %{name}-ure = %{version}-%{release} +Requires: %{name}-core = %{version}-%{release} +Requires: %{name}-writer = %{version}-%{release} +Requires: %{name}-calc = %{version}-%{release} +Requires: %{name}-draw = %{version}-%{release} +Requires: %{name}-impress = %{version}-%{release} +Requires: %{name}-base = %{version}-%{release} +Requires: %{name}-math = %{version}-%{release} +#Requires: %{name}-bsh = %{version}-%{release} +#Requires: %{name}-rhino = %{version}-%{release} +Obsoletes: OpenOffice-testtool + +%description testtools +QA tools for LibreOffice, enables automated testing. + +%package reportbuilder +Summary: LibreOffice Report builder optional extension +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} + +%description reportbuilder +The LibreOffice Report builder optional extension. + +%package presenter-screen +Summary: LibreOffice presenter screen optional extension +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} + +%description presenter-screen +The LibreOffice presenter screen builder optional extension. + +%package presentation-minimizer +Summary: LibreOffice presentation minimizer optional extension +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} + +%description presentation-minimizer +The LibreOffice presentation minimizer optional extension. + +%package postgresql +Summary: LibreOffice postgresql optional extension +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} + +%description postgresql +The LibreOffice postgresql optional extension. + +%package pdfimport +Summary: LibreOffice PDF import optional extension +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} + +%description pdfimport +The LibreOffice PDF import optional extension. + +%package pythonscript +Summary: LibreOffice script provider for Python optional extension +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} + +%description pythonscript +The LibreOffice script provider for Python optional extension. + +#%package ure +#Summary: UNO Runtime Environment +#Group: Development/Libraries/Java +#Requires: java-gcj-compat-runtime +#Requires: java-openjdk-runtime +#Requires: unzip +# +#%description ure +#UNO is the component model of LibreOffice. UNO offers interoperability between programming languages, other components models and hardware architectures, either in process or over process boundaries, in the Intranet as well as in the Internet. UNO components may be implemented in and accessed from any programming language for which a UNO implementation (AKA language binding) and an appropriate bridge or adapter exists + +%package sdk +Summary: Software Development Kit for LibreOffice +Group: Development/Tools +#Requires: %{name}-ure = %{version}-%{release} +Requires: %{name}-core = %{version}-%{release} +Requires: unzip + +%description sdk +The LibreOffice SDK is an add-on for the LibreOffice office suite. It provides the necessary tools for programming using the LibreOffice APIs and for creating extensions (UNO components) for LibreOffice. To set the build environment for building against the sdk use %{sdkinstdir}/setsdkenv_unix.sh. + +%package sdk-doc +Summary: Software Development Kit documentation for LibreOffice +Group: Documentation +Requires: %{name}-sdk = %{version}-%{release} + +%description sdk-doc +This provides documentation for programming using the LibreOffice APIs and examples of creating extensions (UNO components) for LibreOffice. + +#%package headless +#Summary: LibreOffice Headless plug-in +#Group: Development/Libraries +##Requires: %{name}-ure = %{version}-%{release} +#Requires: %{name}-core = %{version}-%{release} +# +#%description headless +#A plug-in for LibreOffice that enables it to function without an X server. +#It implements the -headless command line option and allows LibreOffice to be used as a backend server for e.g. document conversion. + +%package kde +Summary: LibreOffice KDE integration plug-in +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-KDE + +%description kde +A plug-in for LibreOffice that enables integration into the KDE desktop environment. + +%package gnome +Summary: LibreOffice GNOME integration plug-in +Group: Graphical Desktop/Applications/Office +Requires: %{name}-core = %{version}-%{release} + +%description gnome +A plug-in for LibreOffice that enables integration into the GNOME desktop environment. + +%prep +%setup -q -c -a 2 -a 3 -a 4 -a 32 +#% setup -q -c -T -D +#:<< ____EOF + +rm -rf libreoffice-*/git-hooks +for a in libreoffice-*/*; do mv $PWD/$a .; done +#remove "debugging" translations +rm -rf l10n/source/kid + +%patch1 -p1 +#% patch6 -p0 -b .ooo101274.opening-a-directory.patch +#% patch9 -p1 -b .ooo108637.sfx2.uisavedir.patch +#%patch10 -p0 -b .ooo113273.desktop.resolvelinks.patch +%patch12 -p1 -b .libreoffice-installfix.patch +#%patch17 -p0 -b .libreoffice-lucene-bundleversion.patch +#%patch19 -p0 -b .libreoffice-bug31271.patch +#%patch22 -p0 -b .vbahelper.visibility.patch +#%patch37 -p1 -b .pLangAttribUtf8-undefined.patch +# %ifarch x86_64 +%patch38 -p1 +# %endif + +touch scripting/source/pyprov/delzip +#touch scripting/util/provider/beanshell/delzip +#touch scripting/util/provider/javascript/delzip + +mkdir -p ext_sources +cp %{SOURCE20} ext_sources/185d60944ea767075d27247c3162b3bc-unowinreg.dll +cp %{SOURCE23} ext_sources +cp %{SOURCE24} ext_sources +cp %{SOURCE25} ext_sources +cp %{SOURCE26} ext_sources +cp %{SOURCE27} ext_sources +%if !%with_system_saxon9 +cp %{SOURCE28} ext_sources +%endif +cp %{SOURCE29} ext_sources +%if !%with_system_hsqldb +cp %{SOURCE31} ext_sources +%endif +cp %{SOURCE33} ext_sources + +%build +#:<< ___EOF +echo build start time is `date`, diskspace: `df -h . | tail -n 1` + +export QT4DIR=%{_qt4_prefix} +export KDE4DIR=%{_kde4_prefix} +export PATH=$QT4DIR/bin:$PATH +export JAVA_HOME=%{java_home} + +./autogen.sh + +%configure \ + --disable-fetch-external \ + --with-vendor="%{distribution}" \ + --with-branding=`pwd`/branding \ + --with-build-version="Ver: %{version}-%{release}" \ + --with-unix-wrapper=%{name} \ + --disable-epm \ + --disable-mathmldtd \ + --disable-gnome-vfs \ + --enable-gio \ + --enable-symbols \ + --enable-lockdown \ + --enable-evolution2 \ + --enable-dbus \ + --enable-opengl \ + --enable-vba \ + --with-vba-package-format="builtin" \ + --with-system-libs \ + --with-system-headers \ + --with-system-mozilla=libxul \ + --with-system-mythes \ + --with-system-dicts \ + --with-external-dict-dir=%{_datadir}/myspell \ + --without-myspell-dicts \ + --without-fonts \ + --without-ppds \ + --without-afms \ + --with-lang=ALL \ + --with-external-tar=$PWD/ext_sources \ + --with-system-mdds \ +%if %with_system_hsqldb + --with-system-hsqldb \ + --with-hsqldb-jar=$(build-classpath hsqldb) \ +%else + --without-system-hsqldb \ +%endif + --with-ant-home=%{_datadir}/ant \ + --with-system-apache-commons \ + --with-system-jfreereport \ + --with-jdk-home=$JAVA_HOME \ + --with-system-beanshell \ + --with-beanshell-jar=$(build-classpath bsh2/bsh) \ + --with-system-libwpd \ + --with-system-libwpg \ + --with-system-libwps \ + --enable-kde4 \ + --disable-kde \ + PYTHON=%{__python3} \ + --with-system-boost \ + --with-system-cairo \ + --with-system-curl \ + --with-system-expat \ + --with-system-icu \ + --with-system-neon \ + --with-system-neon \ + --with-system-redland \ + --with-system-zlib \ + --with-system-openssl \ + --with-system-mysql \ + --with-system-mysql-cppconn \ + --enable-graphite \ + --with-system-graphite \ + --enable-gtk \ + --enable-split-app-modules \ + --enable-split-opt-features + +# --with-intro-bitmap=%{SOURCE32} \ +# --with-intro-progressbar-position=60,316 \ +# --with-intro-progressbar-size=409,8 \ + +for i in $RPM_OPT_FLAGS; do + case "$i" in + -O?|-pipe|-Wall|-g|-fexceptions) continue;; + esac + ARCH_FLAGS="$ARCH_FLAGS $i" +done +export ARCH_FLAGS + +%make +make -C cli_ure +#make -C unoil + +##generate the icons and mime type stuff +#export DESTDIR=../../../output +#export ICON_SOURCE_DIR=../icons +##export KDEMAINDIR=%{_kde4_prefix} +#export KDEMAINDIR=%{_prefix} +#export GNOMEDIR=%{_prefix} +#export GNOME_MIME_THEME=hicolor +# +#cd sysui/desktop/share +#./create_tree.sh + +echo build end time is `date`, diskspace: `df -h . | tail -n 1` + +%install +[ "%{buildroot}" != / ] && rm -rf "%{buildroot}" + +# Workaround for: ERROR: Include file cliuhttp://www.lastampa.it/reversion.mk not found! +make distro-pack-install DESTDIR=%{buildroot} + +sed -i "s|\[|*|;s|\]|*|" file-lists/sdk_doc_list.txt +sed -i "s|%{_libdir}/libreoffice/help/bn-IN.*||" file-lists/lang_bn_IN_list.txt + +# NOTE: if the following installation error occurs: +# +#: ERROR: Missing files +#: in function: remove_Files_Without_Sourcedirectory +#: *************************************************************** +# +# remove the file from: unxlngi6.pro/bin/setup_osl.ins + +export `grep "^PRODUCTVERSIONSHORT =" solenv/inc/productversion.mk | sed -e "s/ //g"` +export `grep "PRODUCTVERSION[ ]*=[ ]*" solenv/inc/productversion.mk | sed -e "s/ //g"` + +find %{buildroot}%{baseinstdir} -exec chmod +w {} \; +find %{buildroot}%{baseinstdir} -type d -exec chmod 0755 {} \; + +pic=0 +executable=0 +for foo in `find %{buildroot}%{instdir} -name "*" -exec file {} \;| grep ": ELF" | cut -d: -f 1` ; do + chmod +wx $foo + ls -asl $foo + result=`readelf -d $foo | grep TEXTREL` || true + if [ "$result" != "" ]; then + echo "TEXTREL Warning: $foo is b0rked (-fpic missing)" + pic=1 + fi + result=`readelf -l $foo | grep GNU_STACK | grep RWE` || true + if [ "$result" != "" ]; then + echo "GNU_STACK Warning: $foo is b0rked (-noexecstack missing)" + executable=1 + fi +done +if [ $pic == 1 ]; then false; fi +if [ $executable == 1 ]; then false; fi + +#ln -s %{baseinstdir}/program/soffice %{buildroot}%{_bindir}/libreoffice$PRODUCTVERSION + +(cd %{buildroot}%{baseinstdir}/share/xdg/ +chmod u+w *.desktop +#rm -rf printeradmin.desktop +for file in *.desktop; do + sed -i -e "s/Icon=libreoffice$PRODUCTVERSIONSHORT/Icon=libreoffice/g" $file + echo X-GIO-NoFuse=true >> $file +done +echo "StartupNotify=true" >> base.desktop +echo "StartupNotify=true" >> calc.desktop +echo "StartupNotify=true" >> impress.desktop +echo "StartupNotify=true" >> writer.desktop +echo "StartupNotify=true" >> math.desktop +echo "StartupNotify=true" >> draw.desktop +echo "TryExec=lobase" >> base.desktop +echo "TryExec=localc" >> calc.desktop +echo "TryExec=loimpress" >> impress.desktop +echo "TryExec=lowriter" >> writer.desktop +echo "TryExec=lomath" >> math.desktop +echo "TryExec=lodraw" >> draw.desktop +echo "NoDisplay=true" >> math.desktop +echo "NoDisplay=true" >> startcenter.desktop +sed -i -e "/NoDisplay=true/d" qstart.desktop +) + +%if %with_test +%check +source ./Linux*Env.Set.sh +cd test +build && deliver -link +cd ../smoketestoo_native +##JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY="1" works around flawed accessibility check +##SAL_USE_VCLPLUGIN="svp" uses the headless plugin for these tests +JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY="1" SAL_USE_VCLPLUGIN="svp" timeout -k 2m 2h build.pl +%endif + +cat file-lists/kde_list.txt >> file-lists/kde4_list.txt + +%clean +[ "%{buildroot}" != / ] && rm -rf "%{buildroot}" + +%post core +update-mime-database %{_datadir}/mime &> /dev/null || : +update-desktop-database %{_datadir}/applications &> /dev/null || : +if [ -x /usr/bin/gtk-update-icon-cache ]; then + for theme in hicolor locolor; do + if test -d "%{_datadir}/icons/$theme"; then + if test -f "%{_datadir}/icons/$theme/index.theme"; then + touch --no-create %{_datadir}/icons/$theme + gtk-update-icon-cache -q %{_datadir}/icons/$theme + fi + fi + done +fi + +%postun core +update-mime-database %{_datadir}/mime &> /dev/null || : +update-desktop-database %{_datadir}/applications &> /dev/null || : +if [ -x /usr/bin/gtk-update-icon-cache ]; then + for theme in hicolor locolor; do + if test -d "%{_datadir}/icons/$theme"; then + if test -f "%{_datadir}/icons/$theme/index.theme"; then + touch --no-create %{_datadir}/icons/$theme + gtk-update-icon-cache -q %{_datadir}/icons/$theme + fi + fi + done +fi + +%post base +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun base +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%post calc +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun calc +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%post draw +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun draw +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%post writer +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun writer +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%post impress +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun impress +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%post math +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun math +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%files core -f file-lists/common_list.txt +%defattr(-,root,root) +#%{_bindir}/libreoffice%{MAJver}* +#%{_datadir}/applications/libreoffice-binfilter.desktop + +%files base -f file-lists/base_list.txt +%defattr(-,root,root) + +%files calc -f file-lists/calc_list.txt +%defattr(-,root,root) + +%files draw -f file-lists/draw_list.txt +%defattr(-,root,root) + +%files writer -f file-lists/writer_list.txt +%defattr(-,root,root) + +%files impress -f file-lists/impress_list.txt +%defattr(-,root,root) + +%files math -f file-lists/math_list.txt +%defattr(-,root,root) + +%files filters -f file-lists/filters_list.txt +%defattr(-,root,root) + +%files gnome -f file-lists/gnome_list.txt +%defattr(-,root,root) + +%files kde -f file-lists/kde4_list.txt +%defattr(-,root,root) + +%files mailmerge -f file-lists/mailmerge_list.txt +%defattr(-,root,root) + +%files pyuno -f file-lists/pyuno_list.txt +%defattr(-,root,root) + +#%files reportbuilder -f file-lists/orig/gid_Module_Optional_Extensions_REPORTDESIGN +#%defattr(-,root,root) + +#%files presenter-screen -f file-lists/orig/gid_Module_Optional_Extensions_PRESENTER_SCREEN +#%defattr(-,root,root) + +#%files presentation-minimizer -f file-lists/orig/gid_Module_Optional_Extensions_MINIMIZER +#%defattr(-,root,root) + +%files postgresql -f file-lists/orig/gid_Module_Optional_PostgresqlSdbc +%defattr(-,root,root) + +#%files pdfimport -f file-lists/orig/gid_Module_Optional_Extensions_PDFIMPORT +#%defattr(-,root,root) + +#%files pythonscript -f file-lists/orig/gid_Module_Optional_Extensions_Script_Provider_For_Python +#%defattr(-,root,root) + +%files bsh -f file-lists/orig/gid_Module_Optional_Extensions_Script_Provider_For_BS +%defattr(-,root,root) + +%files sdk -f file-lists/sdk_list.txt +%defattr(-,root,root) + +%files sdk-doc -f file-lists/sdk_doc_list.txt +%defattr(-,root,root) + +#%files testtools -f file-lists/testtool_list.txt +#%defattr(-,root,root) + +%if %{langpacks} +%package i18n-af +Summary: Afrikaans language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Requires: hunspell-af +Requires: hyphen-af +Obsoletes: OpenOffice-i18n-af +Provides: libreofficei18n + +%description i18n-af +This package contains additional Afrikaans translations and resources for LibreOffice. + +%files i18n-af -f file-lists/lang_af_list.txt +%defattr(-,root,root) + +%package i18n-am +Summary: Amharic language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Provides: libreofficei18n + +%description i18n-am +This package contains additional Amharic translations and resources for LibreOffice. + +%files i18n-am -f file-lists/lang_am_list.txt +%defattr(-,root,root) + +%package i18n-ar +Summary: Arabic language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Requires: hunspell-ar +Obsoletes: OpenOffice-i18n-ar +Provides: libreofficei18n + +%description i18n-ar +This package contains additional Arabic translations and resources for LibreOffice. + +%files i18n-ar -f file-lists/lang_ar_list.txt +%defattr(-,root,root) + +%package i18n-as +Summary: Assamese language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-as +#Requires: hyphen-as +Obsoletes: OpenOffice-i18n-as_IN +Provides: libreofficei18n + +%description i18n-as +This package contains additional Assamese translations and resources for LibreOffice. + +%files i18n-as -f file-lists/lang_as_list.txt +%defattr(-,root,root) + +%package i18n-ast +Summary: Asturianu language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-ast +Provides: libreofficei18n + +%description i18n-ast +This package contains additional Asturianu translations and resources for LibreOffice. + +%files i18n-ast -f file-lists/lang_ast_list.txt +%defattr(-,root,root) + +%package i18n-be +Summary: Belarusian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-be +Provides: libreofficei18n + +%description i18n-be +This package contains additional Belarusian translations and resources for LibreOffice. + +%files i18n-be -f file-lists/lang_be_list.txt +%defattr(-,root,root) + +%package i18n-bg +Summary: Bulgarian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Requires: hunspell-bg +Requires: hyphen-bg +Requires: mythes-bg +Obsoletes: OpenOffice-i18n-bg +Provides: libreofficei18n + +%description i18n-bg +This package contains additional Bulgarian translations and resources for LibreOffice. + +%files i18n-bg -f file-lists/lang_bg_list.txt +%defattr(-,root,root) + +%package i18n-bn +Summary: Bengali language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-bn +Obsoletes: OpenOffice-i18n-bn-BD +Provides: libreofficei18n + +%description i18n-bn +This package contains additional Bengali translations and resources for LibreOffice. + +%files i18n-bn -f file-lists/lang_bn_list.txt +%defattr(-,root,root) + +%package i18n-bn_IN +Summary: Bengali (India) language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-bn_IN +Provides: libreofficei18n + +%description i18n-bn_IN +This package contains additional Bengali (India) translations and resources for LibreOffice. + +%files i18n-bn_IN -f file-lists/lang_bn_IN_list.txt +%defattr(-,root,root) + +%package i18n-bo +Summary: Tibetan language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-bo +Provides: libreofficei18n + +%description i18n-bo +This package contains additional Tibetan translations and resources for LibreOffice. + +%files i18n-bo -f file-lists/lang_bo_list.txt +%defattr(-,root,root) + +%package i18n-br +Summary: Breton language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-br +Provides: libreofficei18n + +%description i18n-br +This package contains additional Breton translations and resources for LibreOffice. + +%files i18n-br -f file-lists/lang_br_list.txt +%defattr(-,root,root) + +%package i18n-brx +Summary: Bodo language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-brx +Provides: libreofficei18n + +%description i18n-brx +This package contains additional Bodo translations and resources for LibreOffice. + +%files i18n-brx -f file-lists/lang_brx_list.txt +%defattr(-,root,root) + +%package i18n-bs +Summary: Bosnian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-bs +Provides: libreofficei18n + +%description i18n-bs +This package contains additional Bosnian translations and resources for LibreOffice. + +%files i18n-bs -f file-lists/lang_bs_list.txt +%defattr(-,root,root) + +%package i18n-ca +Summary: Catalan language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=ca) +#Requires: hunspell-ca +#Requires: hyphen-ca +#Requires: mythes-ca +Obsoletes: OpenOffice-i18n-ca +Provides: libreofficei18n + +%description i18n-ca +This package contains additional Catalan translations and resources for LibreOffice. + +%files i18n-ca -f file-lists/lang_ca_list.txt +%defattr(-,root,root) + +%package i18n-ca_valencia +Summary: Catalan (Valencia) language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-ca_XV +Provides: libreofficei18n +Provides: %{name}-i18n-ca_XV +Obsoletes: %{name}-i18n-ca_XV + +%description i18n-ca_valencia +This package contains additional Catalan (Valencia) translations and resources for LibreOffice. + +%files i18n-ca_valencia -f file-lists/lang_ca_valencia_list.txt +%defattr(-,root,root) + +%package i18n-cs +Summary: Czech language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-cs +Provides: libreofficei18n + +%description i18n-cs +This package contains additional Czech translations and resources for LibreOffice. + +%files i18n-cs -f file-lists/lang_cs_list.txt +%defattr(-,root,root) + +%package i18n-cy +Summary: Welsh language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=cy) +#Requires: hunspell-cy +#Requires: hyphen-cy +Obsoletes: OpenOffice-i18n-cy +Provides: libreofficei18n + +%description i18n-cy +This package contains additional Welsh translations and resources for LibreOffice. + +%files i18n-cy -f file-lists/lang_cy_list.txt +%defattr(-,root,root) + +%package i18n-da +Summary: Danish language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-da +#Requires: hyphen-da +#Requires: mythes-da +Obsoletes: OpenOffice-i18n-da +Provides: libreofficei18n + +%description i18n-da +This package contains additional Danish translations and resources for LibreOffice. + +%files i18n-da -f file-lists/lang_da_list.txt +%defattr(-,root,root) + +%package i18n-de +Summary: German language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-de +#Requires: hyphen-de +#Requires: mythes-de +Obsoletes: OpenOffice-i18n-de +Provides: libreofficei18n + +%description i18n-de +This package contains additional German translations and resources for LibreOffice. + +%files i18n-de -f file-lists/lang_de_list.txt +%defattr(-,root,root) + +%package i18n-dgo +Summary: Dogri language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-dgo +Provides: libreofficei18n + +%description i18n-dgo +This package contains additional Dogri translations and resources for LibreOffice. + +%files i18n-dgo -f file-lists/lang_dgo_list.txt +%defattr(-,root,root) + +%package i18n-dz +Summary: Dzongkha language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=dz) +Obsoletes: OpenOffice-i18n-dz +Provides: libreofficei18n + +%description i18n-dz +This package contains additional Dzongkha translations and resources for LibreOffice. + +%files i18n-dz -f file-lists/lang_dz_list.txt +%defattr(-,root,root) + +%package i18n-el +Summary: Greek language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=el) +#Requires: hunspell-el +#Requires: hyphen-el +#Requires: mythes-el +Obsoletes: OpenOffice-i18n-el +Provides: libreofficei18n + +%description i18n-el +This package contains additional Greek translations and resources for LibreOffice. + +%files i18n-el -f file-lists/lang_el_list.txt +%defattr(-,root,root) + +%package i18n-en_GB +Summary: English (GB) language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Requires: mythes-en +Obsoletes: OpenOffice-i18n-en +Obsoletes: OpenOffice-i18n-en_GB +Provides: libreofficei18n + +%description i18n-en_GB +This package contains additional English (GB) translations and resources for LibreOffice. + +%files i18n-en_GB -f file-lists/lang_en_GB_list.txt +%defattr(-,root,root) + +%package i18n-en_US +Summary: English (US) language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Requires: mythes-en +Obsoletes: OpenOffice-i18n-en +Obsoletes: OpenOffice-i18n-en_US +Provides: libreoffice-i18n-en +Provides: libreofficei18n + +%description i18n-en_US +This package contains additional English (US) translations and resources for LibreOffice. + +%files i18n-en_US -f file-lists/lang_en_US_list.txt +%defattr(-,root,root) + +%package i18n-en_ZA +Summary: English (ZA) language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Requires: mythes-en +Obsoletes: OpenOffice-i18n-en_ZA +Provides: libreofficei18n + +%description i18n-en_ZA +This package contains additional English (ZA) translations and resources for LibreOffice. + +%files i18n-en_ZA -f file-lists/lang_en_ZA_list.txt +%defattr(-,root,root) + +%package i18n-eo +Summary: Esperanto language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-eo +Provides: libreofficei18n + +%description i18n-eo +This package contains additional Esperanto translations and resources for LibreOffice. + +%files i18n-eo -f file-lists/lang_eo_list.txt +%defattr(-,root,root) + +%package i18n-es +Summary: Spanish language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Requires: hunspell-es +Requires: hyphen-es +Requires: mythes-es +Obsoletes: OpenOffice-i18n-es +Provides: libreofficei18n + +%description i18n-es +This package contains additional Spanish translations and resources for LibreOffice. + +%files i18n-es -f file-lists/lang_es_list.txt +%defattr(-,root,root) + +%package i18n-et +Summary: Estonian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=es) +#Requires: hunspell-et +#Requires: hyphen-et +Obsoletes: OpenOffice-i18n-et +Provides: libreofficei18n + +%description i18n-et +This package contains additional Estonian translations and resources for LibreOffice. + +%files i18n-et -f file-lists/lang_et_list.txt +%defattr(-,root,root) + +%package i18n-eu +Summary: Basque language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-eu +#Requires: hyphen-eu +Obsoletes: OpenOffice-i18n-eu +Provides: libreofficei18n + +%description i18n-eu +This package contains additional Basque translations and resources for LibreOffice. + +%files i18n-eu -f file-lists/lang_eu_list.txt +%defattr(-,root,root) + +%package i18n-fa +Summary: Persian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-fa +Provides: libreofficei18n + +%description i18n-fa +This package contains additional Persian translations and resources for LibreOffice. + +%files i18n-fa -f file-lists/lang_fa_list.txt +%defattr(-,root,root) + +%package i18n-fi +Summary: Finnish language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-fi +Provides: libreofficei18n + +%description i18n-fi +This package contains additional Finnish translations and resources for LibreOffice. + +%files i18n-fi -f file-lists/lang_fi_list.txt +%defattr(-,root,root) + +%package i18n-fr +Summary: French language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-es +#Requires: hyphen-es +#Requires: mythes-es +Obsoletes: OpenOffice-i18n-fr +Provides: libreofficei18n + +%description i18n-fr +This package contains additional French translations and resources for LibreOffice. + +%files i18n-fr -f file-lists/lang_fr_list.txt +%defattr(-,root,root) + +%package i18n-ga +Summary: Irish language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-ga +#Requires: hyphen-ga +#Requires: mythes-ga +Obsoletes: OpenOffice-i18n-ga +Provides: libreofficei18n + +%description i18n-ga +This package contains additional Irish translations and resources for LibreOffice. + +%files i18n-ga -f file-lists/lang_ga_list.txt +%defattr(-,root,root) + +%package i18n-gd +Summary: Gaelic (Scottish) language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Provides: libreofficei18n + +%description i18n-gd +This package contains additional Gaelic (Scottish) translations and resources for LibreOffice. + +%files i18n-gd -f file-lists/lang_gd_list.txt +%defattr(-,root,root) + +%package i18n-gl +Summary: Galician language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=gl) +#Requires: hunspell-gl +#Requires: hyphen-gl +#Requires: mythes-gl +Obsoletes: OpenOffice-i18n-gl +Provides: libreofficei18n + +%description i18n-gl +This package contains additional Galician translations and resources for LibreOffice. + +%files i18n-gl -f file-lists/lang_gl_list.txt +%defattr(-,root,root) + +%package i18n-gu +Summary: Gujarati language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=gu) +#Requires: hunspell-gu +#Requires: hyphen-gu +Obsoletes: OpenOffice-i18n-gu +Obsoletes: OpenOffice-i18n-gu_IN +Provides: libreofficei18n + +%description i18n-gu +This package contains additional Gujarati translations and resources for LibreOffice. + +%files i18n-gu -f file-lists/lang_gu_list.txt +%defattr(-,root,root) + +%package i18n-he +Summary: Hebrew language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=he) +#Requires: hunspell-he +Obsoletes: OpenOffice-i18n-he +Provides: libreofficei18n + +%description i18n-he +This package contains additional Hebrew translations and resources for LibreOffice. + +%files i18n-he -f file-lists/lang_he_list.txt +%defattr(-,root,root) + +%package i18n-hi +Summary: Hindi language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=hi) +#Requires: hunspell-hi +#Requires: hyphen-hi +Obsoletes: OpenOffice-i18n-hi +Provides: libreofficei18n + +%description i18n-hi +This package contains additional Hindi translations and resources for LibreOffice. + +%files i18n-hi -f file-lists/lang_hi_list.txt +%defattr(-,root,root) + +%package i18n-hr +Summary: Croatian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-hr +#Requires: hyphen-hr +Obsoletes: OpenOffice-i18n-hr +Provides: libreofficei18n + +%description i18n-hr +This package contains additional Croatian translations and resources for LibreOffice. + +%files i18n-hr -f file-lists/lang_hr_list.txt +%defattr(-,root,root) + +%package i18n-hu +Summary: Hungarian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-hu +#Requires: hyphen-hu +#Requires: mythes-hu +Obsoletes: OpenOffice-i18n-hu +Provides: libreofficei18n + +%description i18n-hu +This package contains additional Hungarian translations and resources for LibreOffice. + +%files i18n-hu -f file-lists/lang_hu_list.txt +%defattr(-,root,root) + +%package i18n-id +Summary: Bahasa language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-id +#Requires: hyphen-id +#Requires: mythes-id +Obsoletes: OpenOffice-i18n-id +Provides: libreofficei18n + +%description i18n-id +This package contains additional Bahasa translations and resources for LibreOffice. + +%files i18n-id -f file-lists/lang_id_list.txt +%defattr(-,root,root) + +%package i18n-is +Summary: Icelandic language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-id +#Requires: hyphen-id +#Requires: mythes-id +Obsoletes: OpenOffice-i18n-is +Provides: libreofficei18n + +%description i18n-is +This package contains additional Icelandic translations and resources for LibreOffice. + +%files i18n-is -f file-lists/lang_is_list.txt +%defattr(-,root,root) + +%package i18n-it +Summary: Italian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=it) +Requires: hunspell-it +Requires: hyphen-it +Requires: mythes-it +Obsoletes: OpenOffice-i18n-it +Provides: libreofficei18n + +%description i18n-it +This package contains additional Italian translations and resources for LibreOffice. + +%files i18n-it -f file-lists/lang_it_list.txt +%defattr(-,root,root) + + +%package i18n-ja +Summary: Japanese language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-ja +Provides: libreofficei18n + +%description i18n-ja +This package contains additional Japanese translations and resources for LibreOffice. + +%files i18n-ja -f file-lists/lang_ja_list.txt +%defattr(-,root,root) + +%package i18n-ka +Summary: Georgian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-ka +Provides: libreofficei18n + +%description i18n-ka +This package contains additional Georgian translations and resources for LibreOffice. + +%files i18n-ka -f file-lists/lang_ka_list.txt +%defattr(-,root,root) + +%package i18n-kk +Summary: Kazakh language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-kk +Provides: libreofficei18n + +%description i18n-kk +This package contains additional Kazakh translations and resources for LibreOffice. + +%files i18n-kk -f file-lists/lang_kk_list.txt +%defattr(-,root,root) + +%package i18n-km +Summary: Khmer (Cambodia) language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-km +Provides: libreofficei18n + +%description i18n-km +This package contains additional Khmer (Cambodia) translations and resources for LibreOffice. + +%files i18n-km -f file-lists/lang_km_list.txt +%defattr(-,root,root) + +%package i18n-kmr_Latn +Summary: Kurdish (Turkey) language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} + +%description i18n-kmr_Latn +This package contains additional Kurdish (Turkey) translations and resources for LibreOffice. + +%files i18n-kmr_Latn -f file-lists/lang_kmr_Latn_list.txt +%defattr(-,root,root) + +%package i18n-kn +Summary: Kannada language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=kn) +#Requires: hunspell-kn +#Requires: hyphen-kn +Obsoletes: OpenOffice-i18n-kn_IN +Provides: libreofficei18n + +%description i18n-kn +This package contains additional Kannada translations and resources for LibreOffice. + +%files i18n-kn -f file-lists/lang_kn_list.txt +%defattr(-,root,root) + +%package i18n-ko +Summary: Korean language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-ko +Obsoletes: OpenOffice-i18n-ko +Provides: libreofficei18n + +%description i18n-ko +This package contains additional Korean translations and resources for LibreOffice. + +%files i18n-ko -f file-lists/lang_ko_list.txt +%defattr(-,root,root) + +%package i18n-kok +Summary: Konkani language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-kok +Provides: libreofficei18n + +%description i18n-kok +This package contains additional Konkani translations and resources for LibreOffice. + +%files i18n-kok -f file-lists/lang_kok_list.txt +%defattr(-,root,root) + +%package i18n-ks +Summary: Kashmiri language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-ks +Provides: libreofficei18n + +%description i18n-ks +This package contains additional Kashmiri translations and resources for LibreOffice. + +%files i18n-ks -f file-lists/lang_ks_list.txt +%defattr(-,root,root) + +%package i18n-ku +Summary: Kurdish language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-ku +Provides: libreofficei18n + +%description i18n-ku +This package contains additional Kurdish translations and resources for LibreOffice. + +#%files i18n-ku -f file-lists/lang_ku_list.txt +#%defattr(-,root,root) + +%package i18n-lb +Summary: Luxembourgish language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Provides: libreofficei18n + +%description i18n-lb +This package contains additional Luxembourgish translations and resources for LibreOffice. + +%files i18n-lb -f file-lists/lang_lb_list.txt +%defattr(-,root,root) + +%package i18n-lo +Summary: Lao language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-lo +Provides: libreofficei18n + +%description i18n-lo +This package contains additional Lao translations and resources for LibreOffice. + +%files i18n-lo -f file-lists/lang_lo_list.txt +%defattr(-,root,root) + +%package i18n-lt +Summary: Lithuanian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-lt +#Requires: hyphen-lt +Obsoletes: OpenOffice-i18n-lt +Provides: libreofficei18n + +%description i18n-lt +This package contains additional Lithuanian translations and resources for LibreOffice. + +%files i18n-lt -f file-lists/lang_lt_list.txt +%defattr(-,root,root) + +%package i18n-lv +Summary: Latvian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-lv +Provides: libreofficei18n + +%description i18n-lv +This package contains additional Latvian translations and resources for LibreOffice. + +%files i18n-lv -f file-lists/lang_lv_list.txt +%defattr(-,root,root) + +%package i18n-mk +Summary: Macedonian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-mk +Provides: libreofficei18n + +%description i18n-mk +This package contains additional Macedonian translations and resources for LibreOffice. + +%files i18n-mk -f file-lists/lang_mk_list.txt +%defattr(-,root,root) + +%package i18n-mn +Summary: Mongolian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-mn +Provides: libreofficei18n + +%description i18n-mn +This package contains additional Mongolian translations and resources for LibreOffice. + +%files i18n-mn -f file-lists/lang_mn_list.txt +%defattr(-,root,root) + +%package i18n-mni +Summary: Manipuri language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-mni +Provides: libreofficei18n + +%description i18n-mni +This package contains additional Manipuri translations and resources for LibreOffice. + +%files i18n-mni -f file-lists/lang_mni_list.txt +%defattr(-,root,root) + +%package i18n-mai +Summary: Maithili language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=mai) +Obsoletes: OpenOffice-i18n-mai +Provides: libreofficei18n + +%description i18n-mai +This package contains additional Maithili translations and resources for LibreOffice. + +%files i18n-mai -f file-lists/lang_mai_list.txt +%defattr(-,root,root) + +%package i18n-ml +Summary: Malayalam language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=ml) +#Requires: hunspell-ml +#Requires: hyphen-ml +Obsoletes: OpenOffice-i18n-ml_IN +Provides: libreofficei18n + +%description i18n-ml +This package contains additional Malayalam translations and resources for LibreOffice. + +%files i18n-ml -f file-lists/lang_ml_list.txt +%defattr(-,root,root) + +%package i18n-mr +Summary: Marathi language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=mr) +#Requires: hunspell-mr +#Requires: hyphen-mr +Obsoletes: OpenOffice-i18n-mr_IN +Provides: libreofficei18n + +%description i18n-mr +This package contains additional Marathi translations and resources for LibreOffice. + +%files i18n-mr -f file-lists/lang_mr_list.txt +%defattr(-,root,root) + +#%package i18n-ms +#Summary: Malay language support for LibreOffice +#Group: System/Internationalization +#Requires: %{name}-core = %{version}-%{release} +##Requires: font(:lang=ms) +##Requires: hunspell-ms +#Obsoletes: OpenOffice-i18n-ms +# +#%description i18n-ms +#This package contains additional Malay translations and resources for LibreOffice. +# +#%files i18n-ms -f filelist_ms +#%defattr(-,root,root) + +%package i18n-my +Summary: Burmese language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-my +Provides: libreofficei18n + +%description i18n-my +This package contains additional Burmese translations and resources for LibreOffice. + +%files i18n-my -f file-lists/lang_my_list.txt +%defattr(-,root,root) + +%package i18n-ne +Summary: Nepali language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-ne +Provides: libreofficei18n + +%description i18n-ne +This package contains additional Nepali translations and resources for LibreOffice. + +%files i18n-ne -f file-lists/lang_ne_list.txt +%defattr(-,root,root) + +%package i18n-nb +Summary: Norwegian Bokmål language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=nb) +#Requires: hunspell-nb +#Requires: hyphen-nb +#Requires: mythes-nb +Obsoletes: OpenOffice-i18n-nb +Provides: libreofficei18n + +%description i18n-nb +This package contains additional Norwegian Bokmål translations and resources for LibreOffice. + +%files i18n-nb -f file-lists/lang_nb_list.txt +%defattr(-,root,root) + +%package i18n-nl +Summary: Dutch language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-nl +#Requires: hyphen-nl +#Requires: mythes-nl +Obsoletes: OpenOffice-i18n-nl +Provides: libreofficei18n + +%description i18n-nl +This package contains additional Dutch translations and resources for LibreOffice. + +%files i18n-nl -f file-lists/lang_nl_list.txt +%defattr(-,root,root) + +%package i18n-nn +Summary: Norwegian nynorsk language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=nn) +#Requires: hunspell-nn +#Requires: hyphen-nn +#Requires: mythes-nn +Obsoletes: OpenOffice-i18n-nn +Provides: libreofficei18n + +%description i18n-nn +This package contains additional Norwegian nynorsk translations and resources for LibreOffice. + +%files i18n-nn -f file-lists/lang_nn_list.txt +%defattr(-,root,root) + +%package i18n-nr +Summary: Southern Ndebele language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=nr) +#Requires: hunspell-nr +Obsoletes: OpenOffice-i18n-nr +Provides: libreofficei18n + +%description i18n-nr +This package contains additional Southern Ndebele translations and resources for LibreOffice. + +%files i18n-nr -f file-lists/lang_nr_list.txt +%defattr(-,root,root) + +%package i18n-nso +Summary: Northern Sotho language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=nso) +#Requires: hunspell-nso +Obsoletes: OpenOffice-i18n-ns +Provides: libreofficei18n + +%description i18n-nso +This package contains additional Northern Sotho translations and resources for LibreOffice. + +%files i18n-nso -f file-lists/lang_nso_list.txt +%defattr(-,root,root) + +%package i18n-oc +Summary: Occitan language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-oc +Provides: libreofficei18n + +%description i18n-oc +This package contains additional Occitan translations and resources for LibreOffice. + +%files i18n-oc -f file-lists/lang_oc_list.txt +%defattr(-,root,root) + +%package i18n-om +Summary: Oromo language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-om +Provides: libreofficei18n + +%description i18n-om +This package contains additional Oromo translations and resources for LibreOffice. + +%files i18n-om -f file-lists/lang_om_list.txt +%defattr(-,root,root) + +%package i18n-or +Summary: Oriya (India) language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=or) +#Requires: hunspell-or +#Requires: hyphen-or +Obsoletes: OpenOffice-i18n-or_IN +Provides: libreofficei18n + +%description i18n-or +This package contains additional Oriya (India) translations and resources for LibreOffice. + +%files i18n-or -f file-lists/lang_or_list.txt +%defattr(-,root,root) + +%package i18n-pa_IN +Summary: Punjabi language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=pa) +#Requires: hunspell-pa +#Requires: hyphen-pa +Obsoletes: OpenOffice-i18n-pa_IN +Provides: libreofficei18n + +%description i18n-pa_IN +This package contains additional Punjabi translations and resources for LibreOffice. + +%files i18n-pa_IN -f file-lists/lang_pa_IN_list.txt +%defattr(-,root,root) + +%package i18n-pl +Summary: Polish language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=pl) +#Requires: hunspell-pl +#Requires: hyphen-pl +#Requires: mythes-pl +Obsoletes: OpenOffice-i18n-pl +Provides: libreofficei18n + +%description i18n-pl +This package contains additional Polish translations and resources for LibreOffice. +# -f pl.filelist +%files i18n-pl -f file-lists/lang_pl_list.txt +%defattr(-,root,root) + +%package i18n-pt_BR +Summary: Brazilian Portuguese language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-pt +#Requires: hyphen-pt +#Requires: mythes-pt +Obsoletes: OpenOffice-i18n-pt_BR +Provides: libreofficei18n + +%description i18n-pt_BR +This package contains additional Brazilian Portuguese translations and resources for LibreOffice. + +%files i18n-pt_BR -f file-lists/lang_pt_BR_list.txt +%defattr(-,root,root) + +%package i18n-pt +Summary: Portuguese language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-pt +#Requires: hyphen-pt +#Requires: mythes-pt +Obsoletes: OpenOffice-i18n-pt +Provides: libreofficei18n + +%description i18n-pt +This package contains additional Portuguese translations and resources for LibreOffice. + +%files i18n-pt -f file-lists/lang_pt_list.txt +%defattr(-,root,root) + +%package i18n-qtz +Summary: KeyID language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Provides: libreofficei18n + +%description i18n-qtz +This package contains additional KeyID translations and resources for LibreOffice. + +%files i18n-qtz -f file-lists/lang_qtz_list.txt +%defattr(-,root,root) + +%package i18n-ro +Summary: Romanian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=ro) +#Requires: hunspell-ro +#Requires: hyphen-ro +#Requires: mythes-ro +Obsoletes: OpenOffice-i18n-ro +Provides: libreofficei18n + +%description i18n-ro +This package contains additional Romanian translations and resources for LibreOffice. + +%files i18n-ro -f file-lists/lang_ro_list.txt +%defattr(-,root,root) + +%package i18n-ru +Summary: Russian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-ru +#Requires: hyphen-ru +#Requires: mythes-ru +Obsoletes: OpenOffice-i18n-ru +Provides: libreofficei18n + +%description i18n-ru +This package contains additional Russian translations and resources for LibreOffice. + +%files i18n-ru -f file-lists/lang_ru_list.txt +%defattr(-,root,root) + +%package i18n-rw +Summary: Kinyarwanda language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-rw +Provides: libreofficei18n + +%description i18n-rw +This package contains additional Kinyarwanda translations and resources for LibreOffice. + +%files i18n-rw -f file-lists/lang_rw_list.txt +%defattr(-,root,root) + +%package i18n-sa_IN +Summary: Sanskrit (India) language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-sa_IN +Provides: libreofficei18n + +%description i18n-sa_IN +This package contains additional Sanskrit (India) translations and resources for LibreOffice. + +%files i18n-sa_IN -f file-lists/lang_sa_IN_list.txt +%defattr(-,root,root) + +%package i18n-sat +Summary: Santali language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-sat +Provides: libreofficei18n + +%description i18n-sat +This package contains additional Santali translations and resources for LibreOffice. + +%files i18n-sat -f file-lists/lang_sat_list.txt +%defattr(-,root,root) + +%package i18n-sd +Summary: Sindhi language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-sd +Provides: libreofficei18n + +%description i18n-sd +This package contains additional Sindhi translations and resources for LibreOffice. + +%files i18n-sd -f file-lists/lang_sd_list.txt +%defattr(-,root,root) + +%package i18n-si +Summary: Sinhalese language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-si +Provides: libreofficei18n + +%description i18n-si +This package contains additional Sinhalese translations and resources for LibreOffice. + +%files i18n-si -f file-lists/lang_si_list.txt +%defattr(-,root,root) + +%package i18n-sid +Summary: Sid (?) language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-sd +Provides: libreofficei18n + +%description i18n-sid +This package contains additional Sid (?) translations and resources for LibreOffice. + +%files i18n-sid -f file-lists/lang_sid_list.txt +%defattr(-,root,root) + +%package i18n-sk +Summary: Slovak language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-sk +Provides: libreofficei18n + +%description i18n-sk +This package contains additional Slovak translations and resources for LibreOffice. + +%files i18n-sk -f file-lists/lang_sk_list.txt +%defattr(-,root,root) + +%package i18n-sl +Summary: Slovenian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-sl +Provides: libreofficei18n + +%description i18n-sl +This package contains additional Slovenian translations and resources for LibreOffice. + +%files i18n-sl -f file-lists/lang_sl_list.txt +%defattr(-,root,root) + +%package i18n-sq +Summary: Albanien language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-sq +Provides: libreofficei18n + +%description i18n-sq +This package contains additional Albanien translations and resources for LibreOffice. + +%files i18n-sq -f file-lists/lang_sq_list.txt +%defattr(-,root,root) + +%package i18n-sr +Summary: Serbian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-sr +Provides: libreofficei18n + +%description i18n-sr +This package contains additional Serbian translations and resources for LibreOffice. + +%files i18n-sr -f file-lists/lang_sr_list.txt +%defattr(-,root,root) + +%package i18n-sr_Latn +Summary: Serbian latin language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-sh +Provides: libreofficei18n + +%description i18n-sr_Latn +This package contains additional Serbian latin translations and resources for LibreOffice. + +%files i18n-sr_Latn -f file-lists/lang_sr_Latn_list.txt +%defattr(-,root,root) + +%package i18n-ss +Summary: Swati language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=ss) +#Requires: hunspell-ss +Obsoletes: OpenOffice-i18n-ss +Provides: libreofficei18n + +%description i18n-ss +This package contains additional Swati translations and resources for LibreOffice. + +%files i18n-ss -f file-lists/lang_ss_list.txt +%defattr(-,root,root) + +%package i18n-st +Summary: Southern Sotho language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=st) +#Requires: hunspell-st +Obsoletes: OpenOffice-i18n-st +Provides: libreofficei18n + +%description i18n-st +This package contains additional Southern Sotho translations and resources for LibreOffice. +# -f st.filelist +%files i18n-st -f file-lists/lang_st_list.txt +%defattr(-,root,root) + +%package i18n-sv +Summary: Swedish language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: hunspell-sv +#Requires: hyphen-sv +#Requires: mythes-sv +Obsoletes: OpenOffice-i18n-sv +Provides: libreofficei18n + +%description i18n-sv +This package contains additional Swedish translations and resources for LibreOffice. + +%files i18n-sv -f file-lists/lang_sv_list.txt +%defattr(-,root,root) + +%package i18n-sw_TZ +Summary: Swahili (Tanzania) language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-sw_TZ +Provides: libreofficei18n + +%description i18n-sw_TZ +This package contains additional Swahili (Tanzania) translations and resources for LibreOffice. + +%files i18n-sw_TZ -f file-lists/lang_sw_TZ_list.txt +%defattr(-,root,root) + +%package i18n-ta +Summary: Tamil language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=ta) +#Requires: hunspell-ta +#Requires: hyphen-ta +Obsoletes: OpenOffice-i18n-ta_IN +Provides: libreofficei18n + +%description i18n-ta +This package contains additional Tamil translations and resources for LibreOffice. + +%files i18n-ta -f file-lists/lang_ta_list.txt +%defattr(-,root,root) + +%package i18n-te +Summary: Telugu language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=te) +#Requires: hunspell-te +#Requires: hyphen-te +Obsoletes: OpenOffice-i18n-te_IN +Provides: libreofficei18n + +%description i18n-te +This package contains additional Telugu translations and resources for LibreOffice. + +%files i18n-te -f file-lists/lang_te_list.txt +%defattr(-,root,root) + +%package i18n-tg +Summary: Tajik language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-tg +Provides: libreofficei18n + +%description i18n-tg +This package contains additional Tajik translations and resources for LibreOffice. + +%files i18n-tg -f file-lists/lang_tg_list.txt +%defattr(-,root,root) + +%package i18n-th +Summary: Thai language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=th) +#Requires: hunspell-th +Obsoletes: OpenOffice-i18n-th +Provides: libreofficei18n + +%description i18n-th +This package contains additional Thai translations and resources for LibreOffice. + +%files i18n-th -f file-lists/lang_th_list.txt +%defattr(-,root,root) + +%package i18n-tn +Summary: Tswana language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=tn) +#Requires: hunspell-tn +Obsoletes: OpenOffice-i18n-tn +Provides: libreofficei18n + +%description i18n-tn +This package contains additional Tswana translations and resources for LibreOffice. + +%files i18n-tn -f file-lists/lang_tn_list.txt +%defattr(-,root,root) + +%package i18n-tr +Summary: Turkish language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-tr +Provides: libreofficei18n + +%description i18n-tr +This package contains additional Turkish translations and resources for LibreOffice. + +%files i18n-tr -f file-lists/lang_tr_list.txt +%defattr(-,root,root) + +%package i18n-ts +Summary: Tsonga language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=ts) +#Requires: hunspell-ts +Obsoletes: OpenOffice-i18n-ts +Provides: libreofficei18n + +%description i18n-ts +This package contains additional Tsonga translations and resources for LibreOffice. + +%files i18n-ts -f file-lists/lang_ts_list.txt +%defattr(-,root,root) + +%package i18n-tt +Summary: Tatar language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Provides: libreofficei18n + +%description i18n-tt +This package contains additional Tatar translations and resources for LibreOffice. + +%files i18n-tt -f file-lists/lang_tt_list.txt +%defattr(-,root,root) + +%package i18n-ug +Summary: Uighur language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-ug +Provides: libreofficei18n + +%description i18n-ug +This package contains additional Uighur translations and resources for LibreOffice. + +%files i18n-ug -f file-lists/lang_ug_list.txt +%defattr(-,root,root) + +%package i18n-uk +Summary: Ukrainian language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=uk) +Requires: hunspell-uk +#Requires: hyphen-uk +#Requires: mythes-uk +Obsoletes: OpenOffice-i18n-uk +Provides: libreofficei18n + +%description i18n-uk +This package contains additional Ukrainian translations and resources for LibreOffice. + +%files i18n-uk -f file-lists/lang_uk_list.txt +%defattr(-,root,root) + +#%package i18n-ur +#Summary: Urdu language support for LibreOffice +#Group: System/Internationalization +#Requires: %{name}-core = %{version}-%{release} +##Requires: font(:lang=ur) +#Requires: hunspell-ur +#Obsoletes: OpenOffice-i18n-ur_IN +# +#%description i18n-ur +#This package contains additional Urdu translations and resources for LibreOffice. +# +#%files i18n-ur -f filelist_ur +#%defattr(-,root,root) + +%package i18n-uz +Summary: Uzbek language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-uz +Provides: libreofficei18n + +%description i18n-uz +This package contains additional Uzbek translations and resources for LibreOffice. + +%files i18n-uz -f file-lists/lang_uz_list.txt +%defattr(-,root,root) + +%package i18n-ve +Summary: Venda language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=ve) +Requires: hunspell-ve +Obsoletes: OpenOffice-i18n-ve +Provides: libreofficei18n + +%description i18n-ve +This package contains additional Venda translations and resources for LibreOffice. + +%files i18n-ve -f file-lists/lang_ve_list.txt +%defattr(-,root,root) + +%package i18n-vi +Summary: Vietnamese language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-vi +Provides: libreofficei18n + +%description i18n-vi +This package contains additional Vietnamese translations and resources for LibreOffice. + +%files i18n-vi -f file-lists/lang_vi_list.txt +%defattr(-,root,root) + +%package i18n-xh +Summary: Xhosa language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +#Requires: font(:lang=xh) +Requires: hunspell-xh +Obsoletes: OpenOffice-i18n-xh +Provides: libreofficei18n + +%description i18n-xh +This package contains additional Xhosa translations and resources for LibreOffice. + +%files i18n-xh -f file-lists/lang_xh_list.txt +%defattr(-,root,root) + +%package i18n-zh_CN +Summary: Simplified Chinese language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-zh_CN +Provides: libreofficei18n + +%description i18n-zh_CN +This package contains additional Simplified Chinese translations and resources for LibreOffice. + +%files i18n-zh_CN -f file-lists/lang_zh_CN_list.txt +%defattr(-,root,root) + +%package i18n-zh_TW +Summary: Traditional Chinese language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Obsoletes: OpenOffice-i18n-zh_TW +Provides: libreofficei18n + +%description i18n-zh_TW +This package contains additional Traditional Chinese translations and resources for LibreOffice. + +%files i18n-zh_TW -f file-lists/lang_zh_TW_list.txt +%defattr(-,root,root) + +%package i18n-zu +Summary: Zulu language support for LibreOffice +Group: System/Internationalization +Requires: %{name}-core = %{version}-%{release} +Requires: hunspell-zu +Requires: hyphen-zu +Obsoletes: OpenOffice-i18n-zu +Provides: libreofficei18n + +%description i18n-zu +This package contains additional Zulu translations and resources for LibreOffice. + +%files i18n-zu -f file-lists/lang_zu_list.txt +%defattr(-,root,root) +%endif + +%changelog +* Sun Apr 13 2014 Silvan Calarco 4.2.3.3-1mamba +- update to 4.2.3.3 + +* Fri Mar 07 2014 Silvan Calarco 4.2.2.1-1mamba +- update to 4.2.2.1 + +* Sat Feb 01 2014 Silvan Calarco 4.2.0.4-1mamba +- update to 4.2.0.4 + +* Mon Dec 02 2013 Silvan Calarco 4.1.4.1-1mamba +- update to 4.1.4.1 + +* Sat Nov 02 2013 Silvan Calarco 4.1.3.2-1mamba +- update to 4.1.3.2 + +* Thu Oct 10 2013 Automatic Build System 4.1.2.3-1mamba +- update to 4.1.2.3 + +* Fri Aug 30 2013 Automatic Build System 4.1.1.2-1mamba +- update to 4.1.1.2 + +* Fri Jul 26 2013 Automatic Build System 4.1.0.4-1mamba +- update to 4.1.0.4 + +* Mon Jul 22 2013 Silvan Calarco 4.0.4.2-2mamba +- rebuilt with libpoppler 0.22.5, libboost 1.54 and libexttextcat 3.4.3 + +* Wed Jun 19 2013 Automatic Build System 4.0.4.2-1mamba +- update to 4.0.4.2 + +* Sat May 11 2013 Automatic Build System 4.0.3.3-1mamba +- update to 4.0.3.3 + +* Wed Mar 13 2013 Automatic Build System 4.0.1.2-1mamba +- update to 4.0.1.2 + +* Mon Feb 11 2013 Automatic Build System 4.0.0.3-1mamba +- update to 4.0.0.3 + +* Sun Feb 03 2013 Automatic Build System 3.6.5.2-1mamba +- update to 3.6.5.2 + +* Tue Jul 31 2012 Automatic Build System 3.6.0.4-1mamba +- update to 3.6.0.4 + +* Thu Jun 07 2012 Automatic Build System 3.5.4.2-1mamba +- update to 3.5.4.2 + +* Fri May 04 2012 Automatic Build System 3.5.3.2-1mamba +- update to 3.5.3.2 + +* Wed Jan 25 2012 Automatic Build System 3.4.5.2-1mamba +- update to 3.4.5.2 + +* Mon Nov 14 2011 Automatic Build System 3.4.4.2-1mamba +- update to 3.4.4.2 + +* Tue Oct 18 2011 Silvan Calarco 3.4.3.2-3mamba +- use make distro-pack-install to provide upstream maintained installation and package lists for distributions +- enable extensions build +- provide openmamba customized intro image + +* Sat Oct 15 2011 Silvan Calarco 3.4.3.2-2mamba +- rebuilt with db 5.1; use make for build + +* Wed Oct 12 2011 Silvan Calarco 3.4.3.2-1mamba +- update to 3.4.3.2 + +* Tue Mar 15 2011 gil 3.3.2.1-1mamba +- update to 3.3.2.1 + +* Fri Mar 04 2011 gil 3.3.1.2-2mamba +- fix wrong soffice home in libreoffice script + +* Wed Mar 02 2011 gil 3.3.1.2-1mamba +- update to 3.3.1.2 + +* Sat Jan 22 2011 gil 3.3.0.4-1mamba +- package created by autospec diff --git a/openoffice.org-1.9.123.ooo53397.prelinkoptimize.desktop.patch b/openoffice.org-1.9.123.ooo53397.prelinkoptimize.desktop.patch new file mode 100644 index 0000000..2cc4620 --- /dev/null +++ b/openoffice.org-1.9.123.ooo53397.prelinkoptimize.desktop.patch @@ -0,0 +1,111 @@ +diff -r a92d0bd6747b desktop/prj/build.lst +--- a/desktop/prj/build.lst Mon Dec 28 16:11:17 2009 +0100 ++++ b/desktop/prj/build.lst Wed Dec 30 09:34:10 2009 +0100 +@@ -1,4 +1,4 @@ +-dt desktop : l10n sfx2 stoc BERKELEYDB:berkeleydb sysui SO:sysui_so BOOST:boost svx xmlhelp sal unoil officecfg offuh NULL ++dt desktop : l10n sfx2 stoc BERKELEYDB:berkeleydb sysui SO:sysui_so BOOST:boost svx xmlhelp sal unoil officecfg offuh sc sd sw NULL + dt desktop usr1 - all dt_mkout NULL + dt desktop\inc nmake - all dt_inc NULL + dt desktop\prj get - all dt_prj NULL +diff -r a92d0bd6747b desktop/scripts/soffice.sh +--- a/desktop/scripts/soffice.sh Mon Dec 28 16:11:17 2009 +0100 ++++ b/desktop/scripts/soffice.sh Wed Dec 30 09:34:10 2009 +0100 +@@ -90,30 +90,26 @@ + fi + fi + +-# pagein +-sd_pagein_args=@pagein-common + for sd_arg in "$@"; do + case ${sd_arg} in + -calc) +- sd_pagein_args="${sd_pagein_args} @pagein-calc" ++ sd_binary="scalc.bin" + break; + ;; + -draw) +- sd_pagein_args="${sd_pagein_args} @pagein-draw" ++ sd_binary="sdraw.bin" + break; + ;; + -impress) +- sd_pagein_args="${sd_pagein_args} @pagein-impress" ++ sd_binary="simpress.bin" + break; + ;; + -writer) +- sd_pagein_args="${sd_pagein_args} @pagein-writer" ++ sd_binary="swriter.bin" + break; + ;; + esac + done +-"$sd_prog/../basis-link/program/pagein" -L"$sd_prog/../basis-link/program" \ +- ${sd_pagein_args} + + # extend the ld_library_path for java: javaldx checks the sofficerc for us + if [ -x "$sd_prog/../basis-link/ure-link/bin/javaldx" ] ; then +diff -r a92d0bd6747b desktop/util/makefile.mk +--- a/desktop/util/makefile.mk Mon Dec 28 16:11:17 2009 +0100 ++++ b/desktop/util/makefile.mk Wed Dec 30 09:34:10 2009 +0100 +@@ -192,6 +192,60 @@ + APP5DEPN= $(APP1TARGETN) $(APP5RES) ooverinfo.rc + APP5DEF= $(MISCX)$/$(TARGET).def + ++.IF "$(OS)" == "LINUX" ++PRELINKLIBS=$(APP5STDLIBS) ++PRELINKLIBS+= \ ++ $(SVXLIB) \ ++ $(SVXCORELIB) \ ++ $(XMLOFFLIB) \ ++ -lfwl$(DLLPOSTFIX) \ ++ -lpackage2 \ ++ -lucpfile1 \ ++ -lucb1 \ ++ $(STORELIB) \ ++ $(REGLIB) \ ++ -lvclplug_gtk$(DLLPOSTFIX) \ ++ -lvclplug_gen$(DLLPOSTFIX) \ ++ $(LNGLIB) \ ++ $(ICUINLIB) ++ ++APP6TARGET=swriter ++APP6NOSAL=TRUE ++APP6RPATH=BRAND ++APP6OBJS=$(APP5OBJS) ++APP6STDLIBS=$(PRELINKLIBS) \ ++ $(ISWLIB) ++APP6DEPN=$(APP5DEPN) ++APP6DEF=$(MISCX)$/$(TARGET).def ++ ++APP7TARGET=scalc ++APP7NOSAL=TRUE ++APP7RPATH=BRAND ++APP7OBJS=$(APP5OBJS) ++APP7STDLIBS=$(PRELINKLIBS) \ ++ $(ISCLIB) ++APP7DEPN=$(APP5DEPN) ++APP7DEF=$(MISCX)$/$(TARGET).def ++ ++APP8TARGET=sdraw ++APP8NOSAL=TRUE ++APP8RPATH=BRAND ++APP8OBJS=$(APP5OBJS) ++APP8STDLIBS=$(PRELINKLIBS) \ ++ $(ISDLIB) ++APP8DEPN=$(APP5DEPN) ++APP8DEF=$(MISCX)$/$(TARGET).def ++ ++APP9TARGET=simpress ++APP9NOSAL=TRUE ++APP9RPATH=BRAND ++APP9OBJS=$(APP5OBJS) ++APP9STDLIBS=$(PRELINKLIBS) \ ++ $(ISDLIB) ++APP9DEPN=$(APP5DEPN) ++APP9DEF=$(MISCX)$/$(TARGET).def ++.ENDIF ++ + .IF "$(GUI)" == "WNT" + APP5RES= $(RES)$/oodesktop.res + APP5ICON=$(SOLARRESDIR)$/icons/ooo3_main_app.ico diff --git a/openoffice.org-2.0.2.rh188467.printingdefaults.patch b/openoffice.org-2.0.2.rh188467.printingdefaults.patch new file mode 100644 index 0000000..45c40aa --- /dev/null +++ b/openoffice.org-2.0.2.rh188467.printingdefaults.patch @@ -0,0 +1,15 @@ +Index: configuration/ppds/SGENPRT.PS +=================================================================== +RCS file: /cvs/external/psprint_config/configuration/ppds/SGENPRT.PS,v +retrieving revision 1.3 +diff -u -p -u -r1.3 SGENPRT.PS +--- openoffice.org.orig/psprint_config/configuration/ppds/SGENPRT.PS 26 Nov 2004 16:10:35 -0000 1.3 ++++ openoffice.org/psprint_config/configuration/ppds/SGENPRT.PS 30 Aug 2005 11:17:51 -0000 +@@ -58,6 +58,7 @@ + *ColorDevice: True + *DefaultColorSpace: RGB + *LanguageLevel: "2" ++*TTRasterizer: Type42 + + *% --- For None Color or old PostScript(R) printers use following lines --- + *% *ColorDevice: False diff --git a/openoffice.org-2.2.0.gccXXXXX.solenv.javaregistration.patch b/openoffice.org-2.2.0.gccXXXXX.solenv.javaregistration.patch new file mode 100644 index 0000000..0deea14 --- /dev/null +++ b/openoffice.org-2.2.0.gccXXXXX.solenv.javaregistration.patch @@ -0,0 +1,53 @@ +--- solenv/bin/modules/installer/globals.pm 2010-05-25 21:01:11.000000000 +0100 ++++ solenv/bin/modules/installer/globals.pm 2010-05-27 08:01:11.000000000 +0100 +@@ -404,8 +404,8 @@ + %usedtreeconditions = (); + %moduledestination = (); + +- $unomaxservices = 1800; # regcomp -c argument length +- $javamaxservices = 15; ++ $unomaxservices = 1; # regcomp -c argument length ++ $javamaxservices = 1; + + $one_cab_file = 0; + $fix_number_of_cab_files = 1; +--- solenv/bin/modules/installer/servicesfile.pm 2010-05-25 21:01:11.000000000 +0100 ++++ solenv/bin/modules/installer/servicesfile.pm 2010-06-10 09:07:46.000000000 +0100 +@@ -222,17 +231,31 @@ + if ( $i % $installer::globals::javamaxservices == 0 || $i > $#{$javacomponents} ) # limiting to $installer::globals::maxservices files + { + my @regcompoutput = (); ++ my @throwregcompoutput = (); + + my $systemcall = "$installer::globals::wrapcmd $$regcompfileref -register -br ".fix_cygwin_path($regcomprdb)." -r ".fix_cygwin_path($servicesfile)." -c " . $installer::globals::quote . $filestring . $installer::globals::quote . " -l com.sun.star.loader.Java2 -wop=" . $installer::globals::quote . $javaservicesurlprefix . $installer::globals::quote ." -env:URE_INTERNAL_JAVA_DIR=" . $installer::globals::quote . make_file_url($$ure_internal_java_dir_ref) . $installer::globals::quote . " 2\>\&1 |"; + +- open (REG, "$systemcall"); +- while () {push(@regcompoutput, $_); } +- close (REG); ++ my $returnvalue = 1; ++ my $infoline = "Systemcall: $systemcall\n"; + +- my $returnvalue = $?; # $? contains the return value of the systemcall ++ for ( my $j = 0; $j <= 10; $j++) { ++ open (REG, "$systemcall"); ++ while () {push(@throwregcompoutput, $_); } ++ close (REG); ++ ++ $returnvalue = $?; # $? contains the return value of the systemcall + +- my $infoline = "Systemcall: $systemcall\n"; +- push( @installer::globals::logfileinfo, $infoline); ++ push( @installer::globals::logfileinfo, $infoline); ++ ++ if ($returnvalue == 0) { ++ last; ++ } ++ ++ $infoline = "RATS: attempt $j: $systemcall\n"; ++ push( @installer::globals::logfileinfo, $infoline); ++ } ++ ++ $regcompoutput = $throwregcompoutput; + + for ( my $k = 0; $k <= $#regcompoutput; $k++ ) { push( @installer::globals::logfileinfo, "$regcompoutput[$k]"); } + diff --git a/openoffice.org-2.4.0.ooo86080.unopkg.bodge.patch b/openoffice.org-2.4.0.ooo86080.unopkg.bodge.patch new file mode 100644 index 0000000..14f586c --- /dev/null +++ b/openoffice.org-2.4.0.ooo86080.unopkg.bodge.patch @@ -0,0 +1,47 @@ +--- openoffice.org.orig/desktop/scripts/unopkg.sh 2008-01-14 15:55:26.000000000 +0000 ++++ openoffice.org/desktop/scripts/unopkg.sh 2008-02-14 10:52:10.000000000 +0000 +@@ -57,6 +57,33 @@ + ;; + esac + ++isshared=0 ++for arg in $@ ++do ++if [ "$arg" = "--shared" ]; then ++ isshared=1 ++fi ++done ++if [ $isshared -eq 1 ]; then ++ echo $@ | grep -q env:JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY ++ if [ $? -ne 0 ]; then ++ set -- $@ '-env:JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY=1' ++ fi ++ echo $@ | grep -q env:UNO_JAVA_JFW_INSTALL_DATA ++ if [ $? -ne 0 -a -w $sd_prog/../share/config/javasettingsunopkginstall.xml ]; then ++ set -- $@ '-env:UNO_JAVA_JFW_INSTALL_DATA=$$ORIGIN/../share/config/javasettingsunopkginstall.xml' ++ fi ++ echo $@ | grep -q env:UserInstallation ++ if [ $? -ne 0 ]; then ++ INSTDIR=`/bin/mktemp -d --tmpdir unoinstall.XXXXXX` ++ if [ $? -ne 0 ]; then ++ echo "Could not create tmp dir" >&2 ++ exit 1 ++ fi ++ set -- $@ '-env:UserInstallation=file://'$INSTDIR ++ fi ++fi ++ + #collect all bootstrap variables specified on the command line + #so that they can be passed as arguments to javaldx later on + for arg in $@ +@@ -94,6 +121,8 @@ + # SAL_NO_XINITTHREADS=true; export SAL_NO_XINITTHREADS + + # execute binary +-exec "$sd_prog/unopkg.bin" "$@" \ ++"$sd_prog/unopkg.bin" "$@" \ + "-env:INIFILENAME=vnd.sun.star.pathname:$sd_prog/redirectrc" +- ++if [ -n "$INSTDIR" ]; then ++ rm -rf $INSTDIR ++fi diff --git a/openoffice.org-3.0.0.ooo88341.sc.verticalboxes.patch b/openoffice.org-3.0.0.ooo88341.sc.verticalboxes.patch new file mode 100644 index 0000000..5dabc48 --- /dev/null +++ b/openoffice.org-3.0.0.ooo88341.sc.verticalboxes.patch @@ -0,0 +1,105 @@ +Index: source/ui/inc/output.hxx +=================================================================== +RCS file: /cvs/sc/sc/source/ui/inc/output.hxx,v +retrieving revision 1.19 +diff -u -r1.19 output.hxx +--- openoffice.org.orig/sc/source/ui/inc/output.hxx 26 Jun 2007 11:50:45 -0000 1.19 ++++ openoffice.org/sc/source/ui/inc/output.hxx 16 Apr 2008 12:05:59 -0000 +@@ -242,6 +242,7 @@ + void DrawExtraShadow(BOOL bLeft, BOOL bTop, BOOL bRight, BOOL bBottom); + void DrawFrame(); + ++ bool UseNormalClip(SCROW nCellY, const SfxItemSet* pCondSet); + // with logic MapMode set! + void DrawEdit(BOOL bPixelToLogic); + +Index: source/ui/view/output2.cxx +=================================================================== +RCS file: /cvs/sc/sc/source/ui/view/output2.cxx,v +retrieving revision 1.54.216.1 +diff -u -r1.54.216.1 output2.cxx +--- openoffice.org.orig/sc/source/ui/view/output2.cxx 18 Jan 2008 12:02:36 -0000 1.54.216.1 ++++ openoffice.org/sc/source/ui/view/output2.cxx 16 Apr 2008 12:19:34 -0000 +@@ -2369,6 +2369,22 @@ + + } + ++ ++bool ScOutputData::UseNormalClip(SCROW nCellY, const SfxItemSet* pCondSet) ++{ ++ bool bNormalClip = false; ++ // Don't clip for text height when printing rows with optimal height, ++ // except when font size is from conditional formatting. ++ //! Allow clipping when vertically merged? ++ if ( eType != OUTTYPE_PRINTER || ++ ( pDoc->GetRowFlags( nCellY, nTab ) & CR_MANUALSIZE ) || ++ ( pCondSet && SFX_ITEM_SET == ++ pCondSet->GetItemState(ATTR_FONT_HEIGHT, TRUE) ) ) ++ bNormalClip = TRUE; ++ return bNormalClip; ++} ++ ++ + void ScOutputData::DrawEdit(BOOL bPixelToLogic) + { + vcl::PDFExtOutDevData* pPDFData = PTR_CAST( vcl::PDFExtOutDevData, pDev->GetExtOutDevData() ); +@@ -2878,13 +2894,8 @@ + (ScMergeAttr*)&pPattern->GetItem(ATTR_MERGE); + BOOL bMerged = pMerge->GetColMerge() > 1 || pMerge->GetRowMerge() > 1; + +- // Don't clip for text height when printing rows with optimal height, +- // except when font size is from conditional formatting. +- //! Allow clipping when vertically merged? +- if ( eType != OUTTYPE_PRINTER || +- ( pDoc->GetRowFlags( nCellY, nTab ) & CR_MANUALSIZE ) || +- ( pCondSet && SFX_ITEM_SET == +- pCondSet->GetItemState(ATTR_FONT_HEIGHT, TRUE) ) ) ++ ++ if (UseNormalClip(nCellY, pCondSet)) + bClip = TRUE; + else + bSimClip = TRUE; +@@ -2920,6 +2931,19 @@ + } + + Rectangle aLogicClip; ++ if ( ++ ((nAttrRotate == 9000) || (nAttrRotate == 27000)) && ++ (!(aAlignParam.meOrient==SVX_ORIENTATION_STANDARD && ++ !aAlignParam.mbAsianVertical)) && ++ (!(bClip || bSimClip)) ++ ) ++ { ++ if (UseNormalClip(nCellY, pCondSet)) ++ bClip = TRUE; ++ else ++ bSimClip = TRUE; ++ } ++ + if (bClip || bSimClip) + { + // Clip marks are already handled in GetOutputArea +@@ -3734,11 +3758,21 @@ + else + { + // bei gedrehtem Text ist Standard zentriert ++ long nDiff = 0; + if (eHorJust==SVX_HOR_JUSTIFY_RIGHT) +- aLogicStart.X() += nAvailWidth - nEngineWidth; ++ nDiff = nAvailWidth - nEngineWidth; + else if (eHorJust==SVX_HOR_JUSTIFY_CENTER || + eHorJust==SVX_HOR_JUSTIFY_STANDARD) +- aLogicStart.X() += (nAvailWidth - nEngineWidth) / 2; ++ nDiff = (nAvailWidth - nEngineWidth) / 2; ++ ++ if (nEngineWidth > nAvailWidth) ++ { ++ if (nAttrRotate == 9000) ++ nDiff = 0; ++ else if (nAttrRotate == 27000) ++ nDiff = nAvailWidth - nEngineWidth; ++ } ++ aLogicStart.X() += nDiff; + } + } + diff --git a/openoffice.org-3.1.0.ooo101274.opening-a-directory.patch b/openoffice.org-3.1.0.ooo101274.opening-a-directory.patch new file mode 100644 index 0000000..8475362 --- /dev/null +++ b/openoffice.org-3.1.0.ooo101274.opening-a-directory.patch @@ -0,0 +1,174 @@ +Index: ucbhelper/source/client/content.cxx +=================================================================== +--- ucbhelper/source/client/content.cxx (revision 270567) ++++ ucbhelper/source/client/content.cxx (working copy) +@@ -39,6 +39,7 @@ + #include + + #include ++#include + #include + #include + #include +@@ -48,6 +49,8 @@ + #include + #include + #include ++#include ++#include + #include + #include + #include +@@ -65,6 +68,8 @@ + #include + #include + #include ++#include ++ + #include + #include + #include +@@ -72,6 +77,10 @@ + #include + #include + #include ++#include ++#include ++ ++#include + + using namespace com::sun::star::container; + using namespace com::sun::star::beans; +@@ -375,6 +384,54 @@ + return Reference< XContent >(); + } + ++namespace ++{ ++ ++void ++lcl_displayMessage( ++ const Reference& rEnvironment, ++ const rtl::OUString& rUri) ++{ ++ // Create exception ++ const Reference xCPM( ++ getContentBroker(true)->getContentProviderManagerInterface()); ++ const PropertyValue aUriProperty( ++ rtl::OUString::createFromAscii("Uri"), ++ -1, ++ makeAny(getSystemPathFromFileURL(xCPM, rUri)), ++ PropertyState_DIRECT_VALUE) ++ ; ++ Sequence lArguments(1); ++ lArguments[0] <<= aUriProperty; ++ const InteractiveAugmentedIOException xError( ++ rtl::OUString(), ++ 0, ++ InteractionClassification_ERROR, ++ IOErrorCode_NO_FILE, ++ lArguments) ++ ; ++ ++ // Create interaction request ++ std::auto_ptr aRequest( ++ new ucbhelper::SimpleInteractionRequest(makeAny(xError), CONTINUATION_APPROVE)); ++ { ++ Reference xContinuation( ++ new ::ucbhelper::InteractionApprove(aRequest.get())); ++ Sequence > lContinuations(1); ++ lContinuations[0].set(xContinuation); ++ aRequest->setContinuations(lContinuations); ++ } ++ ++ Reference xInteraction(rEnvironment->getInteractionHandler()); ++ if (xInteraction.is()) ++ { ++ Reference xRequest(aRequest.release()); ++ xInteraction->handle(xRequest); ++ } ++} ++ ++} ++ + //========================================================================= + //========================================================================= + // +@@ -1186,7 +1243,10 @@ + throw( CommandAbortedException, RuntimeException, Exception ) + { + if ( !isDocument() ) ++ { ++ lcl_displayMessage(m_xImpl->getEnvironment(), getURL()); + return Reference< XInputStream >(); ++ } + + Reference< XActiveDataSink > xSink = new ActiveDataSink; + +@@ -1211,7 +1271,10 @@ + throw( CommandAbortedException, RuntimeException, Exception ) + { + if ( !isDocument() ) ++ { ++ lcl_displayMessage(m_xImpl->getEnvironment(), getURL()); + return Reference< XInputStream >(); ++ } + + Reference< XActiveDataSink > xSink = new ActiveDataSink; + +@@ -1236,7 +1299,10 @@ + throw( CommandAbortedException, RuntimeException, Exception ) + { + if ( !isDocument() ) ++ { ++ lcl_displayMessage(m_xImpl->getEnvironment(), getURL()); + return Reference< XStream >(); ++ } + + Reference< XActiveDataStreamer > xStreamer = new ActiveDataStreamer; + +@@ -1261,7 +1327,10 @@ + throw( CommandAbortedException, RuntimeException, Exception ) + { + if ( !isDocument() ) ++ { ++ lcl_displayMessage(m_xImpl->getEnvironment(), getURL()); + return Reference< XStream >(); ++ } + + Reference< XActiveDataStreamer > xStreamer = new ActiveDataStreamer; + +@@ -1286,7 +1355,10 @@ + throw( CommandAbortedException, RuntimeException, Exception ) + { + if ( !isDocument() ) ++ { ++ lcl_displayMessage(m_xImpl->getEnvironment(), getURL()); + return sal_False; ++ } + + OpenCommandArgument2 aArg; + aArg.Mode = OpenMode::DOCUMENT; +@@ -1309,7 +1381,10 @@ + throw( CommandAbortedException, RuntimeException, Exception ) + { + if ( !isDocument() ) ++ { ++ lcl_displayMessage(m_xImpl->getEnvironment(), getURL()); + return sal_False; ++ } + + OpenCommandArgument2 aArg; + aArg.Mode = OpenMode::DOCUMENT; +Index: comphelper/source/misc/mediadescriptor.cxx +=================================================================== +--- comphelper/source/misc/stillreadwriteinteraction.cxx 2010-07-06 15:32:02.000000000 +0100 ++++ comphelper/source/misc/stillreadwriteinteraction.cxx 2010-07-06 15:32:31.000000000 +0100 +@@ -103,6 +103,7 @@ + bAbort = ( + (exIO.Code == css::ucb::IOErrorCode_ACCESS_DENIED ) + || (exIO.Code == css::ucb::IOErrorCode_LOCKING_VIOLATION ) ++ || (exIO.Code == css::ucb::IOErrorCode_NO_FILE ) + || (exIO.Code == css::ucb::IOErrorCode_NOT_EXISTING ) + #ifdef MACOSX + // this is a workaround for MAC, on this platform if the file is locked diff --git a/openoffice.org-3.1.0.ooo102061.sc.cellanchoring.patch b/openoffice.org-3.1.0.ooo102061.sc.cellanchoring.patch new file mode 100644 index 0000000..54068f6 --- /dev/null +++ b/openoffice.org-3.1.0.ooo102061.sc.cellanchoring.patch @@ -0,0 +1,1764 @@ +diff -ru sc.orig/inc/document.hxx sc/inc/document.hxx +--- sc.orig/inc/document.hxx 2009-06-04 12:39:48.000000000 +0100 ++++ sc/inc/document.hxx 2009-06-04 12:40:23.000000000 +0100 +@@ -1319,8 +1319,8 @@ + void RestorePrintRanges( const ScPrintRangeSaver& rSaver ); + + SC_DLLPUBLIC Rectangle GetMMRect( SCCOL nStartCol, SCROW nStartRow, +- SCCOL nEndCol, SCROW nEndRow, SCTAB nTab ); +- SC_DLLPUBLIC ScRange GetRange( SCTAB nTab, const Rectangle& rMMRect ); ++ SCCOL nEndCol, SCROW nEndRow, SCTAB nTab ) const; ++ SC_DLLPUBLIC ScRange GetRange( SCTAB nTab, const Rectangle& rMMRect ) const; + + void UpdStlShtPtrsFrmNms(); + void StylesToNames(); +diff -ru sc.orig/inc/drwlayer.hxx sc/inc/drwlayer.hxx +--- sc.orig/inc/drwlayer.hxx 2009-06-04 12:39:49.000000000 +0100 ++++ sc/inc/drwlayer.hxx 2009-06-04 12:40:23.000000000 +0100 +@@ -107,12 +107,10 @@ + BOOL bHyphenatorSet; + + private: +- void MoveAreaTwips( SCTAB nTab, const Rectangle& rArea, const Point& rMove, +- const Point& rTopLeft ); + void MoveCells( SCTAB nTab, SCCOL nCol1,SCROW nRow1, SCCOL nCol2,SCROW nRow2, + SCsCOL nDx,SCsROW nDy, bool bUpdateNoteCaptionPos ); + +- void RecalcPos( SdrObject* pObj, const ScDrawObjData& rData, bool bNegativePage, bool bUpdateNoteCaptionPos ); ++ void RecalcPos( SdrObject* pObj, ScDrawObjData& rData, bool bNegativePage, bool bUpdateNoteCaptionPos ); + + public: + ScDrawLayer( ScDocument* pDocument, const String& rName ); +@@ -194,8 +192,11 @@ + void EnsureGraphicNames(); + + // Verankerung setzen und ermitteln +- static void SetAnchor( SdrObject*, ScAnchorType ); +- static ScAnchorType GetAnchor( const SdrObject* ); ++ static void SetPageAnchored( SdrObject& ); ++ static void SetCellAnchored( SdrObject&, const ScDrawObjData &rAnchor ); ++ static void SetCellAnchoredFromPosition( SdrObject &rObj, const ScDocument &rDoc, SCTAB nTab ); ++ static void UpdateCellAnchorFromPositionEnd( SdrObject &rObj, const ScDocument &rDoc, SCTAB nTab ); ++ static ScAnchorType GetAnchorType( const SdrObject& ); + + // Positionen fuer Detektivlinien + static ScDrawObjData* GetObjData( SdrObject* pObj, BOOL bCreate=FALSE ); +diff -ru sc.orig/inc/userdat.hxx sc/inc/userdat.hxx +--- sc.orig/inc/userdat.hxx 2009-06-04 12:39:49.000000000 +0100 ++++ sc/inc/userdat.hxx 2009-06-04 12:40:23.000000000 +0100 +@@ -63,12 +63,15 @@ + public: + ScAddress maStart; + ScAddress maEnd; ++ Point maStartOffset; ++ Point maEndOffset; + bool mbNote; ++ Rectangle maLastRect; + + explicit ScDrawObjData(); + + private: +- virtual ScDrawObjData* Clone( SdrObject* pObj ) const; ++ virtual ScDrawObjData* Clone( SdrObject* pObj ) const; + }; + + //------------------------------------------------------------------------- +diff -ru sc.orig/source/core/data/documen3.cxx sc/source/core/data/documen3.cxx +--- sc.orig/source/core/data/documen3.cxx 2009-06-04 12:39:09.000000000 +0100 ++++ sc/source/core/data/documen3.cxx 2009-06-04 12:40:23.000000000 +0100 +@@ -1605,7 +1605,7 @@ + return bAdded; + } + +-ScRange ScDocument::GetRange( SCTAB nTab, const Rectangle& rMMRect ) ++ScRange ScDocument::GetRange( SCTAB nTab, const Rectangle& rMMRect ) const + { + ScTable* pTable = pTab[nTab]; + if (!pTable) +@@ -1879,7 +1879,7 @@ + } + + Rectangle ScDocument::GetMMRect( SCCOL nStartCol, SCROW nStartRow, +- SCCOL nEndCol, SCROW nEndRow, SCTAB nTab ) ++ SCCOL nEndCol, SCROW nEndRow, SCTAB nTab ) const + { + if (!ValidTab(nTab) || !pTab[nTab]) + { +diff -ru sc.orig/source/core/data/drwlayer.cxx sc/source/core/data/drwlayer.cxx +--- sc.orig/source/core/data/drwlayer.cxx 2009-06-04 12:39:09.000000000 +0100 ++++ sc/source/core/data/drwlayer.cxx 2009-06-05 12:28:12.000000000 +0100 +@@ -69,6 +69,9 @@ + #include + #include + ++#include ++#include ++ + #include "drwlayer.hxx" + #include "drawpage.hxx" + #include "global.hxx" +@@ -539,7 +542,41 @@ + } + } + +-void ScDrawLayer::RecalcPos( SdrObject* pObj, const ScDrawObjData& rData, bool bNegativePage, bool bUpdateNoteCaptionPos ) ++namespace ++{ ++ //Can't have a zero width dimension ++ Rectangle lcl_makeSafeRectangle(const Rectangle &rNew) ++ { ++ Rectangle aRect = rNew; ++ if (aRect.Bottom() == aRect.Top()) ++ aRect.Bottom() = aRect.Top()+1; ++ if (aRect.Right() == aRect.Left()) ++ aRect.Right() = aRect.Left()+1; ++ return aRect; ++ } ++ ++ Point lcl_calcAvailableDiff(ScDocument &rDoc, SCCOL nCol, SCROW nRow, SCTAB nTab, const Point &aWantedDiff) ++ { ++ Point aAvailableDiff(aWantedDiff); ++ long nHeight = rDoc.GetRowHeight( nRow, nTab ) * HMM_PER_TWIPS; ++ long nWidth = rDoc.GetColWidth( nCol, nTab ) * HMM_PER_TWIPS; ++ if (aAvailableDiff.Y() > nHeight) ++ aAvailableDiff.Y() = nHeight; ++ if (aAvailableDiff.X() > nWidth) ++ aAvailableDiff.X() = nWidth; ++ return aAvailableDiff; ++ } ++ ++ Rectangle lcl_UpdateCalcPoly(basegfx::B2DPolygon &rCalcPoly, int nWhichPoint, const Point &rPos) ++ { ++ rCalcPoly.setB2DPoint(nWhichPoint, basegfx::B2DPoint(rPos.X(), rPos.Y())); ++ basegfx::B2DRange aRange(basegfx::tools::getRange(rCalcPoly)); ++ return Rectangle(aRange.getMinX(), aRange.getMinY(), ++ aRange.getMaxX(), aRange.getMaxY()); ++ } ++} ++ ++void ScDrawLayer::RecalcPos( SdrObject* pObj, ScDrawObjData& rData, bool bNegativePage, bool bUpdateNoteCaptionPos ) + { + DBG_ASSERT( pDoc, "ScDrawLayer::RecalcPos - missing document" ); + if( !pDoc ) +@@ -578,6 +615,8 @@ + + if( bCircle ) + { ++ rData.maLastRect = pObj->GetLogicRect(); ++ + Point aPos( pDoc->GetColOffset( nCol1, nTab1 ), pDoc->GetRowOffset( nRow1, nTab1 ) ); + TwipsToMM( aPos.X() ); + TwipsToMM( aPos.Y() ); +@@ -598,11 +637,18 @@ + { + if (bRecording) + AddCalcUndo( new SdrUndoGeoObj( *pObj ) ); +- pObj->SetLogicRect(aRect); ++ rData.maLastRect = lcl_makeSafeRectangle(aRect); ++ pObj->SetLogicRect(rData.maLastRect); + } + } + else if( bArrow ) + { ++ rData.maLastRect = pObj->GetLogicRect(); ++ basegfx::B2DPolygon aCalcPoly; ++ Point aOrigStartPos(pObj->GetPoint(0)); ++ Point aOrigEndPos(pObj->GetPoint(1)); ++ aCalcPoly.append(basegfx::B2DPoint(aOrigStartPos.X(), aOrigStartPos.Y())); ++ aCalcPoly.append(basegfx::B2DPoint(aOrigEndPos.X(), aOrigEndPos.Y())); + //! nicht mehrere Undos fuer ein Objekt erzeugen (hinteres kann dann weggelassen werden) + + SCCOL nLastCol; +@@ -623,6 +669,8 @@ + { + if (bRecording) + AddCalcUndo( new SdrUndoGeoObj( *pObj ) ); ++ ++ rData.maLastRect = lcl_UpdateCalcPoly(aCalcPoly, 0, aStartPos); + pObj->SetPoint( aStartPos, 0 ); + } + +@@ -637,6 +685,8 @@ + { + if (bRecording) + AddCalcUndo( new SdrUndoGeoObj( *pObj ) ); ++ ++ rData.maLastRect = lcl_UpdateCalcPoly(aCalcPoly, 1, aEndPos); + pObj->SetPoint( aEndPos, 1 ); + } + } +@@ -657,6 +707,8 @@ + { + if (bRecording) + AddCalcUndo( new SdrUndoGeoObj( *pObj ) ); ++ ++ rData.maLastRect = lcl_UpdateCalcPoly(aCalcPoly, 1, aEndPos); + pObj->SetPoint( aEndPos, 1 ); + } + +@@ -673,45 +725,68 @@ + { + if (bRecording) + AddCalcUndo( new SdrUndoGeoObj( *pObj ) ); ++ ++ rData.maLastRect = lcl_UpdateCalcPoly(aCalcPoly, 0, aStartPos); + pObj->SetPoint( aStartPos, 0 ); + } + } + } + } +- else // Referenz-Rahmen ++ else + { ++ bool bCanResize = bValid2 && !pObj->IsResizeProtect(); ++ ++ //First time positioning, must be able to at least move it ++ if (rData.maLastRect.IsEmpty()) ++ rData.maLastRect = pObj->GetLogicRect(); ++ + DBG_ASSERT( bValid1, "ScDrawLayer::RecalcPos - invalid start position" ); + Point aPos( pDoc->GetColOffset( nCol1, nTab1 ), pDoc->GetRowOffset( nRow1, nTab1 ) ); + TwipsToMM( aPos.X() ); + TwipsToMM( aPos.Y() ); ++ aPos += lcl_calcAvailableDiff(*pDoc, nCol1, nRow1, nTab1, rData.maStartOffset); + +- if( bValid2 ) ++ if( bCanResize ) + { +- Point aEnd( pDoc->GetColOffset( nCol2 + 1, nTab2 ), pDoc->GetRowOffset( nRow2 + 1, nTab2 ) ); ++ Point aEnd( pDoc->GetColOffset( nCol2, nTab2 ), pDoc->GetRowOffset( nRow2, nTab2 ) ); + TwipsToMM( aEnd.X() ); + TwipsToMM( aEnd.Y() ); ++ aEnd += lcl_calcAvailableDiff(*pDoc, nCol2, nRow2, nTab2, rData.maEndOffset); + + Rectangle aNew( aPos, aEnd ); + if ( bNegativePage ) + MirrorRectRTL( aNew ); + if ( pObj->GetLogicRect() != aNew ) + { ++ Rectangle aOld(pObj->GetLogicRect()); ++ + if (bRecording) + AddCalcUndo( new SdrUndoGeoObj( *pObj ) ); +- pObj->SetLogicRect(aNew); ++ rData.maLastRect = lcl_makeSafeRectangle(aNew); ++ pObj->SetLogicRect(rData.maLastRect); + } + } + else + { + if ( bNegativePage ) +- aPos.X() = -aPos.X(); ++ aPos.X() = -aPos.X() - rData.maLastRect.GetWidth(); + if ( pObj->GetRelativePos() != aPos ) + { + if (bRecording) + AddCalcUndo( new SdrUndoGeoObj( *pObj ) ); ++ rData.maLastRect.SetPos( aPos ); + pObj->SetRelativePos( aPos ); + } + } ++ ++ /* ++ * If we were not allowed resize the object, then the end cell anchor ++ * is possibly incorrect now, and if the object has no end-cell (e.g. ++ * missing in original .xml) we are also forced to generate one ++ */ ++ bool bEndAnchorIsBad = !bValid2 || pObj->IsResizeProtect(); ++ if (bEndAnchorIsBad) ++ ScDrawLayer::UpdateCellAnchorFromPositionEnd(*pObj, *pDoc, nTab1); + } + } + +@@ -886,151 +961,6 @@ + return pRet; + } + +-// MoveAreaTwips: all measures are kept in twips +-void ScDrawLayer::MoveAreaTwips( SCTAB nTab, const Rectangle& rArea, +- const Point& rMove, const Point& rTopLeft ) +-{ +- if (!rMove.X() && !rMove.Y()) +- return; // nix +- +- SdrPage* pPage = GetPage(static_cast(nTab)); +- DBG_ASSERT(pPage,"Page nicht gefunden"); +- if (!pPage) +- return; +- +- BOOL bNegativePage = pDoc && pDoc->IsNegativePage( nTab ); +- +- // fuer Shrinking! +- Rectangle aNew( rArea ); +- BOOL bShrink = FALSE; +- if ( rMove.X() < 0 || rMove.Y() < 0 ) // verkleinern +- { +- if ( rTopLeft != rArea.TopLeft() ) // sind gleich beim Verschieben von Zellen +- { +- bShrink = TRUE; +- aNew.Left() = rTopLeft.X(); +- aNew.Top() = rTopLeft.Y(); +- } +- } +- SdrObjListIter aIter( *pPage, IM_FLAT ); +- SdrObject* pObject = aIter.Next(); +- while (pObject) +- { +- if( GetAnchor( pObject ) == SCA_CELL ) +- { +- if ( GetObjData( pObject ) ) // Detektiv-Pfeil ? +- { +- // hier nichts +- } +- else if ( pObject->ISA( SdrEdgeObj ) ) // Verbinder? +- { +- // hier auch nichts +- //! nicht verbundene Enden wie bei Linien (s.u.) behandeln? +- } +- else if ( pObject->IsPolyObj() && pObject->GetPointCount()==2 ) +- { +- for (USHORT i=0; i<2; i++) +- { +- BOOL bMoved = FALSE; +- Point aPoint = pObject->GetPoint(i); +- lcl_ReverseTwipsToMM( aPoint ); +- if (rArea.IsInside(aPoint)) +- { +- aPoint += rMove; bMoved = TRUE; +- } +- else if (bShrink && aNew.IsInside(aPoint)) +- { +- // Punkt ist in betroffener Zelle - Test auf geloeschten Bereich +- if ( rMove.X() && aPoint.X() >= rArea.Left() + rMove.X() ) +- { +- aPoint.X() = rArea.Left() + rMove.X() - SHRINK_DIST_TWIPS; +- if ( aPoint.X() < 0 ) aPoint.X() = 0; +- bMoved = TRUE; +- } +- if ( rMove.Y() && aPoint.Y() >= rArea.Top() + rMove.Y() ) +- { +- aPoint.Y() = rArea.Top() + rMove.Y() - SHRINK_DIST_TWIPS; +- if ( aPoint.Y() < 0 ) aPoint.Y() = 0; +- bMoved = TRUE; +- } +- } +- if( bMoved ) +- { +- AddCalcUndo( new SdrUndoGeoObj( *pObject ) ); +- lcl_TwipsToMM( aPoint ); +- pObject->SetPoint( aPoint, i ); +- } +- } +- } +- else +- { +- Rectangle aObjRect = pObject->GetLogicRect(); +- // aOldMMPos: not converted, millimeters +- Point aOldMMPos = bNegativePage ? aObjRect.TopRight() : aObjRect.TopLeft(); +- lcl_ReverseTwipsToMM( aObjRect ); +- Point aTopLeft = bNegativePage ? aObjRect.TopRight() : aObjRect.TopLeft(); // logical left +- Size aMoveSize; +- BOOL bDoMove = FALSE; +- if (rArea.IsInside(aTopLeft)) +- { +- aMoveSize = Size(rMove.X(),rMove.Y()); +- bDoMove = TRUE; +- } +- else if (bShrink && aNew.IsInside(aTopLeft)) +- { +- // Position ist in betroffener Zelle - Test auf geloeschten Bereich +- if ( rMove.X() && aTopLeft.X() >= rArea.Left() + rMove.X() ) +- { +- aMoveSize.Width() = rArea.Left() + rMove.X() - SHRINK_DIST - aTopLeft.X(); +- bDoMove = TRUE; +- } +- if ( rMove.Y() && aTopLeft.Y() >= rArea.Top() + rMove.Y() ) +- { +- aMoveSize.Height() = rArea.Top() + rMove.Y() - SHRINK_DIST - aTopLeft.Y(); +- bDoMove = TRUE; +- } +- } +- if ( bDoMove ) +- { +- if ( bNegativePage ) +- { +- if ( aTopLeft.X() + aMoveSize.Width() > 0 ) +- aMoveSize.Width() = -aTopLeft.X(); +- } +- else +- { +- if ( aTopLeft.X() + aMoveSize.Width() < 0 ) +- aMoveSize.Width() = -aTopLeft.X(); +- } +- if ( aTopLeft.Y() + aMoveSize.Height() < 0 ) +- aMoveSize.Height() = -aTopLeft.Y(); +- +- // get corresponding move size in millimeters: +- Point aNewPos( aTopLeft.X() + aMoveSize.Width(), aTopLeft.Y() + aMoveSize.Height() ); +- lcl_TwipsToMM( aNewPos ); +- aMoveSize = Size( aNewPos.X() - aOldMMPos.X(), aNewPos.Y() - aOldMMPos.Y() ); // millimeters +- +- AddCalcUndo( new SdrUndoMoveObj( *pObject, aMoveSize ) ); +- pObject->Move( aMoveSize ); +- } +- else if ( rArea.IsInside( bNegativePage ? aObjRect.BottomLeft() : aObjRect.BottomRight() ) && +- !pObject->IsResizeProtect() ) +- { +- // geschuetzte Groessen werden nicht veraendert +- // (Positionen schon, weil sie ja an der Zelle "verankert" sind) +- AddCalcUndo( new SdrUndoGeoObj( *pObject ) ); +- long nOldSizeX = aObjRect.Right() - aObjRect.Left() + 1; +- long nOldSizeY = aObjRect.Bottom() - aObjRect.Top() + 1; +- long nLogMoveX = rMove.X() * ( bNegativePage ? -1 : 1 ); // logical direction +- pObject->Resize( aOldMMPos, Fraction( nOldSizeX+nLogMoveX, nOldSizeX ), +- Fraction( nOldSizeY+rMove.Y(), nOldSizeY ) ); +- } +- } +- } +- pObject = aIter.Next(); +- } +-} +- + void ScDrawLayer::MoveArea( SCTAB nTab, SCCOL nCol1,SCROW nRow1, SCCOL nCol2,SCROW nRow2, + SCsCOL nDx,SCsROW nDy, BOOL bInsDel, bool bUpdateNoteCaptionPos ) + { +@@ -1072,11 +1002,6 @@ + aTopLeft.Y() += aMove.Y(); + } + +- // drawing objects are now directly included in cut&paste +- // -> only update references when inserting/deleting (or changing widths or heights) +- if ( bInsDel ) +- MoveAreaTwips( nTab, aRect, aMove, aTopLeft ); +- + // + // Detektiv-Pfeile: Zellpositionen anpassen + // +@@ -1114,8 +1039,6 @@ + aTopLeft.X() = -aTopLeft.X(); + nDifTwips = -nDifTwips; + } +- +- MoveAreaTwips( nTab, aRect, Point( nDifTwips,0 ), aTopLeft ); + } + + void ScDrawLayer::HeightChanged( SCTAB nTab, SCROW nRow, long nDifTwips ) +@@ -1146,8 +1069,6 @@ + MirrorRectRTL( aRect ); + aTopLeft.X() = -aTopLeft.X(); + } +- +- MoveAreaTwips( nTab, aRect, Point( 0,nDifTwips ), aTopLeft ); + } + + BOOL ScDrawLayer::HasObjectsInRows( SCTAB nTab, SCROW nStartRow, SCROW nEndRow ) +@@ -1821,35 +1742,105 @@ + } + } + +-void ScDrawLayer::SetAnchor( SdrObject* pObj, ScAnchorType eType ) ++namespace ++{ ++ SdrObjUserData* GetFirstUserDataOfType(const SdrObject *pObj, UINT16 nId) ++ { ++ USHORT nCount = pObj ? pObj->GetUserDataCount() : 0; ++ for( USHORT i = 0; i < nCount; i++ ) ++ { ++ SdrObjUserData* pData = pObj->GetUserData( i ); ++ if( pData && pData->GetInventor() == SC_DRAWLAYER && pData->GetId() == nId ) ++ return pData; ++ } ++ return NULL; ++ } ++ ++ void DeleteFirstUserDataOfType(SdrObject *pObj, UINT16 nId) ++ { ++ USHORT nCount = pObj ? pObj->GetUserDataCount() : 0; ++ for( USHORT i = nCount; i > 0; i-- ) ++ { ++ SdrObjUserData* pData = pObj->GetUserData( i-1 ); ++ if( pData && pData->GetInventor() == SC_DRAWLAYER && pData->GetId() == nId ) ++ pObj->DeleteUserData(i-1); ++ } ++ } ++} ++ ++void ScDrawLayer::SetCellAnchored( SdrObject &rObj, const ScDrawObjData &rAnchor ) + { +- ScAnchorType eOldAnchorType = GetAnchor( pObj ); ++ ScDrawObjData* pAnchor = GetObjData( &rObj, true ); ++ pAnchor->maStart = rAnchor.maStart; ++ pAnchor->maEnd = rAnchor.maEnd; ++ pAnchor->maStartOffset = rAnchor.maStartOffset; ++ pAnchor->maEndOffset = rAnchor.maEndOffset; ++} ++ ++void ScDrawLayer::SetCellAnchoredFromPosition( SdrObject &rObj, const ScDocument &rDoc, SCTAB nTab ) ++{ ++ Rectangle aObjRect(rObj.GetLogicRect()); ++ ScRange aRange = rDoc.GetRange( nTab, aObjRect ); ++ ++ Rectangle aCellRect; ++ ++ ScDrawObjData aAnchor; ++ aAnchor.maStart = aRange.aStart; ++ aCellRect = rDoc.GetMMRect( aRange.aStart.Col(), aRange.aStart.Row(), ++ aRange.aStart.Col(), aRange.aStart.Row(), aRange.aStart.Tab() ); ++ aAnchor.maStartOffset.Y() = aObjRect.Top()-aCellRect.Top(); ++ if (!rDoc.IsNegativePage(nTab)) ++ aAnchor.maStartOffset.X() = aObjRect.Left()-aCellRect.Left(); ++ else ++ aAnchor.maStartOffset.X() = aCellRect.Right()-aObjRect.Right(); + +- // Ein an der Seite verankertes Objekt zeichnet sich durch eine Anker-Pos +- // von (0,1) aus. Das ist ein shabby Trick, der aber funktioniert! +- Point aAnchor( 0, eType == SCA_PAGE ? 1 : 0 ); +- pObj->SetAnchorPos( aAnchor ); ++ aAnchor.maEnd = aRange.aEnd; ++ aCellRect = rDoc.GetMMRect( aRange.aEnd.Col(), aRange.aEnd.Row(), ++ aRange.aEnd.Col(), aRange.aEnd.Row(), aRange.aEnd.Tab() ); ++ aAnchor.maEndOffset.Y() = aObjRect.Bottom()-aCellRect.Top(); ++ if (!rDoc.IsNegativePage(nTab)) ++ aAnchor.maEndOffset.X() = aObjRect.Right()-aCellRect.Left(); ++ else ++ aAnchor.maEndOffset.X() = aCellRect.Right()-aObjRect.Left(); + +- if ( eOldAnchorType != eType ) +- pObj->notifyShapePropertyChange( ::svx::eSpreadsheetAnchor ); ++ SetCellAnchored( rObj, aAnchor ); + } + +-ScAnchorType ScDrawLayer::GetAnchor( const SdrObject* pObj ) ++void ScDrawLayer::UpdateCellAnchorFromPositionEnd( SdrObject &rObj, const ScDocument &rDoc, SCTAB nTab ) + { +- Point aAnchor( pObj->GetAnchorPos() ); +- return ( aAnchor.Y() != 0 ) ? SCA_PAGE : SCA_CELL; ++ Rectangle aObjRect(rObj.GetLogicRect()); ++ ScRange aRange = rDoc.GetRange( nTab, aObjRect ); ++ ++ ScDrawObjData* pAnchor = GetObjData( &rObj, true ); ++ pAnchor->maEnd = aRange.aEnd; ++ ++ Rectangle aCellRect; ++ aCellRect = rDoc.GetMMRect( aRange.aEnd.Col(), aRange.aEnd.Row(), ++ aRange.aEnd.Col(), aRange.aEnd.Row(), aRange.aEnd.Tab() ); ++ pAnchor->maEndOffset.Y() = aObjRect.Bottom()-aCellRect.Top(); ++ if (!rDoc.IsNegativePage(nTab)) ++ pAnchor->maEndOffset.X() = aObjRect.Right()-aCellRect.Left(); ++ else ++ pAnchor->maEndOffset.X() = aCellRect.Right()-aObjRect.Left(); ++} ++ ++void ScDrawLayer::SetPageAnchored( SdrObject &rObj ) ++{ ++ DeleteFirstUserDataOfType(&rObj, SC_UD_OBJDATA); ++} ++ ++ScAnchorType ScDrawLayer::GetAnchorType( const SdrObject &rObj ) ++{ ++ //If this object has a cell anchor associated with it ++ //then its cell-anchored, otherwise its page-anchored ++ return ScDrawLayer::GetObjData(const_cast(&rObj)) ? SCA_CELL : SCA_PAGE; + } + + ScDrawObjData* ScDrawLayer::GetObjData( SdrObject* pObj, BOOL bCreate ) // static + { +- USHORT nCount = pObj ? pObj->GetUserDataCount() : 0; +- for( USHORT i = 0; i < nCount; i++ ) +- { +- SdrObjUserData* pData = pObj->GetUserData( i ); +- if( pData && pData->GetInventor() == SC_DRAWLAYER +- && pData->GetId() == SC_UD_OBJDATA ) +- return (ScDrawObjData*) pData; +- } ++ if (SdrObjUserData *pData = GetFirstUserDataOfType(pObj, SC_UD_OBJDATA)) ++ return (ScDrawObjData*) pData; ++ + if( pObj && bCreate ) + { + ScDrawObjData* pData = new ScDrawObjData; +@@ -1886,15 +1877,7 @@ + + ScIMapInfo* ScDrawLayer::GetIMapInfo( SdrObject* pObj ) // static + { +- USHORT nCount = pObj->GetUserDataCount(); +- for( USHORT i = 0; i < nCount; i++ ) +- { +- SdrObjUserData* pData = pObj->GetUserData( i ); +- if( pData && pData->GetInventor() == SC_DRAWLAYER +- && pData->GetId() == SC_UD_IMAPDATA ) +- return (ScIMapInfo*) pData; +- } +- return NULL; ++ return (ScIMapInfo*)GetFirstUserDataOfType(pObj, SC_UD_IMAPDATA); + } + + // static: +@@ -1947,7 +1930,7 @@ + else if ( pObj->ISA( SdrOle2Obj ) ) // OLE-Objekt + { + // TODO/LEAN: working with visual area needs running state +- aGraphSize = ((SdrOle2Obj*)pObj)->GetOrigObjSize(); ++ aGraphSize = ((const SdrOle2Obj*)pObj)->GetOrigObjSize(); + bObjSupported = TRUE; + } + +@@ -1965,14 +1948,9 @@ + + ScMacroInfo* ScDrawLayer::GetMacroInfo( SdrObject* pObj, BOOL bCreate ) // static + { +- USHORT nCount = pObj->GetUserDataCount(); +- for( USHORT i = 0; i < nCount; i++ ) +- { +- SdrObjUserData* pData = pObj->GetUserData( i ); +- if( pData && pData->GetInventor() == SC_DRAWLAYER +- && pData->GetId() == SC_UD_MACRODATA ) +- return (ScMacroInfo*) pData; +- } ++ if (SdrObjUserData *pData = GetFirstUserDataOfType(pObj, SC_UD_MACRODATA)) ++ return (ScMacroInfo*) pData; ++ + if ( bCreate ) + { + ScMacroInfo* pData = new ScMacroInfo; +diff -ru sc.orig/source/core/data/postit.cxx sc/source/core/data/postit.cxx +--- sc.orig/source/core/data/postit.cxx 2009-06-04 12:39:10.000000000 +0100 ++++ sc/source/core/data/postit.cxx 2009-06-04 12:40:23.000000000 +0100 +@@ -102,7 +102,6 @@ + + void ScCaptionUtil::SetBasicCaptionSettings( SdrCaptionObj& rCaption, bool bShown ) + { +- ScDrawLayer::SetAnchor( &rCaption, SCA_PAGE ); + SetCaptionLayer( rCaption, bShown ); + rCaption.SetFixedTail(); + rCaption.SetSpecialTextBoxShadow(); +diff -ru sc.orig/source/core/tool/detfunc.cxx sc/source/core/tool/detfunc.cxx +--- sc.orig/source/core/tool/detfunc.cxx 2009-06-04 12:39:11.000000000 +0100 ++++ sc/source/core/tool/detfunc.cxx 2009-06-04 12:40:23.000000000 +0100 +@@ -492,7 +492,6 @@ + + pBox->SetMergedItemSetAndBroadcast(rData.GetBoxSet()); + +- ScDrawLayer::SetAnchor( pBox, SCA_CELL ); + pBox->SetLayer( SC_LAYER_INTERN ); + pPage->InsertObject( pBox ); + pModel->AddCalcUndo( new SdrUndoInsertObj( *pBox ) ); +@@ -534,7 +533,6 @@ + pArrow->NbcSetLogicRect(Rectangle(aStartPos,aEndPos)); //! noetig ??? + pArrow->SetMergedItemSetAndBroadcast(rAttrSet); + +- ScDrawLayer::SetAnchor( pArrow, SCA_CELL ); + pArrow->SetLayer( SC_LAYER_INTERN ); + pPage->InsertObject( pArrow ); + pModel->AddCalcUndo( new SdrUndoInsertObj( *pArrow ) ); +@@ -565,7 +563,6 @@ + + pBox->SetMergedItemSetAndBroadcast(rData.GetBoxSet()); + +- ScDrawLayer::SetAnchor( pBox, SCA_CELL ); + pBox->SetLayer( SC_LAYER_INTERN ); + pPage->InsertObject( pBox ); + pModel->AddCalcUndo( new SdrUndoInsertObj( *pBox ) ); +@@ -600,7 +597,6 @@ + + pArrow->SetMergedItemSetAndBroadcast(rAttrSet); + +- ScDrawLayer::SetAnchor( pArrow, SCA_CELL ); + pArrow->SetLayer( SC_LAYER_INTERN ); + pPage->InsertObject( pArrow ); + pModel->AddCalcUndo( new SdrUndoInsertObj( *pArrow ) ); +@@ -668,7 +664,6 @@ + + pCircle->SetMergedItemSetAndBroadcast(rAttrSet); + +- ScDrawLayer::SetAnchor( pCircle, SCA_CELL ); + pCircle->SetLayer( SC_LAYER_INTERN ); + pPage->InsertObject( pCircle ); + pModel->AddCalcUndo( new SdrUndoInsertObj( *pCircle ) ); +diff -ru sc.orig/source/filter/xml/XMLExportIterator.hxx sc/source/filter/xml/XMLExportIterator.hxx +--- sc.orig/source/filter/xml/XMLExportIterator.hxx 2009-06-04 12:39:13.000000000 +0100 ++++ sc/source/filter/xml/XMLExportIterator.hxx 2009-06-04 12:40:23.000000000 +0100 +@@ -72,6 +72,8 @@ + { + ScAddress aAddress; + ScAddress aEndAddress; ++ sal_Int32 nEndX; ++ sal_Int32 nEndY; + com::sun::star::uno::Reference xShape; + + sal_Bool operator<(const ScMyShape& aShape) const; +diff -ru sc.orig/source/filter/xml/xmlexprt.cxx sc/source/filter/xml/xmlexprt.cxx +--- sc.orig/source/filter/xml/xmlexprt.cxx 2009-06-04 12:39:13.000000000 +0100 ++++ sc/source/filter/xml/xmlexprt.cxx 2009-06-04 12:51:46.000000000 +0100 +@@ -599,39 +599,21 @@ + else + { + ++nShapesCount; +- SvxShape* pShapeImp(SvxShape::getImplementation(xShape)); +- if (pShapeImp) ++ if (SvxShape* pShapeImp = SvxShape::getImplementation(xShape)) + { +- SdrObject *pSdrObj(pShapeImp->GetSdrObject()); +- if (pSdrObj) ++ if (SdrObject *pSdrObj = pShapeImp->GetSdrObject()) + { +- if (ScDrawLayer::GetAnchor(pSdrObj) == SCA_CELL) ++ if (ScDrawObjData *pAnchor = ScDrawLayer::GetObjData( pSdrObj )) + { +- if (pDoc) +- { +- +- awt::Point aPoint(xShape->getPosition()); +- awt::Size aSize(xShape->getSize()); +- rtl::OUString sType(xShape->getShapeType()); +- Rectangle aRectangle(aPoint.X, aPoint.Y, aPoint.X + aSize.Width, aPoint.Y + aSize.Height); +- if ( sType.equals(sCaptionShape) ) +- { +- awt::Point aRelativeCaptionPoint; +- xShapeProp->getPropertyValue( sCaptionPoint ) >>= aRelativeCaptionPoint; +- Point aCoreRelativeCaptionPoint(aRelativeCaptionPoint.X, aRelativeCaptionPoint.Y); +- Point aCoreAbsoluteCaptionPoint(aPoint.X, aPoint.Y); +- aCoreAbsoluteCaptionPoint += aCoreRelativeCaptionPoint; +- aRectangle.Union(Rectangle(aCoreAbsoluteCaptionPoint, aCoreAbsoluteCaptionPoint)); +- } +- ScRange aRange(pDoc->GetRange(static_cast(nTable), aRectangle)); +- ScMyShape aMyShape; +- aMyShape.aAddress = aRange.aStart; +- aMyShape.aEndAddress = aRange.aEnd; +- aMyShape.xShape = xShape; +- pSharedData->AddNewShape(aMyShape); +- pSharedData->SetLastColumn(nTable, aRange.aStart.Col()); +- pSharedData->SetLastRow(nTable, aRange.aStart.Row()); +- } ++ ScMyShape aMyShape; ++ aMyShape.aAddress = pAnchor->maStart; ++ aMyShape.aEndAddress = pAnchor->maEnd; ++ aMyShape.nEndX = pAnchor->maEndOffset.X(); ++ aMyShape.nEndY = pAnchor->maEndOffset.Y(); ++ aMyShape.xShape = xShape; ++ pSharedData->AddNewShape(aMyShape); ++ pSharedData->SetLastColumn(nTable, pAnchor->maStart.Col()); ++ pSharedData->SetLastRow(nTable, pAnchor->maStart.Row()); + } + else + pSharedData->AddTableShape(nTable, xShape); +@@ -2585,29 +2567,15 @@ + aPoint.X = 2 * aItr->xShape->getPosition().X + aItr->xShape->getSize().Width - aPoint.X; + if ( !aItr->xShape->getShapeType().equals(sCaptionShape) ) + { +- awt::Point aEndPoint; + Rectangle aEndRec(pDoc->GetMMRect(aItr->aEndAddress.Col(), aItr->aEndAddress.Row(), + aItr->aEndAddress.Col(), aItr->aEndAddress.Row(), aItr->aEndAddress.Tab())); + rtl::OUString sEndAddress; + ScRangeStringConverter::GetStringFromAddress(sEndAddress, aItr->aEndAddress, pDoc, FormulaGrammar::CONV_OOO); + AddAttribute(XML_NAMESPACE_TABLE, XML_END_CELL_ADDRESS, sEndAddress); +- if (bNegativePage) +- aEndPoint.X = -aEndRec.Right(); +- else +- aEndPoint.X = aEndRec.Left(); +- aEndPoint.Y = aEndRec.Top(); +- awt::Point aStartPoint(aItr->xShape->getPosition()); +- awt::Size aSize(aItr->xShape->getSize()); +- sal_Int32 nEndX; +- if (bNegativePage) +- nEndX = -aStartPoint.X - aEndPoint.X; +- else +- nEndX = aStartPoint.X + aSize.Width - aEndPoint.X; +- sal_Int32 nEndY(aStartPoint.Y + aSize.Height - aEndPoint.Y); + rtl::OUStringBuffer sBuffer; +- GetMM100UnitConverter().convertMeasure(sBuffer, nEndX); ++ GetMM100UnitConverter().convertMeasure(sBuffer, aItr->nEndX); + AddAttribute(XML_NAMESPACE_TABLE, XML_END_X, sBuffer.makeStringAndClear()); +- GetMM100UnitConverter().convertMeasure(sBuffer, nEndY); ++ GetMM100UnitConverter().convertMeasure(sBuffer, aItr->nEndY); + AddAttribute(XML_NAMESPACE_TABLE, XML_END_Y, sBuffer.makeStringAndClear()); + } + ExportShape(aItr->xShape, &aPoint); +diff -ru sc.orig/source/filter/xml/xmlimprt.cxx sc/source/filter/xml/xmlimprt.cxx +--- sc.orig/source/filter/xml/xmlimprt.cxx 2009-06-04 12:39:13.000000000 +0100 ++++ sc/source/filter/xml/xmlimprt.cxx 2009-06-04 15:23:47.000000000 +0100 +@@ -2813,7 +2813,7 @@ + } + + aTables.UpdateRowHeights(); +- aTables.ResizeShapes(); ++ aTables.FixupOLEs(); + } + if (GetModel().is()) + { +diff -ru sc.orig/source/filter/xml/xmlsubti.cxx sc/source/filter/xml/xmlsubti.cxx +--- sc.orig/source/filter/xml/xmlsubti.cxx 2009-06-04 12:39:13.000000000 +0100 ++++ sc/source/filter/xml/xmlsubti.cxx 2009-06-04 15:17:25.000000000 +0100 +@@ -153,7 +153,7 @@ + + ScMyTables::ScMyTables(ScXMLImport& rTempImport) + : rImport(rTempImport), +- aResizeShapes(rTempImport), ++ aFixupOLEs(rTempImport), + nCurrentColStylePos(0), + nCurrentDrawPage( -1 ), + nCurrentXShapes( -1 ), +@@ -757,12 +757,10 @@ + return !((nCurrentSheet != nCurrentXShapes) || !xShapes.is()); + } + +-void ScMyTables::AddShape(uno::Reference & rShape, +- rtl::OUString* pRangeList, +- table::CellAddress& rStartAddress, table::CellAddress& rEndAddress, +- sal_Int32 nEndX, sal_Int32 nEndY) ++void ScMyTables::AddOLE(uno::Reference & rShape, ++ const rtl::OUString &rRangeList) + { +- aResizeShapes.AddShape(rShape, pRangeList, rStartAddress, rEndAddress, nEndX, nEndY); ++ aFixupOLEs.AddOLE(rShape, rRangeList); + } + + void ScMyTables::AddMatrixRange( +diff -ru sc.orig/source/filter/xml/xmlsubti.hxx sc/source/filter/xml/xmlsubti.hxx +--- sc.orig/source/filter/xml/xmlsubti.hxx 2009-06-04 12:39:13.000000000 +0100 ++++ sc/source/filter/xml/xmlsubti.hxx 2009-06-04 15:23:00.000000000 +0100 +@@ -114,7 +114,7 @@ + + ScXMLImport& rImport; + +- ScMyShapeResizer aResizeShapes; ++ ScMyOLEFixer aFixupOLEs; + + ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheet > xCurrentSheet; + ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > xCurrentCellRange; +@@ -151,7 +151,9 @@ + void AddColumn(sal_Bool bIsCovered); + void NewTable(sal_Int32 nTempSpannedCols); + void UpdateRowHeights(); +- void ResizeShapes() { aResizeShapes.ResizeShapes(); } ++ void FixupOLEs() { aFixupOLEs.FixupOLEs(); } ++ sal_Bool IsOLE(com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& rShape) const ++ { return ScMyOLEFixer::IsOLE(rShape); } + void DeleteTable(); + com::sun::star::table::CellAddress GetRealCellPos(); + void AddColCount(sal_Int32 nTempColCount); +@@ -170,11 +172,8 @@ + GetCurrentXShapes(); + sal_Bool HasDrawPage(); + sal_Bool HasXShapes(); +- void AddShape(com::sun::star::uno::Reference & rShape, +- rtl::OUString* pRangeList, +- com::sun::star::table::CellAddress& rStartAddress, +- com::sun::star::table::CellAddress& rEndAddress, +- sal_Int32 nEndX, sal_Int32 nEndY); ++ void AddOLE(com::sun::star::uno::Reference & rShape, ++ const rtl::OUString &rRangeList); + + void AddMatrixRange( sal_Int32 nStartColumn, + sal_Int32 nStartRow, +diff -ru sc.orig/source/filter/xml/XMLTableShapeImportHelper.cxx sc/source/filter/xml/XMLTableShapeImportHelper.cxx +--- sc.orig/source/filter/xml/XMLTableShapeImportHelper.cxx 2009-06-04 12:39:13.000000000 +0100 ++++ sc/source/filter/xml/XMLTableShapeImportHelper.cxx 2009-06-04 15:17:38.000000000 +0100 +@@ -36,6 +36,7 @@ + #include "drwlayer.hxx" + #include "xmlannoi.hxx" + #include "rangeutl.hxx" ++#include "userdat.hxx" + #include "docuno.hxx" + #include "sheetdata.hxx" + #include +@@ -90,6 +91,11 @@ + { + if (!pAnnotationContext) + { ++ ScDrawObjData aAnchor; ++ aAnchor.maStart = ScAddress(aStartCell.Column, aStartCell.Row, aStartCell.Sheet); ++ awt::Point aStartPoint(rShape->getPosition()); ++ aAnchor.maStartOffset = Point(aStartPoint.X, aStartPoint.Y); ++ + sal_Int32 nEndX(-1); + sal_Int32 nEndY(-1); + sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; +@@ -111,11 +117,18 @@ + { + sal_Int32 nOffset(0); + ScRangeStringConverter::GetAddressFromString(aEndCell, rValue, static_cast(mrImporter).GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset); ++ aAnchor.maEnd = ScAddress(aEndCell.Column, aEndCell.Row, aEndCell.Sheet); + } + else if (IsXMLToken(aLocalName, XML_END_X)) ++ { + static_cast(mrImporter).GetMM100UnitConverter().convertMeasure(nEndX, rValue); ++ aAnchor.maEndOffset.X() = nEndX; ++ } + else if (IsXMLToken(aLocalName, XML_END_Y)) ++ { + static_cast(mrImporter).GetMM100UnitConverter().convertMeasure(nEndY, rValue); ++ aAnchor.maEndOffset.Y() = nEndY; ++ } + else if (IsXMLToken(aLocalName, XML_TABLE_BACKGROUND)) + if (IsXMLToken(rValue, XML_TRUE)) + nLayerID = SC_LAYER_BACK; +@@ -128,39 +141,28 @@ + } + SetLayer(rShape, nLayerID, rShape->getShapeType()); + +- if (!bOnTable) ++ if (SvxShape* pShapeImp = SvxShape::getImplementation(rShape)) + { +- rTables.AddShape(rShape, +- pRangeList, aStartCell, aEndCell, nEndX, nEndY); +- SvxShape* pShapeImp = SvxShape::getImplementation(rShape); +- if (pShapeImp) +- { +- SdrObject *pSdrObj = pShapeImp->GetSdrObject(); +- if (pSdrObj) +- ScDrawLayer::SetAnchor(pSdrObj, SCA_CELL); +- } ++ if (SdrObject *pSdrObj = pShapeImp->GetSdrObject()) ++ { ++ if (!bOnTable) ++ ScDrawLayer::SetCellAnchored(*pSdrObj, aAnchor); ++ else ++ ScDrawLayer::SetPageAnchored(*pSdrObj); ++ } + } +- else +- { +- if ( pRangeList ) +- { +- // #i78086# If there are notification ranges, the ChartListener must be created +- // also when anchored to the sheet +- // -> call AddShape with invalid cell position (checked in ScMyShapeResizer::ResizeShapes) +- +- table::CellAddress aInvalidPos( -1, -1, -1 ); +- rTables.AddShape(rShape, +- pRangeList, aInvalidPos, aInvalidPos, 0, 0); +- } + +- SvxShape* pShapeImp = SvxShape::getImplementation(rShape); +- if (pShapeImp) +- { +- SdrObject *pSdrObj = pShapeImp->GetSdrObject(); +- if (pSdrObj) +- ScDrawLayer::SetAnchor(pSdrObj, SCA_PAGE); +- } +- } ++ if ( bOnTable && pRangeList ) ++ { ++ // #i78086# If there are notification ranges, the ChartListener must be created ++ // also when anchored to the sheet ++ // -> call AddOLE with invalid cell position (checked in ScMyShapeResizer::ResizeShapes) ++ ++ if (rTables.IsOLE(rShape)) ++ rTables.AddOLE(rShape, *pRangeList); ++ } ++ ++ delete pRangeList; + } + else // shape is annotation + { +diff -ru sc.orig/source/filter/xml/XMLTableShapeResizer.cxx sc/source/filter/xml/XMLTableShapeResizer.cxx +--- sc.orig/source/filter/xml/XMLTableShapeResizer.cxx 2009-06-04 12:39:13.000000000 +0100 ++++ sc/source/filter/xml/XMLTableShapeResizer.cxx 2009-06-04 15:27:39.000000000 +0100 +@@ -49,38 +49,38 @@ + using ::std::vector; + using ::rtl::OUString; + +-ScMyShapeResizer::ScMyShapeResizer(ScXMLImport& rTempImport) ++ScMyOLEFixer::ScMyOLEFixer(ScXMLImport& rTempImport) + : rImport(rTempImport), + aShapes(), + pCollection(NULL) + { + } + +-ScMyShapeResizer::~ScMyShapeResizer() ++ScMyOLEFixer::~ScMyOLEFixer() + { + } + +-sal_Bool ScMyShapeResizer::IsOLE(uno::Reference< drawing::XShape >& rShape) const ++sal_Bool ScMyOLEFixer::IsOLE(uno::Reference< drawing::XShape >& rShape) + { + return rShape->getShapeType().equals(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.OLE2Shape"))); + } + +-void ScMyShapeResizer::CreateChartListener(ScDocument* pDoc, ++void ScMyOLEFixer::CreateChartListener(ScDocument* pDoc, + const rtl::OUString& rName, +- const rtl::OUString* pRangeList) ++ const rtl::OUString& rRangeList) + { +- if (!pDoc || !pRangeList) +- // These are minimum required. ++ // This is the minimum required. ++ if (!pDoc) + return; + +- if (!pRangeList->getLength()) ++ if (!rRangeList.getLength()) + { + pDoc->AddOLEObjectToCollection(rName); + return; + } + + OUString aRangeStr; +- ScRangeStringConverter::GetStringFromXMLRangeString(aRangeStr, *pRangeList, pDoc); ++ ScRangeStringConverter::GetStringFromXMLRangeString(aRangeStr, rRangeList, pDoc); + if (!aRangeStr.getLength()) + { + pDoc->AddOLEObjectToCollection(rName); +@@ -116,272 +116,45 @@ + } + } + +-void ScMyShapeResizer::AddShape(uno::Reference & rShape, +- rtl::OUString* pRangeList, +- table::CellAddress& rStartAddress, table::CellAddress& rEndAddress, +- sal_Int32 nEndX, sal_Int32 nEndY) ++void ScMyOLEFixer::AddOLE(uno::Reference & rShape, ++ const rtl::OUString &rRangeList) + { +- ScMyToResizeShape aShape; +- aShape.xShape.set(rShape); +- aShape.pRangeList = pRangeList; +- aShape.aEndCell = rEndAddress; +- aShape.aStartCell = rStartAddress; +- aShape.nEndY = nEndY; +- aShape.nEndX = nEndX; +- aShapes.push_back(aShape); ++ ScMyToFixupOLE aShape; ++ aShape.xShape.set(rShape); ++ aShape.sRangeList = rRangeList; ++ aShapes.push_back(aShape); + } + +-void ScMyShapeResizer::GetNewShapeSizePos(ScDocument* pDoc, const Rectangle& rStartRect, +- const table::CellAddress& rEndCell, +- awt::Point& rPoint, awt::Size& rSize, +- sal_Int32& rEndX, sal_Int32& rEndY) const +-{ +- awt::Point aRefPoint; +- BOOL bNegativePage(pDoc->IsNegativePage(rEndCell.Sheet)); +- if (bNegativePage) +- aRefPoint.X = rStartRect.Right(); +- else +- aRefPoint.X = rStartRect.Left(); +- aRefPoint.Y = rStartRect.Top(); +- Rectangle aRect(pDoc->GetMMRect( +- static_cast(rEndCell.Column), static_cast(rEndCell.Row), +- static_cast(rEndCell.Column), static_cast(rEndCell.Row), rEndCell.Sheet )); +- if (bNegativePage) +- rEndX = -rEndX + aRect.Right(); +- else +- rEndX += aRect.Left(); +- rEndY += aRect.Top(); +- rPoint.X += aRefPoint.X; +- if (bNegativePage) +- { +- if (rPoint.X < rStartRect.Left()) +- rPoint.X = rStartRect.Left() + 2; // increment by 2 100th_mm because the cellwidth is internal in twips +- } +- else +- { +- if (rPoint.X > rStartRect.Right()) +- rPoint.X = rStartRect.Right() - 2; // decrement by 2 100th_mm because the cellwidth is internal in twips +- } +- rPoint.Y += aRefPoint.Y; +- if (rPoint.Y > rStartRect.Bottom()) +- rPoint.Y = rStartRect.Bottom() - 2; // decrement by 2 100th_mm because the cellheight is internal in twips +- if (bNegativePage) +- { +- rSize.Width = -(rEndX - rPoint.X); +- } +- else +- rSize.Width = rEndX - rPoint.X; +- rSize.Height = rEndY - rPoint.Y; +-} +- +-void ScMyShapeResizer::ResizeShapes() ++void ScMyOLEFixer::FixupOLEs() + { + if (!aShapes.empty() && rImport.GetModel().is()) + { +- rtl::OUString sRowHeight(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_CELLHGT)); + rtl::OUString sPersistName (RTL_CONSTASCII_USTRINGPARAM("PersistName")); +- rtl::OUString sCaptionPoint( RTL_CONSTASCII_USTRINGPARAM( "CaptionPoint" )); +- rtl::OUString sConnectorShape( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.ConnectorShape") ); +- rtl::OUString sCaptionShape( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.CaptionShape") ); +- rtl::OUString sStartShape(RTL_CONSTASCII_USTRINGPARAM("StartShape")); +- rtl::OUString sEndShape(RTL_CONSTASCII_USTRINGPARAM("EndShape")); +- rtl::OUString sStartPosition(RTL_CONSTASCII_USTRINGPARAM("StartPosition")); +- rtl::OUString sEndPosition(RTL_CONSTASCII_USTRINGPARAM("EndPosition")); +- uno::Reference xTableRow; +- uno::Reference xSheet; +- uno::Reference xTableRows; +- sal_Int32 nOldRow(-1); +- sal_Int32 nOldSheet(-1); +- ScMyToResizeShapes::iterator aItr(aShapes.begin()); +- ScMyToResizeShapes::iterator aEndItr(aShapes.end()); +- uno::Reference xSpreadDoc( rImport.GetModel(), uno::UNO_QUERY ); +- if ( xSpreadDoc.is() ) ++ ScMyToFixupOLEs::iterator aItr(aShapes.begin()); ++ ScMyToFixupOLEs::iterator aEndItr(aShapes.end()); ++ ScDocument* pDoc(rImport.GetDocument()); ++ ++ rImport.LockSolarMutex(); ++ ++ while (aItr != aEndItr) + { +- uno::Reference xIndex( xSpreadDoc->getSheets(), uno::UNO_QUERY ); +- ScDocument* pDoc(rImport.GetDocument()); +- if ( pDoc && xIndex.is() ) ++ // #i78086# also call CreateChartListener for invalid position (anchored to sheet) ++ if (!IsOLE(aItr->xShape)) ++ DBG_ERROR("Only OLEs should be in here now"); ++ ++ if (IsOLE(aItr->xShape)) + { +- rImport.LockSolarMutex(); +- while (aItr != aEndItr) +- { +- // #i78086# invalid cell position is used to call CreateChartListener only +- if ( aItr->aEndCell.Sheet >= 0 ) +- { +- if ((nOldSheet != aItr->aEndCell.Sheet) || !xSheet.is()) +- { +- nOldSheet = aItr->aEndCell.Sheet; +- xSheet.set(xIndex->getByIndex(nOldSheet), uno::UNO_QUERY); +- if (xSheet.is()) +- { +- uno::Reference xColumnRowRange (xSheet, uno::UNO_QUERY); +- if (xColumnRowRange.is()) +- xTableRows = xColumnRowRange->getRows(); +- } +- } +- if (xTableRows.is()) +- { +- if (nOldRow != aItr->aEndCell.Row || !xTableRow.is()) +- { +- nOldRow = aItr->aEndCell.Row; +- xTableRows->getByIndex(nOldRow) >>= xTableRow; +- } +- if (xTableRow.is()) +- { +- uno::Reference xRowProperties(xTableRow, uno::UNO_QUERY); +- if (xRowProperties.is()) +- { +- sal_Int32 nHeight; +- if (xRowProperties->getPropertyValue(sRowHeight) >>= nHeight) +- { +- Rectangle aRec = pDoc->GetMMRect(static_cast(aItr->aStartCell.Column), static_cast(aItr->aStartCell.Row), +- static_cast(aItr->aStartCell.Column), static_cast(aItr->aStartCell.Row), aItr->aStartCell.Sheet); +- awt::Point aPoint(aItr->xShape->getPosition()); +- awt::Size aSize(aItr->xShape->getSize()); +- if (pDoc->IsNegativePage(static_cast(nOldSheet))) +- aPoint.X += aSize.Width; +- if (aItr->nEndY >= 0 && aItr->nEndX >= 0) +- { +- if (aItr->xShape->getShapeType().equals(sConnectorShape)) +- { +- //#103122#; handle connected Connectorshapes +- uno::Reference xShapeProps (aItr->xShape, uno::UNO_QUERY); +- if(xShapeProps.is()) +- { +- uno::Reference xStartShape(xShapeProps->getPropertyValue( sStartShape ), uno::UNO_QUERY); +- uno::Reference xEndShape(xShapeProps->getPropertyValue( sEndShape ), uno::UNO_QUERY); +- if (!xStartShape.is() && !xEndShape.is()) +- { +- awt::Size aOldSize(aSize); +- GetNewShapeSizePos(pDoc, aRec, aItr->aEndCell, aPoint, aSize, aItr->nEndX, aItr->nEndY); +- aItr->xShape->setPosition(aPoint); +- if( (aSize.Width != aOldSize.Width) || +- (aSize.Height != aOldSize.Height) ) +- aItr->xShape->setSize(aSize); +- } +- else if (xStartShape.is() && xEndShape.is()) +- { +- // do nothing, because they are connected +- } +- else +- { +- // only one point is connected, the other should be moved +- +- rtl::OUString sProperty; +- if (xStartShape.is()) +- { +- awt::Point aEndPoint; +- xShapeProps->getPropertyValue(sEndPosition) >>= aEndPoint; +- aPoint.X = aRec.Left() + aEndPoint.X; +- aPoint.Y = aRec.Top() + aEndPoint.Y; +- sProperty = sEndPosition; +- } +- else +- { +- awt::Point aStartPoint; +- xShapeProps->getPropertyValue(sStartPosition) >>= aStartPoint; +- aPoint.X = aRec.Left() + aStartPoint.X; +- aPoint.Y = aRec.Top() + aStartPoint.Y; +- sProperty = sStartPosition; +- } +- xShapeProps->setPropertyValue(sProperty, uno::makeAny(aPoint)); +- } +- } +- } +- else +- { +- awt::Size aOldSize(aSize); +- GetNewShapeSizePos(pDoc, aRec, aItr->aEndCell, aPoint, aSize, aItr->nEndX, aItr->nEndY); +- if (pDoc->IsNegativePage(static_cast(nOldSheet))) +- aPoint.X -= aSize.Width; +- aItr->xShape->setPosition(aPoint); +- if( (aSize.Width != aOldSize.Width) || +- (aSize.Height != aOldSize.Height) ) +- aItr->xShape->setSize(aSize); +- } +- } +- else +- { +- if (aItr->xShape->getShapeType().equals(sCaptionShape)) +- { +- Rectangle aRectangle(aPoint.X, aPoint.Y, aPoint.X + aSize.Width, aPoint.Y + aSize.Height); +- +- awt::Point aCaptionPoint; +- uno::Reference< beans::XPropertySet > xShapeProps(aItr->xShape, uno::UNO_QUERY); +- if (xShapeProps.is()) +- { +- try +- { +- xShapeProps->getPropertyValue( sCaptionPoint ) >>= aCaptionPoint; +- } +- catch ( uno::Exception& ) +- { +- DBG_ERROR("This Captionshape has no CaptionPoint property."); +- } +- } +- Point aCorePoint(aPoint.X, aPoint.Y); +- Point aCoreCaptionPoint(aCaptionPoint.X, aCaptionPoint.Y); +- aCoreCaptionPoint += aCorePoint; +- aRectangle.Union(Rectangle(aCoreCaptionPoint, aCoreCaptionPoint)); +- +- Point aBeforeRightBottomPoint(aRectangle.BottomRight()); +- +- aRectangle += aRec.TopLeft(); +- if (aRectangle.Left() > aRec.Right()) +- aRectangle -= (Point(aRectangle.Left() - aRec.Right() + 2, 0)); +- if (aRectangle.Top() > aRec.Bottom()) +- aRectangle -= (Point(0, aRectangle.Top() - aRec.Bottom() + 2)); +- +- Point aDifferencePoint(aRectangle.BottomRight() - aBeforeRightBottomPoint); +- aPoint.X += aDifferencePoint.X(); +- aPoint.Y += aDifferencePoint.Y(); +- +- aItr->xShape->setPosition(aPoint); +- } +- else +- { +- // #96159# it is possible, that shapes have a negative position +- // this is now handled here +- DBG_ERROR("no or negative end address of this shape"); +- awt::Point aRefPoint; +- aRefPoint.X = aRec.Left(); +- aRefPoint.Y = aRec.Top(); +- aPoint.X += aRefPoint.X; +- if (aPoint.X > aRec.Right()) +- aPoint.X = aRec.Right() - 2; // decrement by 2 100th_mm because the cellheight is internal in twips +- aPoint.Y += aRefPoint.Y; +- if (aPoint.Y > aRec.Bottom()) +- aPoint.Y = aRec.Bottom() - 2; // decrement by 2 100th_mm because the cellheight is internal in twips +- aItr->xShape->setPosition(aPoint); +- } +- } +- } +- } +- } +- } +- else +- { +- DBG_ERROR("something wents wrong"); +- } +- } +- // #i78086# call CreateChartListener also for invalid position (anchored to sheet) +- if (IsOLE(aItr->xShape)) +- { +- uno::Reference < beans::XPropertySet > xShapeProps ( aItr->xShape, uno::UNO_QUERY ); +- uno::Reference < beans::XPropertySetInfo > xShapeInfo(xShapeProps->getPropertySetInfo()); +- rtl::OUString sName; +- if (xShapeProps.is() && xShapeInfo.is() && xShapeInfo->hasPropertyByName(sPersistName) && +- (xShapeProps->getPropertyValue(sPersistName) >>= sName)) +- CreateChartListener(pDoc, sName, aItr->pRangeList); +- } +- if (aItr->pRangeList) +- delete aItr->pRangeList; +- aItr = aShapes.erase(aItr); +- } +- rImport.UnlockSolarMutex(); +-// if (pCollection) +-// pDoc->SetChartListenerCollection(pCollection); ++ uno::Reference < beans::XPropertySet > xShapeProps ( aItr->xShape, uno::UNO_QUERY ); ++ uno::Reference < beans::XPropertySetInfo > xShapeInfo(xShapeProps->getPropertySetInfo()); ++ ++ rtl::OUString sName; ++ if (pDoc && xShapeProps.is() && xShapeInfo.is() && xShapeInfo->hasPropertyByName(sPersistName) && +++ (xShapeProps->getPropertyValue(sPersistName) >>= sName)) ++ CreateChartListener(pDoc, sName, aItr->sRangeList); + } ++ aItr = aShapes.erase(aItr); + } ++ rImport.UnlockSolarMutex(); + } + } + +diff -ru sc.orig/source/filter/xml/XMLTableShapeResizer.hxx sc/source/filter/xml/XMLTableShapeResizer.hxx +--- sc.orig/source/filter/xml/XMLTableShapeResizer.hxx 2009-06-04 12:39:13.000000000 +0100 ++++ sc/source/filter/xml/XMLTableShapeResizer.hxx 2009-06-04 15:22:38.000000000 +0100 +@@ -41,44 +41,31 @@ + class ScDocument; + class Rectangle; + +-struct ScMyToResizeShape ++struct ScMyToFixupOLE + { + com::sun::star::uno::Reference xShape; +- rtl::OUString* pRangeList; +- com::sun::star::table::CellAddress aEndCell; +- com::sun::star::table::CellAddress aStartCell; +- sal_Int32 nEndX; +- sal_Int32 nEndY; +- +- ScMyToResizeShape() : pRangeList(NULL) {} ++ rtl::OUString sRangeList; + }; + +-typedef std::list ScMyToResizeShapes; ++typedef std::list ScMyToFixupOLEs; + +-class ScMyShapeResizer ++class ScMyOLEFixer + { + ScXMLImport& rImport; +- ScMyToResizeShapes aShapes; ++ ScMyToFixupOLEs aShapes; + ScChartListenerCollection* pCollection; + +- sal_Bool IsOLE(com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& rShape) const; + void CreateChartListener(ScDocument* pDoc, + const rtl::OUString& rName, +- const rtl::OUString* pRangeList); +- void GetNewShapeSizePos(ScDocument* pDoc, const Rectangle& rStartRect, +- const com::sun::star::table::CellAddress& rEndCell, +- com::sun::star::awt::Point& rPoint, com::sun::star::awt::Size& rSize, +- sal_Int32& rEndX, sal_Int32& rEndY) const; ++ const rtl::OUString& rRangeList); + public: +- ScMyShapeResizer(ScXMLImport& rImport); +- ~ScMyShapeResizer(); ++ ScMyOLEFixer(ScXMLImport& rImport); ++ ~ScMyOLEFixer(); + +- void AddShape(com::sun::star::uno::Reference & rShape, +- rtl::OUString* pRangeList, +- com::sun::star::table::CellAddress& rStartAddress, +- com::sun::star::table::CellAddress& rEndAddress, +- sal_Int32 nEndX, sal_Int32 nEndY); +- void ResizeShapes(); ++ static sal_Bool IsOLE(com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& rShape); ++ void AddOLE(com::sun::star::uno::Reference & rShape, ++ const rtl::OUString &rRangeList); ++ void FixupOLEs(); + }; + + #endif +diff -ru sc.orig/source/ui/Accessibility/AccessibleDocument.cxx sc/source/ui/Accessibility/AccessibleDocument.cxx +--- sc.orig/source/ui/Accessibility/AccessibleDocument.cxx 2009-06-04 12:39:41.000000000 +0100 ++++ sc/source/ui/Accessibility/AccessibleDocument.cxx 2009-06-04 12:40:23.000000000 +0100 +@@ -41,6 +41,7 @@ + #include "drawview.hxx" + #include "gridwin.hxx" + #include "AccessibleEditObject.hxx" ++#include "userdat.hxx" + #include "scresid.hxx" + #include "sc.hrc" + #include +@@ -977,35 +978,10 @@ + uno::Reference xShapeProp(xShape, uno::UNO_QUERY); + if (pShapeImp && xShapeProp.is()) + { +- SdrObject *pSdrObj = pShapeImp->GetSdrObject(); +- if (pSdrObj) ++ if (SdrObject *pSdrObj = pShapeImp->GetSdrObject()) + { +- if (ScDrawLayer::GetAnchor(pSdrObj) == SCA_CELL) +- { +- ScDocument* pDoc = mpViewShell->GetViewData()->GetDocument(); +- if (pDoc) +- { +- rtl::OUString sCaptionShape(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.CaptionShape")); +- awt::Point aPoint(xShape->getPosition()); +- awt::Size aSize(xShape->getSize()); +- rtl::OUString sType(xShape->getShapeType()); +- Rectangle aRectangle(aPoint.X, aPoint.Y, aPoint.X + aSize.Width, aPoint.Y + aSize.Height); +- if ( sType.equals(sCaptionShape) ) +- { +- awt::Point aRelativeCaptionPoint; +- rtl::OUString sCaptionPoint( RTL_CONSTASCII_USTRINGPARAM( "CaptionPoint" )); +- xShapeProp->getPropertyValue( sCaptionPoint ) >>= aRelativeCaptionPoint; +- Point aCoreRelativeCaptionPoint(aRelativeCaptionPoint.X, aRelativeCaptionPoint.Y); +- Point aCoreAbsoluteCaptionPoint(aPoint.X, aPoint.Y); +- aCoreAbsoluteCaptionPoint += aCoreRelativeCaptionPoint; +- aRectangle.Union(Rectangle(aCoreAbsoluteCaptionPoint, aCoreAbsoluteCaptionPoint)); +- } +- ScRange aRange = pDoc->GetRange(mpAccessibleDocument->getVisibleTable(), aRectangle); +- pAddress = new ScAddress(aRange.aStart); +- } +- } +-// else +-// do nothing, because it is always a NULL Pointer ++ if (ScDrawObjData *pAnchor = ScDrawLayer::GetObjData(pSdrObj)) ++ return new ScAddress(pAnchor->maStart); + } + } + } +diff -ru sc.orig/source/ui/drawfunc/drawsh2.cxx sc/source/ui/drawfunc/drawsh2.cxx +--- sc.orig/source/ui/drawfunc/drawsh2.cxx 2009-06-04 12:39:40.000000000 +0100 ++++ sc/source/ui/drawfunc/drawsh2.cxx 2009-06-04 12:40:23.000000000 +0100 +@@ -115,7 +115,7 @@ + + if ( !bDisableAnchor ) + { +- switch( pView->GetAnchor() ) ++ switch( pView->GetAnchorType() ) + { + case SCA_PAGE: + rSet.Put( SfxBoolItem( SID_ANCHOR_PAGE, TRUE ) ); +diff -ru sc.orig/source/ui/drawfunc/drawsh5.cxx sc/source/ui/drawfunc/drawsh5.cxx +--- sc.orig/source/ui/drawfunc/drawsh5.cxx 2009-06-04 12:39:40.000000000 +0100 ++++ sc/source/ui/drawfunc/drawsh5.cxx 2009-06-04 12:40:23.000000000 +0100 +@@ -397,26 +397,26 @@ + break; + + case SID_ANCHOR_PAGE: +- pView->SetAnchor( SCA_PAGE ); ++ pView->SetPageAnchored(); + rBindings.Invalidate( SID_ANCHOR_PAGE ); + rBindings.Invalidate( SID_ANCHOR_CELL ); + break; + + case SID_ANCHOR_CELL: +- pView->SetAnchor( SCA_CELL ); ++ pView->SetCellAnchored(); + rBindings.Invalidate( SID_ANCHOR_PAGE ); + rBindings.Invalidate( SID_ANCHOR_CELL ); + break; + + case SID_ANCHOR_TOGGLE: + { +- switch( pView->GetAnchor() ) ++ switch( pView->GetAnchorType() ) + { + case SCA_CELL: +- pView->SetAnchor( SCA_PAGE ); ++ pView->SetPageAnchored(); + break; + default: +- pView->SetAnchor( SCA_CELL ); ++ pView->SetCellAnchored(); + break; + } + } +diff -ru sc.orig/source/ui/inc/drawview.hxx sc/source/ui/inc/drawview.hxx +--- sc.orig/source/ui/inc/drawview.hxx 2009-06-04 12:39:46.000000000 +0100 ++++ sc/source/ui/inc/drawview.hxx 2009-06-04 12:40:23.000000000 +0100 +@@ -100,8 +100,9 @@ + + void CalcNormScale( Fraction& rFractX, Fraction& rFractY ) const; + +- void SetAnchor( ScAnchorType ); +- ScAnchorType GetAnchor() const; ++ void SetPageAnchored(); ++ void SetCellAnchored(); ++ ScAnchorType GetAnchorType() const; + + void VCAddWin( Window* pWin ); + void VCRemoveWin( Window* pWin ); +diff -ru sc.orig/source/ui/unoobj/shapeuno.cxx sc/source/ui/unoobj/shapeuno.cxx +--- sc.orig/source/ui/unoobj/shapeuno.cxx 2009-06-04 12:39:29.000000000 +0100 ++++ sc/source/ui/unoobj/shapeuno.cxx 2009-06-04 12:40:23.000000000 +0100 +@@ -365,20 +365,9 @@ + table::CellRangeAddress aAddress = xRangeAdd->getRangeAddress(); + if (nTab == aAddress.Sheet) + { +- if (aAddress.StartRow != aAddress.EndRow) //should be a Spreadsheet +- { +- DBG_ASSERT(aAddress.StartRow == 0 && aAddress.EndRow == MAXROW && +- aAddress.StartColumn == 0 && aAddress.EndColumn == MAXCOL, "here should be a XSpreadsheet"); +- ScDrawLayer::SetAnchor(pObj, SCA_PAGE); +- } +- else +- { +- DBG_ASSERT(aAddress.StartRow == aAddress.EndRow && +- aAddress.StartColumn == aAddress.EndColumn, "here should be a XCell"); +- ScDrawLayer::SetAnchor(pObj, SCA_CELL); +- } + Rectangle aRect(pDoc->GetMMRect( static_cast(aAddress.StartColumn), static_cast(aAddress.StartRow), + static_cast(aAddress.EndColumn), static_cast(aAddress.EndRow), aAddress.Sheet )); ++ awt::Point aRelPoint; + uno::Reference xShape( mxShapeAgg, uno::UNO_QUERY ); + if (xShape.is()) + { +@@ -397,7 +386,8 @@ + awt::Size aUnoSize; + awt::Point aCaptionPoint; + ScRange aRange; +- awt::Point aUnoPoint(lcl_GetRelativePos( xShape, pDoc, nTab, aRange, aUnoSize, aCaptionPoint )); ++ aRelPoint = lcl_GetRelativePos( xShape, pDoc, nTab, aRange, aUnoSize, aCaptionPoint ); ++ awt::Point aUnoPoint(aRelPoint); + + aUnoPoint.X += aPoint.X(); + aUnoPoint.Y += aPoint.Y(); +@@ -426,6 +416,24 @@ + xShape->setPosition(aUnoPoint); + pDocSh->SetModified(); + } ++ ++ if (aAddress.StartRow != aAddress.EndRow) //should be a Spreadsheet ++ { ++ DBG_ASSERT(aAddress.StartRow == 0 && aAddress.EndRow == MAXROW && ++ aAddress.StartColumn == 0 && aAddress.EndColumn == MAXCOL, "here should be a XSpreadsheet"); ++ ScDrawLayer::SetPageAnchored(*pObj); ++ } ++ else ++ { ++ DBG_ASSERT(aAddress.StartRow == aAddress.EndRow && ++ aAddress.StartColumn == aAddress.EndColumn, "here should be a XCell"); ++ ScDrawObjData aAnchor; ++ aAnchor.maStart = ScAddress(aAddress.StartColumn, aAddress.StartRow, aAddress.Sheet); ++ aAnchor.maStartOffset = Point(aRelPoint.X, aRelPoint.Y); ++ ScDrawLayer::SetCellAnchored(*pObj, aAnchor); ++ //Currently we've only got a start anchor, not an end-anchor, so generate that now ++ ScDrawLayer::UpdateCellAnchorFromPositionEnd(*pObj, *pDoc, aAddress.Sheet); ++ } + } + } + } +@@ -485,7 +493,7 @@ + uno::Reference xShape( mxShapeAgg, uno::UNO_QUERY ); + if (xShape.is()) + { +- if (ScDrawLayer::GetAnchor(pObj) == SCA_PAGE) ++ if (ScDrawLayer::GetAnchorType(*pObj) == SCA_PAGE) + { + awt::Point aPoint(xShape->getPosition()); + awt::Size aSize(xShape->getSize()); +@@ -512,7 +520,7 @@ + xShape->setPosition(aPoint); + pDocSh->SetModified(); + } +- else if (ScDrawLayer::GetAnchor(pObj) == SCA_CELL) ++ else if (ScDrawLayer::GetAnchorType(*pObj) == SCA_CELL) + { + awt::Size aUnoSize; + awt::Point aCaptionPoint; +@@ -583,7 +591,7 @@ + uno::Reference xShape( mxShapeAgg, uno::UNO_QUERY ); + if (xShape.is()) + { +- if (ScDrawLayer::GetAnchor(pObj) == SCA_PAGE) ++ if (ScDrawLayer::GetAnchorType(*pObj) == SCA_PAGE) + { + awt::Point aPoint = xShape->getPosition(); + awt::Point aCaptionPoint; +@@ -596,7 +604,7 @@ + xShape->setPosition(aPoint); + pDocSh->SetModified(); + } +- else if (ScDrawLayer::GetAnchor(pObj) == SCA_CELL) ++ else if (ScDrawLayer::GetAnchorType(*pObj) == SCA_CELL) + { + awt::Size aUnoSize; + awt::Point aCaptionPoint; +@@ -663,23 +671,10 @@ + { + ScDocShell* pDocSh = (ScDocShell*)pObjSh; + uno::Reference< uno::XInterface > xAnchor; +- if (ScDrawLayer::GetAnchor(pObj) == SCA_CELL) +- { +- uno::Reference xShape( mxShapeAgg, uno::UNO_QUERY ); +- if (xShape.is()) +- { +- awt::Size aUnoSize; +- awt::Point aCaptionPoint; +- ScRange aRange; +- awt::Point aUnoPoint(lcl_GetRelativePos( xShape, pDoc, nTab, aRange, aUnoSize, aCaptionPoint )); +- +- xAnchor.set(static_cast(new ScCellObj( pDocSh, aRange.aStart ))); +- } +- } ++ if (ScDrawObjData *pAnchor = ScDrawLayer::GetObjDataTab(pObj, nTab)) ++ xAnchor.set(static_cast(new ScCellObj( pDocSh, pAnchor->maStart))); + else +- { + xAnchor.set(static_cast(new ScTableSheetObj( pDocSh, nTab ))); +- } + aAny <<= xAnchor; + } + } +@@ -722,7 +717,7 @@ + uno::Reference xShape( mxShapeAgg, uno::UNO_QUERY ); + if (xShape.is()) + { +- if (ScDrawLayer::GetAnchor(pObj) == SCA_CELL) ++ if (ScDrawLayer::GetAnchorType(*pObj) == SCA_CELL) + { + awt::Size aUnoSize; + awt::Point aCaptionPoint; +@@ -782,7 +777,7 @@ + if (xShape.is()) + { + uno::Reference< uno::XInterface > xAnchor; +- if (ScDrawLayer::GetAnchor(pObj) == SCA_CELL) ++ if (ScDrawLayer::GetAnchorType(*pObj) == SCA_CELL) + { + awt::Size aUnoSize; + awt::Point aCaptionPoint; +diff -ru sc.orig/source/ui/view/drawvie3.cxx sc/source/ui/view/drawvie3.cxx +--- sc.orig/source/ui/view/drawvie3.cxx 2009-06-04 12:39:42.000000000 +0100 ++++ sc/source/ui/view/drawvie3.cxx 2009-06-05 08:47:05.000000000 +0100 +@@ -77,7 +77,7 @@ + + // Verankerung setzen + +-void ScDrawView::SetAnchor( ScAnchorType eType ) ++void ScDrawView::SetPageAnchored() + { + SdrObject* pObj = NULL; + if( AreObjectsMarked() ) +@@ -87,7 +87,7 @@ + for( ULONG i=0; iGetMark(i)->GetMarkedSdrObj(); +- ScDrawLayer::SetAnchor( pObj, eType ); ++ ScDrawLayer::SetPageAnchored( *pObj ); + } + + if ( pViewData ) +@@ -95,7 +95,28 @@ + } + } + +-ScAnchorType ScDrawView::GetAnchor() const ++void ScDrawView::SetCellAnchored() ++{ ++ if (!pDoc) ++ return; ++ ++ SdrObject* pObj = NULL; ++ if( AreObjectsMarked() ) ++ { ++ const SdrMarkList* pMark = &GetMarkedObjectList(); ++ ULONG nCount = pMark->GetMarkCount(); ++ for( ULONG i=0; iGetMark(i)->GetMarkedSdrObj(); ++ ScDrawLayer::SetCellAnchoredFromPosition(*pObj, *pDoc, nTab); ++ } ++ ++ if ( pViewData ) ++ pViewData->GetDocShell()->SetDrawModified(); ++ } ++} ++ ++ScAnchorType ScDrawView::GetAnchorType() const + { + BOOL bPage = FALSE; + BOOL bCell = FALSE; +@@ -108,7 +129,7 @@ + for( ULONG i=0; iGetMark(i)->GetMarkedSdrObj(); +- if( ScDrawLayer::GetAnchor( pObj ) == SCA_CELL ) ++ if( ScDrawLayer::GetAnchorType( *pObj ) == SCA_CELL ) + bCell =TRUE; + else + bPage = TRUE; +@@ -138,6 +159,20 @@ + if ( nTab == ((ScTabSizeChangedHint&)rHint).GetTab() ) + UpdateWorkArea(); + } ++ else if ( rHint.ISA( SdrHint ) ) ++ { ++ if (const SdrHint* pSdrHint = PTR_CAST( SdrHint, &rHint )) ++ { ++ //Update the anchors of any non note object that is cell anchored which has ++ //been moved since the last anchors for its position was calculated ++ if (pSdrHint->GetKind() == HINT_OBJCHG || pSdrHint->GetKind() == HINT_OBJINSERTED) ++ if (SdrObject* pObj = const_cast(pSdrHint->GetObject())) ++ if (ScDrawObjData *pAnchor = ScDrawLayer::GetObjData(pObj)) ++ if (!pAnchor->mbNote && pAnchor->maLastRect != pObj->GetLogicRect()) ++ ScDrawLayer::SetCellAnchoredFromPosition(*pObj, *pDoc, nTab); ++ } ++ FmFormView::Notify( rBC,rHint ); ++ } + else + FmFormView::Notify( rBC,rHint ); + } +diff -ru sc.orig/source/ui/view/drawview.cxx sc/source/ui/view/drawview.cxx +--- sc.orig/source/ui/view/drawview.cxx 2009-06-04 12:39:41.000000000 +0100 ++++ sc/source/ui/view/drawview.cxx 2009-06-04 12:40:23.000000000 +0100 +@@ -155,46 +155,15 @@ + + void ScDrawView::AddCustomHdl() + { +- BOOL bNegativePage = pDoc->IsNegativePage( nTab ); +- + const SdrMarkList &rMrkList = GetMarkedObjectList(); + UINT32 nCount = rMrkList.GetMarkCount(); + for(UINT32 nPos=0; nPosGetMarkedSdrObj(); +- if(ScDrawLayer::GetAnchor(pObj) == SCA_CELL) ++ SdrObject* pObj = rMrkList.GetMark(nPos)->GetMarkedSdrObj(); ++ if (ScDrawObjData *pAnchor = ScDrawLayer::GetObjDataTab(pObj, nTab)) + { +- const INT32 nDelta = 1; +- +- Rectangle aBoundRect = pObj->GetCurrentBoundRect(); +- Point aPos; +- if (bNegativePage) +- { +- aPos = aBoundRect.TopRight(); +- aPos.X() = -aPos.X(); // so the loop below is the same +- } +- else +- aPos = aBoundRect.TopLeft(); +- long nPosX = (long) (aPos.X() / HMM_PER_TWIPS) + nDelta; +- long nPosY = (long) (aPos.Y() / HMM_PER_TWIPS) + nDelta; +- +- SCCOL nCol; +- INT32 nWidth = 0; +- +- for(nCol=0; nCol<=MAXCOL && nWidth<=nPosX; nCol++) +- nWidth += pDoc->GetColWidth(nCol,nTab); +- +- if(nCol > 0) +- --nCol; +- +- SCROW nRow = nPosY <= 0 ? 0 : pDoc->GetRowForHeight( nTab, +- (ULONG) nPosY); +- if(nRow > 0) +- --nRow; +- +- ScTabView* pView = pViewData->GetView(); +- ScAddress aScAddress(nCol, nRow, nTab); +- pView->CreateAnchorHandles(aHdl, aScAddress); ++ if (ScTabView* pView = pViewData->GetView()) ++ pView->CreateAnchorHandles(aHdl, pAnchor->maStart); + } + } + } +--- sc.orig/source/filter/xcl97/xcl97rec.cxx 2010-11-18 21:18:32.000000000 +0000 ++++ sc/source/filter/xcl97/xcl97rec.cxx 2010-11-18 21:19:31.000000000 +0000 +@@ -1014,7 +1014,7 @@ + if( const SdrObject* pShape = EscherEx::GetSdrObject( rObj.GetShape() ) ) + { + // OOXTODO: returning "twoCell" +- switch( ScDrawLayer::GetAnchor( pShape ) ) ++ switch( ScDrawLayer::GetAnchorType( *pShape ) ) + { + case SCA_CELL: return "oneCell"; + default: break; diff --git a/openoffice.org-3.1.0.oooXXXXX.solenv.allowmissing.patch b/openoffice.org-3.1.0.oooXXXXX.solenv.allowmissing.patch new file mode 100644 index 0000000..3ba2bd3 --- /dev/null +++ b/openoffice.org-3.1.0.oooXXXXX.solenv.allowmissing.patch @@ -0,0 +1,64 @@ +Index: bin/modules/installer/scriptitems.pm +=================================================================== +RCS file: /cvs/tools/solenv/bin/modules/installer/scriptitems.pm,v +retrieving revision 1.17 +diff -u -p -r1.17 scriptitems.pm +--- openoffice.org.orig/solenv/bin/modules/installer/scriptitems.pm 24 Feb 2005 16:21:15 -0000 1.17 ++++ openoffice.org/solenv/bin/modules/installer/scriptitems.pm 18 Mar 2005 22:39:42 -0000 +@@ -1065,7 +1065,7 @@ + } + else + { +- $infoline = "ERROR: Source for $$searchfilenameref not found!\n"; # Important message in log file ++ $infoline = "WARNING: Source for $$searchfilenameref not found!\n"; # Important message in log file + } + + push( @installer::globals::logfileinfo, $infoline); +@@ -1143,7 +1143,7 @@ + } + else + { +- $infoline = "ERROR: Source for $$searchfilenameref not found!\n"; # Important message in log file ++ $infoline = "WARNING: Source for $$searchfilenameref not found!\n"; # Important message in log file + } + + push( @installer::globals::logfileinfo, $infoline); +@@ -1360,11 +1360,10 @@ + + if ( ! $installer::globals::languagepack && !$installer::globals::helppack) + { +- $infoline = "ERROR: Removing file $filename from file list.\n"; ++ $infoline = "WARNING: Removing file $filename from file list.\n"; + push( @installer::globals::logfileinfo, $infoline); + +- push(@missingfiles, "ERROR: File not found: $filename\n"); +- $error_occured = 1; ++ push(@missingfiles, "WARNING: File not found: $filename\n"); + + next; # removing this file from list, if sourcepath is empty + } +@@ -1372,11 +1371,10 @@ + { + if (( $onefile->{'ismultilingual'} ) || ( $styles =~ /\bFORCELANGUAGEPACK\b/ )) + { +- $infoline = "ERROR: Removing file $filename from file list.\n"; ++ $infoline = "WARNING: Removing file $filename from file list.\n"; + push( @installer::globals::logfileinfo, $infoline); + +- push(@missingfiles, "ERROR: File not found: $filename\n"); +- $error_occured = 1; ++ push(@missingfiles, "WARNING: File not found: $filename\n"); + + next; # removing this file from list, if sourcepath is empty + } +--- openoffice.org.orig/solenv/bin/modules/installer/simplepackage.pm 2010-07-12 10:27:26.000000000 +0100 ++++ openoffice.org/solenv/bin/modules/installer/simplepackage.pm 2010-07-12 10:27:54.000000000 +0100 +@@ -53,7 +53,7 @@ + ( $installer::globals::packageformat eq "archive" )) + { + $installer::globals::is_simple_packager_project = 1; +- $installer::globals::patch_user_dir = 1; ++ $installer::globals::patch_user_dir = 0; + } + elsif( $installer::globals::packageformat eq "dmg" ) + { diff --git a/openoffice.org-3.1.1.ooo105784.vcl.sniffscriptforsubs.patch b/openoffice.org-3.1.1.ooo105784.vcl.sniffscriptforsubs.patch new file mode 100644 index 0000000..4555983 --- /dev/null +++ b/openoffice.org-3.1.1.ooo105784.vcl.sniffscriptforsubs.patch @@ -0,0 +1,189 @@ +diff -ru vcl.orig/unx/source/fontmanager/fontconfig.cxx vcl/unx/source/fontmanager/fontconfig.cxx +--- vcl.orig/unx/source/fontmanager/fontconfig.cxx 2009-10-08 13:25:00.000000000 +0100 ++++ vcl/unx/source/fontmanager/fontconfig.cxx 2009-10-08 13:51:51.000000000 +0100 +@@ -80,6 +80,9 @@ + + #include "sal/alloca.h" + ++#include //unicode::getUnicodeScriptType ++#include //ScriptType ++ + #include + #include + +@@ -907,6 +910,138 @@ + } + } + ++static const char* pick_sample_language(const sal_uInt32 cCode) ++{ ++ using namespace ::com::sun::star::i18n; ++ ++ static ScriptTypeList aScripts[] = ++ { ++ { UnicodeScript_kBasicLatin, UnicodeScript_kBasicLatin, UnicodeScript_kBasicLatin }, ++ { UnicodeScript_kLatin1Supplement, UnicodeScript_kLatin1Supplement, UnicodeScript_kLatin1Supplement }, ++ { UnicodeScript_kLatinExtendedA, UnicodeScript_kLatinExtendedA, UnicodeScript_kLatinExtendedA }, ++ { UnicodeScript_kLatinExtendedB, UnicodeScript_kLatinExtendedB, UnicodeScript_kLatinExtendedB }, ++ { UnicodeScript_kGreek, UnicodeScript_kGreek, UnicodeScript_kGreek }, ++ { UnicodeScript_kCyrillic, UnicodeScript_kCyrillic, UnicodeScript_kCyrillic }, ++ { UnicodeScript_kArmenian, UnicodeScript_kArmenian, UnicodeScript_kArmenian }, ++ { UnicodeScript_kHebrew, UnicodeScript_kHebrew, UnicodeScript_kHebrew }, ++ { UnicodeScript_kArabic, UnicodeScript_kArabic, UnicodeScript_kArabic }, ++ { UnicodeScript_kSyriac, UnicodeScript_kSyriac, UnicodeScript_kSyriac }, ++ { UnicodeScript_kThaana, UnicodeScript_kThaana, UnicodeScript_kThaana }, ++ { UnicodeScript_kDevanagari, UnicodeScript_kDevanagari, UnicodeScript_kDevanagari }, ++ { UnicodeScript_kBengali, UnicodeScript_kBengali, UnicodeScript_kBengali }, ++ { UnicodeScript_kGurmukhi, UnicodeScript_kGurmukhi, UnicodeScript_kGurmukhi }, ++ { UnicodeScript_kGujarati, UnicodeScript_kGujarati, UnicodeScript_kGujarati }, ++ { UnicodeScript_kOriya, UnicodeScript_kOriya, UnicodeScript_kOriya }, ++ { UnicodeScript_kTamil, UnicodeScript_kTamil, UnicodeScript_kTamil }, ++ { UnicodeScript_kTelugu, UnicodeScript_kTelugu, UnicodeScript_kTelugu }, ++ { UnicodeScript_kKannada, UnicodeScript_kKannada, UnicodeScript_kKannada }, ++ { UnicodeScript_kMalayalam, UnicodeScript_kMalayalam, UnicodeScript_kMalayalam }, ++ { UnicodeScript_kSinhala, UnicodeScript_kSinhala, UnicodeScript_kSinhala }, ++ { UnicodeScript_kThai, UnicodeScript_kThai, UnicodeScript_kThai }, ++ { UnicodeScript_kLao, UnicodeScript_kLao, UnicodeScript_kLao }, ++ { UnicodeScript_kTibetan, UnicodeScript_kTibetan, UnicodeScript_kTibetan }, ++ { UnicodeScript_kMyanmar, UnicodeScript_kMyanmar, UnicodeScript_kMyanmar }, ++ { UnicodeScript_kGeorgian, UnicodeScript_kGeorgian, UnicodeScript_kGeorgian }, ++ { UnicodeScript_kHangulJamo, UnicodeScript_kHangulJamo, UnicodeScript_kHangulJamo }, ++ { UnicodeScript_kEthiopic, UnicodeScript_kEthiopic, UnicodeScript_kEthiopic }, ++ { UnicodeScript_kCherokee, UnicodeScript_kCherokee, UnicodeScript_kCherokee }, ++ { UnicodeScript_kUnifiedCanadianAboriginalSyllabics, ++ UnicodeScript_kUnifiedCanadianAboriginalSyllabics, ++ UnicodeScript_kUnifiedCanadianAboriginalSyllabics }, ++ { UnicodeScript_kKhmer, UnicodeScript_kKhmer, UnicodeScript_kKhmer }, ++ { UnicodeScript_kMongolian, UnicodeScript_kMongolian, UnicodeScript_kMongolian }, ++ { UnicodeScript_kLatinExtendedAdditional, UnicodeScript_kLatinExtendedAdditional, ++ UnicodeScript_kLatinExtendedAdditional }, ++ { UnicodeScript_kGreekExtended, UnicodeScript_kGreekExtended, UnicodeScript_kGreekExtended }, ++ { UnicodeScript_kHiragana, UnicodeScript_kHiragana, UnicodeScript_kHiragana }, ++ { UnicodeScript_kKatakana, UnicodeScript_kKatakana, UnicodeScript_kKatakana }, ++ { UnicodeScript_kHangulCompatibilityJamo, UnicodeScript_kHangulCompatibilityJamo, ++ UnicodeScript_kHangulCompatibilityJamo }, ++ { UnicodeScript_kHangulSyllable, UnicodeScript_kHangulSyllable, ++ UnicodeScript_kHangulSyllable }, ++ { UnicodeScript_kArabicPresentationB, UnicodeScript_kArabicPresentationB, ++ UnicodeScript_kArabicPresentationB }, ++ { UnicodeScript_kScriptCount, UnicodeScript_kScriptCount, UnicodeScript_kScriptCount } ++ }; ++ ++ switch (unicode::getUnicodeScriptType(cCode, aScripts, UnicodeScript_kScriptCount)) ++ { ++ case UnicodeScript_kBasicLatin: ++ case UnicodeScript_kLatin1Supplement: ++ case UnicodeScript_kLatinExtendedA: ++ case UnicodeScript_kLatinExtendedB: ++ case UnicodeScript_kLatinExtendedAdditional: ++ return "en"; ++ case UnicodeScript_kGreek: ++ case UnicodeScript_kGreekExtended: ++ return "el"; ++ case UnicodeScript_kCyrillic: ++ return "ru"; ++ case UnicodeScript_kArmenian: ++ return "hy"; ++ case UnicodeScript_kHebrew: ++ return "he"; ++ case UnicodeScript_kArabic: ++ case UnicodeScript_kArabicPresentationB: ++ return "ar"; ++ case UnicodeScript_kSyriac: ++ return "syr"; ++ case UnicodeScript_kThaana: ++ return "dv"; ++ case UnicodeScript_kDevanagari: ++ return "hi"; ++ case UnicodeScript_kBengali: ++ return "bn"; ++ case UnicodeScript_kGurmukhi: ++ return "pa"; ++ case UnicodeScript_kGujarati: ++ return "gu"; ++ case UnicodeScript_kOriya: ++ return "or"; ++ case UnicodeScript_kTamil: ++ return "ta"; ++ case UnicodeScript_kTelugu: ++ return "te"; ++ case UnicodeScript_kKannada: ++ return "ka"; ++ case UnicodeScript_kMalayalam: ++ return "ml"; ++ case UnicodeScript_kSinhala: ++ return "si"; ++ case UnicodeScript_kThai: ++ return "th"; ++ case UnicodeScript_kLao: ++ return "lo"; ++ case UnicodeScript_kTibetan: ++ return "bo"; ++ case UnicodeScript_kMyanmar: ++ return "my"; ++ case UnicodeScript_kGeorgian: ++ return "ka"; ++ case UnicodeScript_kHangulJamo: ++ case UnicodeScript_kHangulCompatibilityJamo: ++ case UnicodeScript_kHangulSyllable: ++ return "ko"; ++ case UnicodeScript_kEthiopic: ++ return "am"; ++ case UnicodeScript_kCherokee: ++ return "chr"; ++ case UnicodeScript_kUnifiedCanadianAboriginalSyllabics: ++ return "ui"; ++ case UnicodeScript_kKhmer: ++ return "km"; ++ case UnicodeScript_kMongolian: ++ return "mn"; ++ case UnicodeScript_kHiragana: ++ case UnicodeScript_kKatakana: ++ return "ja"; ++ default: ++ break; ++ } ++ ++ return NULL; ++} ++ + rtl::OUString PrintFontManager::Substitute(const rtl::OUString& rFontName, + rtl::OUString& rMissingCodes, const rtl::OString &rLangAttrib, + italic::type &rItalic, weight::type &rWeight, +@@ -928,8 +1063,6 @@ + rWrapper.FcPatternAddString( pPattern, FC_FAMILY, pTargetNameUtf8 ); + + const FcChar8* pLangAttribUtf8 = (FcChar8*)rLangAttrib.getStr(); +- if( rLangAttrib.getLength() ) +- rWrapper.FcPatternAddString( pPattern, FC_LANG, pLangAttribUtf8 ); + + // Add required Unicode characters, if any + if ( rMissingCodes.getLength() ) +@@ -940,11 +1073,16 @@ + // also handle unicode surrogates + const sal_uInt32 nCode = rMissingCodes.iterateCodePoints( &nStrIndex ); + rWrapper.FcCharSetAddChar( unicodes, nCode ); ++ if (!pLangAttribUtf8) ++ pLangAttribUtf8 = (const FcChar8*)pick_sample_language(nCode); + } + rWrapper.FcPatternAddCharSet( pPattern, FC_CHARSET, unicodes); + rWrapper.FcCharSetDestroy( unicodes ); + } + ++ if( pLangAttribUtf8 ) ++ rWrapper.FcPatternAddString( pPattern, FC_LANG, pLangAttribUtf8 ); ++ + addtopattern(rWrapper, pPattern, rItalic, rWeight, rWidth, rPitch); + + // query fontconfig for a substitute +diff -ru vcl.orig/util/makefile.mk vcl/util/makefile.mk +--- vcl.orig/util/makefile.mk 2009-10-08 13:25:00.000000000 +0100 ++++ vcl/util/makefile.mk 2009-10-08 13:25:09.000000000 +0100 +@@ -298,6 +298,7 @@ + # libs for generic plugin + SHL2STDLIBS=\ + $(VCLLIB)\ ++ $(I18NUTILLIB) \ + $(I18NPAPERLIB) \ + $(I18NISOLANGLIB) \ + $(TOOLSLIB) \ diff --git a/openoffice.org-3.3.0.ooo108637.sfx2.uisavedir.patch b/openoffice.org-3.3.0.ooo108637.sfx2.uisavedir.patch new file mode 100644 index 0000000..6ea6c1d --- /dev/null +++ b/openoffice.org-3.3.0.ooo108637.sfx2.uisavedir.patch @@ -0,0 +1,41 @@ +diff -r 3c24aa9a7810 sfx2/source/doc/guisaveas.cxx +--- a/sfx2/source/doc/guisaveas.cxx Sat Jan 23 16:31:03 2010 +0000 ++++ b/sfx2/source/doc/guisaveas.cxx Sun Jan 24 17:16:37 2010 +0000 +@@ -231,7 +231,7 @@ + sal_Bool bSetStandardName, + ::rtl::OUString& aSuggestedName, + sal_Bool bPreselectPassword, +- const ::rtl::OUString& aSuggestedDir, ++ ::rtl::OUString& aSuggestedDir, + sal_Int16 nDialog, + const ::rtl::OUString& rStandardDir, + const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList +@@ -731,7 +731,7 @@ + sal_Bool bSetStandardName, + ::rtl::OUString& aSuggestedName, + sal_Bool bPreselectPassword, +- const ::rtl::OUString& aSuggestedDir, ++ ::rtl::OUString& aSuggestedDir, + sal_Int16 nDialog, + const ::rtl::OUString& rStandardDir, + const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList) +@@ -927,6 +927,7 @@ + INetURLObject aURL( pFileDlg->GetPath() ); + // the path should be provided outside since it might be used for further calls to the dialog + aSuggestedName = aURL.GetName( INetURLObject::DECODE_WITH_CHARSET ); ++ aSuggestedDir = pFileDlg->GetDisplayDirectory(); + + // old filter options should be cleared in case different filter is used + +@@ -1412,10 +1413,8 @@ + sal_Bool bExit = sal_False; + while ( !bExit ) + { ++ // in case the dialog is opened a second time the folder should be the same as previously navigated to by the user, not what was handed over by initial parameters + bUseFilterOptions = aModelData.OutputFileDialog( nStoreMode, aFilterProps, bSetStandardName, aSuggestedName, bPreselectPassword, aSuggestedDir, nDialog, sStandardDir, aBlackList ); +- +- // in case the dialog is opend a second time the folder should be the same as before, not what was handed over by parameters +- aSuggestedDir = ::rtl::OUString(); + if ( nStoreMode == SAVEAS_REQUESTED ) + { + // in case of saving check filter for possible alien warning diff --git a/openoffice.org-3.3.0.ooo113273.desktop.resolvelinks.patch b/openoffice.org-3.3.0.ooo113273.desktop.resolvelinks.patch new file mode 100644 index 0000000..ca76130 --- /dev/null +++ b/openoffice.org-3.3.0.ooo113273.desktop.resolvelinks.patch @@ -0,0 +1,55 @@ +diff -ru desktop.orig/source/deployment/misc/dp_misc.cxx desktop/source/deployment/misc/dp_misc.cxx +--- desktop.orig/source/deployment/misc/dp_misc.cxx 2010-07-20 08:31:24.000000000 +0100 ++++ desktop/source/deployment/misc/dp_misc.cxx 2010-07-20 09:12:23.000000000 +0100 +@@ -143,6 +143,23 @@ + return pipe.is(); + } + ++//get modification time ++static bool getModifyTimeTargetFile(const OUString &rFileURL, TimeValue &rTime) ++{ ++ ::osl::DirectoryItem item; ++ if (::osl::DirectoryItem::get(rFileURL, item) != ::osl::File::E_None) ++ return false; ++ ++ ::osl::FileStatus stat(FileStatusMask_ModifyTime|FileStatusMask_Type|FileStatusMask_LinkTargetURL); ++ if (item.getFileStatus(stat) != ::osl::File::E_None) ++ return false; ++ ++ if( stat.getFileType() == ::osl::FileStatus::Link ) ++ return getModifyTimeTargetFile(stat.getLinkTargetURL(), rTime); ++ ++ rTime = stat.getModifyTime(); ++ return true; ++} + + //Returns true if the Folder was more recently modified then + //the lastsynchronized file. That is the repository needs to +@@ -181,15 +198,12 @@ + + //compare the modification time of the extension folder and the last + //modified file +- ::osl::FileStatus statFolder(FileStatusMask_ModifyTime); +- ::osl::FileStatus statFile(FileStatusMask_ModifyTime); +- if (itemExtFolder.getFileStatus(statFolder) == ::osl::File::E_None) ++ TimeValue timeFolder; ++ if (getModifyTimeTargetFile(folderURL, timeFolder)) + { +- if (itemFile.getFileStatus(statFile) == ::osl::File::E_None) ++ TimeValue timeFile; ++ if (getModifyTimeTargetFile(fileURL, timeFile)) + { +- TimeValue timeFolder = statFolder.getModifyTime(); +- TimeValue timeFile = statFile.getModifyTime(); +- + if (timeFile.Seconds < timeFolder.Seconds) + bNeedsSync = true; + } +@@ -204,6 +218,7 @@ + OSL_ASSERT(0); + bNeedsSync = true; + } ++ + return bNeedsSync; + } + diff --git a/turn-script-providers-into-extensions.patch b/turn-script-providers-into-extensions.patch new file mode 100644 index 0000000..61994d9 --- /dev/null +++ b/turn-script-providers-into-extensions.patch @@ -0,0 +1,395 @@ +diff --git a/scp2/source/ooo/file_ooo.scp b/scp2/source/ooo/file_ooo.scp +index d052261..0eb090c 100644 +--- a/scp2/source/ooo/file_ooo.scp ++++ b/scp2/source/ooo/file_ooo.scp +@@ -453,10 +453,6 @@ UNO_JAR_FILE( gid_File_Jar_Lucenehelpwrapper, LuceneHelpWrapper ) + #endif + + #ifdef SOLAR_JAVA +-STD_JAR_FILE( gid_File_Jar_Js, js ) +-#endif +- +-#ifdef SOLAR_JAVA + + #ifndef MACOSX + +@@ -501,9 +497,7 @@ End + + #ifdef SOLAR_JAVA + UNO_JAR_FILE( gid_File_Jar_Scriptframework, ScriptFramework ) +-UNO_JAR_FILE( gid_File_Jar_Scriptproviderforbeanshell, ScriptProviderForBeanShell ) + UNO_JAR_FILE( gid_File_Jar_Scriptproviderforjava, ScriptProviderForJava ) +-UNO_JAR_FILE( gid_File_Jar_Scriptproviderforjavascript, ScriptProviderForJavaScript ) + #endif + + #ifdef SOLAR_JAVA +diff --git a/scp2/source/ooo/module_hidden_ooo.scp b/scp2/source/ooo/module_hidden_ooo.scp +index 5ffe87a..4a4b2ff 100644 +--- a/scp2/source/ooo/module_hidden_ooo.scp ++++ b/scp2/source/ooo/module_hidden_ooo.scp +@@ -91,7 +91,6 @@ Module gid_Module_Root_Files_3 + gid_File_Jar_Hsqldb, + gid_File_Jar_Hsqldb_Sdbc, + gid_File_Jar_Accessbridge, +- gid_File_Jar_Js, + gid_File_Jar_Officebean, + gid_File_Jar_Report, + gid_File_Jar_Table, +@@ -104,9 +103,7 @@ Module gid_Module_Root_Files_3 + gid_File_Jar_Commonwizards, + gid_File_Jar_Sandbox, + gid_File_Jar_Scriptframework, +- gid_File_Jar_Scriptproviderforbeanshell, + gid_File_Jar_Scriptproviderforjava, +- gid_File_Jar_Scriptproviderforjavascript, + gid_File_Jar_Xml_Apis, + gid_File_Jar_Bsh, + gid_File_Jar_Classes, +diff --git a/scp2/source/python/file_python.scp b/scp2/source/python/file_python.scp +index e586876..0876b53 100644 +--- a/scp2/source/python/file_python.scp ++++ b/scp2/source/python/file_python.scp +@@ -104,18 +104,6 @@ + #endif + #endif + +-// Scripting Framework Python script proxy +- +-#ifndef AIX +-File gid_File_Py_Pythonscript +- TXT_FILE_BODY; +- Dir = gid_Dir_Program; +- Name = "pythonscript.py"; +- RegistryID = gid_Starregistry_Services_Rdb; +- Styles = (PACKED,UNO_COMPONENT); +-End +-#endif +- + //Scripting Framework Python example scripts + + File gid_File_Scripts_Python +diff --git a/scp2/source/python/module_python.scp b/scp2/source/python/module_python.scp +index 3abeec2..d32f6f6 100644 +--- a/scp2/source/python/module_python.scp ++++ b/scp2/source/python/module_python.scp +@@ -32,7 +32,7 @@ + MOD_NAME_DESC ( MODULE_OPTIONAL_PYTHON ); + ParentID = gid_Module_Optional; + Sortkey = "750"; +- Files = (gid_File_Pyuno,gid_File_Lib_Pyuno,gid_File_Lib_Pythonloader,gid_File_Py_Unohelper,gid_File_Py_Officehelper,gid_File_Py_Uno,gid_File_Py_Pythonloader,gid_File_Py_Python_Core,gid_File_Py_Python_Bin,gid_File_Lib_Python_So,gid_Shortcut_Lib_Python_So,gid_File_Lib_Python_So_Brand, gid_File_Py_Scriptprovider,gid_File_Py_Pythonscript,gid_File_Scripts_Python,gid_File_Share_Registry_Pyuno_Xcd); ++ Files = (gid_File_Pyuno,gid_File_Lib_Pyuno,gid_File_Lib_Pythonloader,gid_File_Py_Unohelper,gid_File_Py_Officehelper,gid_File_Py_Uno,gid_File_Py_Pythonloader,gid_File_Py_Python_Core,gid_File_Py_Python_Bin,gid_File_Lib_Python_So,gid_Shortcut_Lib_Python_So,gid_File_Lib_Python_So_Brand,gid_File_Scripts_Python,gid_File_Share_Registry_Pyuno_Xcd); + Minimal = NO; + Default = YES; + Styles = ( ); +diff --git a/scripting/prj/build.lst b/scripting/prj/build.lst +index 7d51621..81a8512 100755 +--- a/scripting/prj/build.lst ++++ b/scripting/prj/build.lst +@@ -12,3 +12,5 @@ tc scripting\java nmake - all tc1_scriptingjava tc1_scriptingprovider tc1_s + tc scripting\examples\java nmake - all tc1_scriptingexamplesjava tc1_scriptingjava NULL + tc scripting\examples nmake - all tc1_scriptingexamples tc1_scriptingexamplesjava tc1_inc NULL + tc scripting\util nmake - all tc1_scriptingutil tc1_scriptingprovider tc1_scriptingprotocolhandler tc1_scriptingbasprov tc1_scriptingstringresource tc1_scriptingvbaevents tc1_scriptingpyprov tc1_scriptingjava tc1_scriptingexamplesjava tc1_scriptingexamples NULL ++tc scripting\util\provider\javascript nmake - all tc1_scriptingjsprov tc1_scriptingjava NULL ++tc scripting\util\provider\beanshell nmake - all tc1_scriptingbshprov tc1_scriptingjava NULL +diff --git a/scripting/prj/d.lst b/scripting/prj/d.lst +index ef216fe..30d5e1c 100644 +--- a/scripting/prj/d.lst ++++ b/scripting/prj/d.lst +@@ -15,3 +15,6 @@ mkdir: %_DEST%\bin%_EXT%\pyuno + ..\source\storage\storage.xml %_DEST%\xml%_EXT%\storage.xml + + ..\%__SRC%\lib\lib*static*.dylib %_DEST%\lib%_EXT%\lib*static*.dylib ++ ++# Extensions ++..\%__SRC%\bin\*.oxt %_DEST%\bin%_EXT%\*.oxt +diff --git a/scripting/source/pyprov/description.xml b/scripting/source/pyprov/description.xml +new file mode 100644 +index 0000000..1fe0a3d +--- /dev/null ++++ b/scripting/source/pyprov/description.xml +@@ -0,0 +1,24 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ The ++ Document Foundation ++ ++ ++ ++ Script provider for Python ++ ++ ++ +diff --git a/scripting/source/pyprov/makefile.mk b/scripting/source/pyprov/makefile.mk +index 3c02785..2a63d9f 100644 +--- a/scripting/source/pyprov/makefile.mk ++++ b/scripting/source/pyprov/makefile.mk +@@ -39,11 +39,26 @@ TARGET=pyprov + + # --- Targets ------------------------------------------------------ + ALL : ALLTAR \ +- $(DLLDEST)$/pythonscript.py \ + $(DLLDEST)$/officehelper.py \ + $(DLLDEST)$/mailmerge.py + + $(DLLDEST)$/%.py: %.py + cp $? $@ + +-.INCLUDE : target.mk ++# scripting provider extension ++.IF "$(L10N_framework)"=="" ++ ++EXTENSIONNAME:=ScriptProviderForPython ++EXTENSION_ZIPNAME:=script-provider-for-python ++ ++COMPONENT_FILES=$(EXTENSIONDIR)$/pythonscript.py ++ ++.INCLUDE : extension_pre.mk ++.INCLUDE : target.mk ++.INCLUDE : extension_post.mk ++ ++.ELSE ++ ++.INCLUDE : target.mk ++ ++.ENDIF +diff --git a/scripting/source/pyprov/manifest.xml b/scripting/source/pyprov/manifest.xml +new file mode 100644 +index 0000000..7e4e045 +--- /dev/null ++++ b/scripting/source/pyprov/manifest.xml +@@ -0,0 +1,7 @@ ++ ++ ++ ++ ++ +diff --git a/scripting/util/provider/beanshell/description.xml b/scripting/util/provider/beanshell/description.xml +new file mode 100644 +index 0000000..6b05318 +--- /dev/null ++++ b/scripting/util/provider/beanshell/description.xml +@@ -0,0 +1,24 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ The ++ Document Foundation ++ ++ ++ ++ Script provider for BeanShell ++ ++ ++ +diff --git a/scripting/util/provider/beanshell/makefile.mk b/scripting/util/provider/beanshell/makefile.mk +new file mode 100644 +index 0000000..7e16329 +--- /dev/null ++++ b/scripting/util/provider/beanshell/makefile.mk +@@ -0,0 +1,48 @@ ++# Version: MPL 1.1 / GPLv3+ / LGPLv3+ ++# ++# The contents of this file are subject to the Mozilla Public License Version ++# 1.1 (the "License"); you may not use this file except in compliance with ++# the License. You may obtain a copy of the License at ++# http://www.mozilla.org/MPL/ ++# ++# Software distributed under the License is distributed on an "AS IS" basis, ++# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++# for the specific language governing rights and limitations under the ++# License. ++# ++# The Initial Developer of the Original Code is ++# Red Hat, Inc. ++# Portions created by the Initial Developer are Copyright (C) 2010 the ++# Initial Developer. All Rights Reserved. ++# ++# Contributor(s): David Tardon ++# ++# Alternatively, the contents of this file may be used under the terms of ++# either the GNU General Public License Version 3 or later (the "GPLv3+"), or ++# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), ++# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable ++# instead of those above. ++ ++PRJ=..$/..$/.. ++ ++PRJNAME=scripting ++TARGET=bshprov ++ ++.INCLUDE : settings.mk ++ ++.IF "$(L10N_framework)"=="" && "$(SOLAR_JAVA)"!="" ++ ++EXTENSIONNAME:=ScriptProviderForBeanShell ++EXTENSION_ZIPNAME:=script-provider-for-beanshell ++ ++COMPONENT_JARFILES=$(EXTENSIONDIR)$/$(EXTENSIONNAME).jar ++ ++.INCLUDE : extension_pre.mk ++.INCLUDE : target.mk ++.INCLUDE : extension_post.mk ++ ++.ELSE ++ ++.INCLUDE : target.mk ++ ++.ENDIF +diff --git a/scripting/util/provider/beanshell/manifest.xml b/scripting/util/provider/beanshell/manifest.xml +new file mode 100644 +index 0000000..da8e620 +--- /dev/null ++++ b/scripting/util/provider/beanshell/manifest.xml +@@ -0,0 +1,7 @@ ++ ++ ++ ++ ++ +diff --git a/scripting/util/provider/javascript/description.xml b/scripting/util/provider/javascript/description.xml +new file mode 100644 +index 0000000..58f0478 +--- /dev/null ++++ b/scripting/util/provider/javascript/description.xml +@@ -0,0 +1,24 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ The ++ Document Foundation ++ ++ ++ ++ Script provider for JavaScript ++ ++ ++ +diff --git a/scripting/util/provider/javascript/makefile.mk b/scripting/util/provider/javascript/makefile.mk +new file mode 100644 +index 0000000..a99096a +--- /dev/null ++++ b/scripting/util/provider/javascript/makefile.mk +@@ -0,0 +1,55 @@ ++# Version: MPL 1.1 / GPLv3+ / LGPLv3+ ++# ++# The contents of this file are subject to the Mozilla Public License Version ++# 1.1 (the "License"); you may not use this file except in compliance with ++# the License. You may obtain a copy of the License at ++# http://www.mozilla.org/MPL/ ++# ++# Software distributed under the License is distributed on an "AS IS" basis, ++# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++# for the specific language governing rights and limitations under the ++# License. ++# ++# The Initial Developer of the Original Code is ++# Red Hat, Inc. ++# Portions created by the Initial Developer are Copyright (C) 2010 the ++# Initial Developer. All Rights Reserved. ++# ++# Contributor(s): David Tardon ++# ++# Alternatively, the contents of this file may be used under the terms of ++# either the GNU General Public License Version 3 or later (the "GPLv3+"), or ++# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), ++# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable ++# instead of those above. ++ ++PRJ=..$/..$/.. ++ ++PRJNAME=scripting ++TARGET=jsprov ++ ++.INCLUDE : settings.mk ++ ++.IF "$(L10N_framework)"=="" && "$(SOLAR_JAVA)"!="" ++ ++EXTENSIONNAME:=ScriptProviderForJavaScript ++EXTENSION_ZIPNAME:=script-provider-for-javascript ++ ++COMPONENT_JARFILES=$(EXTENSIONDIR)$/$(EXTENSIONNAME).jar ++EXTENSION_PACKDEPS=$(SOLARBINDIR)$/js.jar ++ ++.INCLUDE : extension_pre.mk ++.INCLUDE : target.mk ++.INCLUDE : extension_post.mk ++ ++ALLTAR : $(EXTENSIONDIR)$/js.jar ++ ++$(EXTENSIONDIR)$/js.jar : $(SOLARBINDIR)$/js.jar ++ @@-$(MKDIRHIER) $(@:d) ++ $(COMMAND_ECHO)$(COPY) $< $@ ++ ++.ELSE ++ ++.INCLUDE : target.mk ++ ++.ENDIF +diff --git a/scripting/util/provider/javascript/manifest.xml b/scripting/util/provider/javascript/manifest.xml +new file mode 100644 +index 0000000..4c61747 +--- /dev/null ++++ b/scripting/util/provider/javascript/manifest.xml +@@ -0,0 +1,10 @@ ++ ++ ++ ++ ++ ++ +diff --git a/instsetoo_native/util/makefile.mk b/instsetoo_native/util/makefile.mk +--- a/instsetoo_native/util/makefile.mk ++++ b/instsetoo_native/util/makefile.mk +@@ -72,7 +72,6 @@ LOCALPYFILES= \ + $(BIN)$/uno.py \ + $(BIN)$/unohelper.py \ + $(BIN)$/pythonloader.py \ +- $(BIN)$/pythonscript.py \ + $(BIN)$/officehelper.py \ + $(BIN)$/mailmerge.py + diff --git a/unowinreg.dll b/unowinreg.dll new file mode 100644 index 0000000000000000000000000000000000000000..d78bb552493d34514a7154c7ee801588967c88d5 GIT binary patch literal 6144 zcmeHLUuaWj6hG-=8@0M@TGwrb-Og5ImU7cZZHr^6ZFJSv{)whe+r``DHVI4bE%zp? z6*pvKU@a?U4}!11r<%xPr(% zLcTlkCisp`6B7-Bf0^Q634XouVoJU&cuzDKVT?yb+~p-|x2>QnO_y5JKDTIX%$tZlNd+v3t{~x;`(8RMd`K7F__ItM1NrYe(=qZxv(d= z;JKrVr~x`jBC5!>EhfW%{UY|-xOy}W`-dDj2gJE%lE558B05rQgp{~KRLM3dgx@Og ztl>fQwMjQ>V!aGPZUUF()bJ2Z)f%P|ge-D}LhSh>c-HVRo}tEcI3oSz594iMVSads zcIu(`0^1toKww_IJX?YaT-_m&bLPPK9V<~fZnF}OZfo)!&Y*wVK?}8Cb=Y__=;+zvJ=MLd>ue)iL;eNyiT=Zb( z)Xd@jX(!u0zEirOK^`3oP$UE)V&iUwTs7v+iq%TYjd|}Q4ADAPnSDV&EfTBHznOlrs`(P-`;m@J!-gfSk?Bbqu!&<^drkHG2K+5pnq8EPN>GHUx_7DcA$G1U7I$j z!wb6RR)2F>TYX(^C>DEo<8(g9D~W6{^J@-MIb;tg0^;60gZGuw;D3S|ULe{6c?|qF z(BL|vuOXj;?-|f9pbf7R9Rht0x&e9>b?OD32JucsxJlS)1zxR6$U!S9q3I)0%}~Q4 z%-w3-uNr1l*EkQ_qr9&Kg8ERvOlSc!t{8z>bRZDZm5^!#dZQW&fm{PgfPgEzN{_#k z3*Hh_Oj9*`bUj|c<^myM7^)U;(Y3*7_{lI1n5t1Af@quq*S70HCDx$?BT-E)5P~B& z3s@_B$)+-*I+R$r0ZIoh>x*Pf3qoY%jZXl}7VA8P6warMQcT42QN!%KDF zh!!6*gHe}Ui|@9+fvDCu-vS0@_5E7P$Zs%5cOmyI)M}b-$%PJ=kcBW?t|pp zgM;1?&-WyMOIZ2u4!fvDN)+r0iem#_oD7PRMq!{uDMl)gH5w!xUY`jcncR4}+75Cf z299VSy@a(b@EJng75I-rr$AB#wvQ6fNz?(vAnA`Wp2KxNlrU8l$(EV59LK^jNPM8whPG$K3_iNvw3(e(J|VBHSGe4y}1&@$dD@;rU>$+JUWTaBkwxIFVj}c2CzcH z2|Qk{T7hjtHz?RGo$36E5mn)=@ed!Yd@d%UQxMO5ElcdT?XzT#JWtn4ih;zPa^Hp} zPs4C>{K!w9k=MIa*A-Vu-C*6hx^?yU>LYH=9d{pdqh#Vg#vQUpZk6Ab+vTpz_3|{N KupC3-75ES7=