Rebased ref, commits from common ancestor: commit 93bc47b12923af03f720e1f815a8bcde4384ef35 Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Wed Nov 7 09:30:48 2012 -0500
Let's use a separate class to manage storage of cell text widths. Change-Id: I5c823dea4d2e1fd17fae466be26ebff2aa24ecb6 diff --git a/sc/Library_sc.mk b/sc/Library_sc.mk index 865f5f0..10605bf 100644 --- a/sc/Library_sc.mk +++ b/sc/Library_sc.mk @@ -100,6 +100,7 @@ $(eval $(call gb_Library_add_exception_objects,sc,\ sc/source/core/data/bcaslot \ sc/source/core/data/cell \ sc/source/core/data/cell2 \ + sc/source/core/data/celltextwidths \ sc/source/core/data/clipparam \ sc/source/core/data/column \ sc/source/core/data/column2 \ diff --git a/sc/inc/cell.hxx b/sc/inc/cell.hxx index d146a98..455fdc8 100644 --- a/sc/inc/cell.hxx +++ b/sc/inc/cell.hxx @@ -38,7 +38,6 @@ #include "scdllapi.h" #define USE_MEMPOOL -#define TEXTWIDTH_DIRTY 0xffff // in addition to SCRIPTTYPE_... flags from scripttypeitem.hxx: // set (in nScriptType) if type has not been determined yet diff --git a/sc/inc/celltextwidths.hxx b/sc/inc/celltextwidths.hxx new file mode 100644 index 0000000..ef4499b --- /dev/null +++ b/sc/inc/celltextwidths.hxx @@ -0,0 +1,37 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef __SC_CELLTEXTWIDTHS_HXX__ +#define __SC_CELLTEXTWIDTHS_HXX__ + +#include "address.hxx" +#include "sal/types.h" + +#include <mdds/multi_type_vector.hpp> +#include <mdds/multi_type_vector_trait.hpp> + +class ScCellTextWidths +{ + typedef mdds::multi_type_vector<mdds::mtv::element_block_func> StoreType; + StoreType maStore; + +public: + static sal_uInt16 Dirty; + + ScCellTextWidths(); + + sal_uInt16 get(SCROW nRow) const; + void set(SCROW nRow, sal_uInt16 nWidth); +}; + +#define TEXTWIDTH_DIRTY ScCellTextWidths::Dirty + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/data/cell.cxx b/sc/source/core/data/cell.cxx index 0967e81..78cdd46 100644 --- a/sc/source/core/data/cell.cxx +++ b/sc/source/core/data/cell.cxx @@ -40,6 +40,7 @@ #include "externalrefmgr.hxx" #include "macromgr.hxx" #include "dbdata.hxx" +#include "celltextwidths.hxx" #include <editeng/editobj.hxx> #include <svl/intitem.hxx> diff --git a/sc/source/core/data/celltextwidths.cxx b/sc/source/core/data/celltextwidths.cxx new file mode 100644 index 0000000..39240d3 --- /dev/null +++ b/sc/source/core/data/celltextwidths.cxx @@ -0,0 +1,35 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "celltextwidths.hxx" + +sal_uInt16 ScCellTextWidths::Dirty = 0xFFFF; + +ScCellTextWidths::ScCellTextWidths() : + maStore(MAXROWCOUNT) {} + +sal_uInt16 ScCellTextWidths::get(SCROW nRow) const +{ + switch (maStore.get_type(nRow)) + { + case mdds::mtv::element_type_ushort: + return maStore.get<unsigned short>(nRow); + default: + ; + } + return Dirty; +} + +void ScCellTextWidths::set(SCROW nRow, sal_uInt16 nWidth) +{ + // We only use unsigned short type in this container. + maStore.set(nRow, static_cast<unsigned short>(nWidth)); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index 682a7bb..b8b1b84 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -29,6 +29,7 @@ #include "markdata.hxx" #include "detfunc.hxx" // for Notes in Sort/Swap #include "postit.hxx" +#include "celltextwidths.hxx" #include <svl/poolcach.hxx> #include <svl/zforlist.hxx> @@ -36,8 +37,6 @@ #include <cstring> #include <map> -#include <mdds/multi_type_vector.hpp> -#include <mdds/multi_type_vector_trait.hpp> using ::editeng::SvxBorderLine; using namespace formula; @@ -57,11 +56,7 @@ inline bool IsAmbiguousScriptNonZero( sal_uInt8 nScript ) struct ScColumnImpl { - typedef mdds::multi_type_vector<mdds::mtv::element_block_func> TextWidthType; - - TextWidthType maTextWidths; - - ScColumnImpl() : maTextWidths(MAXROWCOUNT) {} + ScCellTextWidths maTextWidths; }; ScNeededSizeOptions::ScNeededSizeOptions() : @@ -2296,14 +2291,7 @@ bool ScColumn::SearchStyleRange( sal_uInt16 ScColumn::GetTextWidth(SCROW nRow) const { - switch (mpImpl->maTextWidths.get_type(nRow)) - { - case mdds::mtv::element_type_ushort: - return mpImpl->maTextWidths.get<unsigned short>(nRow); - default: - ; - } - return TEXTWIDTH_DIRTY; + return mpImpl->maTextWidths.get(nRow); } void ScColumn::SetTextWidth(SCROW nRow, sal_uInt16 nWidth) diff --git a/sc/source/core/data/documen8.cxx b/sc/source/core/data/documen8.cxx index 134fdf3..dda01d7 100644 --- a/sc/source/core/data/documen8.cxx +++ b/sc/source/core/data/documen8.cxx @@ -85,6 +85,7 @@ #include "dpobject.hxx" #include "docuno.hxx" #include "scresid.hxx" +#include "celltextwidths.hxx" #define GET_SCALEVALUE(set,id) ((const SfxUInt16Item&)(set.Get( id ))).GetValue() diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx index 446686e..49083b7 100644 --- a/sc/source/core/data/table1.cxx +++ b/sc/source/core/data/table1.cxx @@ -44,6 +44,7 @@ #include "dbdata.hxx" #include "colorscale.hxx" #include "conditio.hxx" +#include "celltextwidths.hxx" #include <vector> diff --git a/sc/source/core/data/table5.cxx b/sc/source/core/data/table5.cxx index ffbda84..0e9a81d 100644 --- a/sc/source/core/data/table5.cxx +++ b/sc/source/core/data/table5.cxx @@ -36,6 +36,8 @@ #include "tabprotection.hxx" #include "globstr.hrc" #include "segmenttree.hxx" +#include "celltextwidths.hxx" + #include <com/sun/star/sheet/TablePageBreakData.hpp> #include <algorithm> commit b17a10f04cad7ba66801f0b7813b70945d0c1584 Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Tue Nov 6 22:08:42 2012 -0500 Add accessor methods for text widths using mdds::multi_type_vector. We only use unsigned short and empty types in this container. Empty type represents empty cells whereas unsigned short type represents non-empty cells. Change-Id: Id9b6e0941fdfabc48fc8bb2aa6479f466270381c diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index 4a64616..682a7bb 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -36,6 +36,8 @@ #include <cstring> #include <map> +#include <mdds/multi_type_vector.hpp> +#include <mdds/multi_type_vector_trait.hpp> using ::editeng::SvxBorderLine; using namespace formula; @@ -55,6 +57,11 @@ inline bool IsAmbiguousScriptNonZero( sal_uInt8 nScript ) struct ScColumnImpl { + typedef mdds::multi_type_vector<mdds::mtv::element_block_func> TextWidthType; + + TextWidthType maTextWidths; + + ScColumnImpl() : maTextWidths(MAXROWCOUNT) {} }; ScNeededSizeOptions::ScNeededSizeOptions() : @@ -2287,5 +2294,22 @@ bool ScColumn::SearchStyleRange( return pAttrArray->SearchStyleRange( rRow, rEndRow, pSearchStyle, bUp, NULL ); } +sal_uInt16 ScColumn::GetTextWidth(SCROW nRow) const +{ + switch (mpImpl->maTextWidths.get_type(nRow)) + { + case mdds::mtv::element_type_ushort: + return mpImpl->maTextWidths.get<unsigned short>(nRow); + default: + ; + } + return TEXTWIDTH_DIRTY; +} + +void ScColumn::SetTextWidth(SCROW nRow, sal_uInt16 nWidth) +{ + // We only use unsigned short type in this container. + mpImpl->maTextWidths.set(nRow, static_cast<unsigned short>(nWidth)); +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index b764155..df5c172 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -1956,13 +1956,4 @@ xub_StrLen ScColumn::GetMaxNumberStringLen( return nStringLen; } -sal_uInt16 ScColumn::GetTextWidth(SCROW nRow) const -{ - return 0; -} - -void ScColumn::SetTextWidth(SCROW nRow, sal_uInt16 nWidth) -{ -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit 98f6eba9c6b414309a2defa552431a48e010cfda Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Tue Nov 6 19:15:11 2012 -0500 Let's start using impl class for ScColumn. No need to migrate the existing data members to it for now, but let's define new members in the impl class from now on. Change-Id: Idee66dae87beb4bb6efc9c7d7ffd658148ed887c diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index 8653bfd..39f9753 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -58,6 +58,7 @@ struct ScMergePatternState; class ScFlatBoolRowSegments; struct ScSetStringParam; struct ScColWidthParam; +struct ScColumnImpl; struct ScNeededSizeOptions { @@ -79,6 +80,8 @@ struct ColEntry class ScColumn { private: + ScColumnImpl* mpImpl; + SCCOL nCol; SCTAB nTab; diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index b91e6df..4a64616 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -40,6 +40,8 @@ using ::editeng::SvxBorderLine; using namespace formula; +namespace { + inline bool IsAmbiguousScriptNonZero( sal_uInt8 nScript ) { //! move to a header file @@ -49,12 +51,19 @@ inline bool IsAmbiguousScriptNonZero( sal_uInt8 nScript ) nScript != 0 ); } +} + +struct ScColumnImpl +{ +}; + ScNeededSizeOptions::ScNeededSizeOptions() : pPattern(NULL), bFormula(false), bSkipMerged(true), bGetFont(true), bTotalSize(false) { } ScColumn::ScColumn() : + mpImpl(new ScColumnImpl), nCol( 0 ), pAttrArray( NULL ), pDocument( NULL ) commit f5c6729bc81b17160d1e02f7177e9eb4d3bea39a Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Tue Nov 6 17:14:54 2012 -0500 Add empty GetTextWidth() to ScColumn. Will be implemented later. Change-Id: I4df0719fee426ab5d54bfc2ac8fa4c37325906e2 diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index 257cb0e..8653bfd 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -371,6 +371,7 @@ public: xub_StrLen GetMaxNumberStringLen( sal_uInt16& nPrecision, SCROW nRowStart, SCROW nRowEnd ) const; + sal_uInt16 GetTextWidth(SCROW nRow) const; void SetTextWidth(SCROW nRow, sal_uInt16 nWidth); private: diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index dc11a28..b764155 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -1956,6 +1956,11 @@ xub_StrLen ScColumn::GetMaxNumberStringLen( return nStringLen; } +sal_uInt16 ScColumn::GetTextWidth(SCROW nRow) const +{ + return 0; +} + void ScColumn::SetTextWidth(SCROW nRow, sal_uInt16 nWidth) { } commit e8ff4e65456c80888676f63cad71f9ce90b973bf Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Tue Nov 6 16:13:37 2012 -0500 Identify all places that modify the cell array & call CellStorageModified(). CellStorageModified() is empty at the moment. Change-Id: I9498b4d7819bba1778cbab644e7b46ce25d66ae4 diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index 6c8e0e0..257cb0e 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -371,6 +371,8 @@ public: xub_StrLen GetMaxNumberStringLen( sal_uInt16& nPrecision, SCROW nRowStart, SCROW nRowEnd ) const; + void SetTextWidth(SCROW nRow, sal_uInt16 nWidth); + private: ScBaseCell* CloneCell(SCSIZE nIndex, sal_uInt16 nFlags, ScDocument& rDestDoc, const ScAddress& rDestPos) const; @@ -378,8 +380,10 @@ private: SCROW FindNextVisibleRow(SCROW nRow, bool bForward) const; /** - * Called whenever the state of cell array gets modified i.e. a new cell - * is inserted, a cell is moved or removed, cells are swapped, and so on. + * Called whenever the state of cell array gets modified i.e. new cell + * insertion, cell removal or relocation, cell value update and so on. + * + * Call this only from those methods where maItems is modified directly. */ void CellStorageModified(); }; diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index fc22a5b..b91e6df 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -795,14 +795,14 @@ void lclTakeBroadcaster( ScBaseCell*& rpCell, SvtBroadcaster* pBC ) void ScColumn::SwapRow(SCROW nRow1, SCROW nRow2) { + if (nRow1 == nRow2) + // Nothing to swap. + return; + /* Simple swap of cell pointers does not work if broadcasters exist (crash if cell broadcasts directly or indirectly to itself). While swapping the cells, broadcasters have to remain at old positions! */ - /* While cloning cells, do not clone notes, but move note pointers to new - cells. This prevents creation of new caption drawing objects for every - swap operation while sorting. */ - ScBaseCell* pCell1 = 0; SCSIZE nIndex1; if ( Search( nRow1, nIndex1 ) ) @@ -852,6 +852,8 @@ void ScColumn::SwapRow(SCROW nRow1, SCROW nRow2) SvtBroadcaster* pBC2 = pCell2->ReleaseBroadcaster(); pCell1->TakeBroadcaster( pBC2 ); pCell2->TakeBroadcaster( pBC1 ); + + CellStorageModified(); } else { @@ -860,11 +862,13 @@ void ScColumn::SwapRow(SCROW nRow1, SCROW nRow2) { // insert dummy note cell (without note) containing old broadcaster maItems[nIndex1].pCell = pDummyCell; + CellStorageModified(); } else { // remove ColEntry at old position maItems.erase( maItems.begin() + nIndex1 ); + CellStorageModified(); } // insert ColEntry at new position @@ -912,8 +916,7 @@ void ScColumn::SwapRow(SCROW nRow1, SCROW nRow2) } /* Create clone of pCell1 at position of pCell2 (pCell1 exists always, see - variable swapping above). Do not clone the note, but move pointer of - old note to new cell. */ + variable swapping above).*/ ScBaseCell* pNew2 = pCell1->Clone( *pDocument, aPos2, SC_CLONECELL_ADJUST3DREL ); /* Create clone of pCell2 at position of pCell1. Do not clone the note, @@ -973,7 +976,10 @@ void ScColumn::SwapCell( SCROW nRow, ScColumn& rCol) { // Tauschen maItems[nIndex1].pCell = pCell2; + CellStorageModified(); rCol.maItems[nIndex2].pCell = pCell1; + rCol.CellStorageModified(); + // Referenzen aktualisieren SCsCOL dx = rCol.nCol - nCol; if ( pFmlaCell1 ) @@ -995,6 +1001,8 @@ void ScColumn::SwapCell( SCROW nRow, ScColumn& rCol) { // Loeschen maItems.erase(maItems.begin() + nIndex1); + CellStorageModified(); + // Referenzen aktualisieren SCsCOL dx = rCol.nCol - nCol; if ( pFmlaCell1 ) @@ -1150,6 +1158,8 @@ void ScColumn::InsertRow( SCROW nStartRow, SCSIZE nSize ) } pDocument->SetAutoCalc( bOldAutoCalc ); + + CellStorageModified(); } @@ -1545,6 +1555,8 @@ void ScColumn::MarkScenarioIn( ScMarkData& rDestMark ) const void ScColumn::SwapCol(ScColumn& rCol) { maItems.swap(rCol.maItems); + CellStorageModified(); + rCol.CellStorageModified(); ScAttrArray* pTempAttr = rCol.pAttrArray; rCol.pAttrArray = pAttrArray; @@ -1637,9 +1649,11 @@ void ScColumn::MoveTo(SCROW nStartRow, SCROW nEndRow, ScColumn& rCol) } // Erase the slots containing pointers to the dummy cell instance. maItems.erase(maItems.begin() + nStartPos, maItems.begin() + nStopPos); + CellStorageModified(); } pNoteCell->Delete(); // Delete the dummy cell instance. } + } bool ScColumn::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW nRow1, SCTAB nTab1, @@ -1780,6 +1794,7 @@ void ScColumn::UpdateInsertTabOnlyCells(SCTAB nInsPos, SCTAB nNewSheets) { ScEditCell* p = static_cast<ScEditCell*>(maItems[i].pCell); p->UpdateFields(nTab); + SetTextWidth(maItems[i].nRow, TEXTWIDTH_DIRTY); } break; default: @@ -1810,6 +1825,7 @@ void ScColumn::UpdateInsertTabAbs(SCTAB nNewPos) { ScEditCell* p = static_cast<ScEditCell*>(maItems[i].pCell); p->UpdateFields(nTab); + SetTextWidth(maItems[i].nRow, TEXTWIDTH_DIRTY); } break; default: @@ -1859,6 +1875,7 @@ void ScColumn::UpdateDeleteTab(SCTAB nDelPos, bool bIsMove, ScColumn* pRefUndo, { ScEditCell* p = static_cast<ScEditCell*>(maItems[i].pCell); p->UpdateFields(nTab); + SetTextWidth(maItems[i].nRow, TEXTWIDTH_DIRTY); } break; default: @@ -1891,6 +1908,7 @@ void ScColumn::UpdateMoveTab( SCTAB nOldPos, SCTAB nNewPos, SCTAB nTabNo ) { ScEditCell* p = static_cast<ScEditCell*>(maItems[i].pCell); p->UpdateFields(nTab); + SetTextWidth(maItems[i].nRow, TEXTWIDTH_DIRTY); } break; default: diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index 043cec9..dc11a28 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -87,12 +87,14 @@ void ScColumn::Insert( SCROW nRow, ScBaseCell* pNewCell ) } pOldCell->Delete(); maItems[nIndex].pCell = pNewCell; + CellStorageModified(); } else { maItems.insert(maItems.begin() + nIndex, ColEntry()); maItems[nIndex].pCell = pNewCell; maItems[nIndex].nRow = nRow; + CellStorageModified(); } } // Bei aus Clipboard sind hier noch falsche (alte) Referenzen! @@ -136,6 +138,8 @@ void ScColumn::Append( SCROW nRow, ScBaseCell* pCell ) maItems.push_back(ColEntry()); maItems.back().pCell = pCell; maItems.back().nRow = nRow; + + CellStorageModified(); } @@ -162,6 +166,8 @@ void ScColumn::Delete( SCROW nRow ) } pCell->EndListeningTo( pDocument ); pCell->Delete(); + + CellStorageModified(); } } @@ -177,6 +183,8 @@ void ScColumn::DeleteAtIndex( SCSIZE nIndex ) maItems.erase(maItems.begin() + nIndex); pCell->EndListeningTo( pDocument ); pCell->Delete(); + + CellStorageModified(); } @@ -185,6 +193,8 @@ void ScColumn::FreeAll() for (SCSIZE i = 0; i < maItems.size(); i++) maItems[i].pCell->Delete(); maItems.clear(); + + CellStorageModified(); } @@ -481,6 +491,7 @@ void ScColumn::DeleteRange( SCSIZE nStartIndex, SCSIZE nEndIndex, sal_uInt16 nDe if (bRemoved) nShift += maItems.size() - nStartSegment; maItems.erase(maItems.end() - nShift, maItems.end()); + CellStorageModified(); } // *** delete all formula cells *** @@ -1408,8 +1419,11 @@ bool ScColumn::SetString( SCROW nRow, SCTAB nTabP, const String& rString, if ( i >= maItems.size() || maItems[i].nRow != nRow ) Search(nRow, i); } + pOldCell->Delete(); maItems[i].pCell = pNewCell; // ersetzen + CellStorageModified(); + if ( pNewCell->GetCellType() == CELLTYPE_FORMULA ) { pNewCell->StartListeningTo( pDocument ); @@ -1631,6 +1645,8 @@ void ScColumn::RemoveProtected( SCROW nStartRow, SCROW nEndRow ) maItems[nIndex].pCell = new ScStringCell( aString ); } delete pFormula; + + CellStorageModified(); } ++nIndex; } @@ -1940,4 +1956,8 @@ xub_StrLen ScColumn::GetMaxNumberStringLen( return nStringLen; } +void ScColumn::SetTextWidth(SCROW nRow, sal_uInt16 nWidth) +{ +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit ffafb6883031615b0cf4d997ead614e5caf2e8b9 Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Tue Nov 6 13:53:57 2012 -0500 Redundant use of 'public' modifier. Plus added a new method that will get called whenever cell array state changes. It's not used yet. Change-Id: I96719db0460bfb72d8dbe98a80a3880d8f279c33 diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index 35316cd..6c8e0e0 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -342,7 +342,6 @@ public: SCROW nStartRow, SCROW nEndRow, sal_uInt16* pHeight, OutputDevice* pDev, double nPPTX, double nPPTY, const Fraction& rZoomX, const Fraction& rZoomY, bool bShrink, sal_uInt16 nMinHeight, SCROW nMinStart) const; -public: /// Including current, may return -1 SCsROW GetNextUnprotected( SCROW nRow, bool bUp ) const; @@ -377,6 +376,12 @@ private: SCROW FindNextVisibleRowWithContent(SCROW nRow, bool bForward) const; SCROW FindNextVisibleRow(SCROW nRow, bool bForward) const; + + /** + * Called whenever the state of cell array gets modified i.e. a new cell + * is inserted, a cell is moved or removed, cells are swapped, and so on. + */ + void CellStorageModified(); }; diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx index 5f30ebd..2f4f87a 100644 --- a/sc/source/core/data/column2.cxx +++ b/sc/source/core/data/column2.cxx @@ -1389,6 +1389,10 @@ SCROW ScColumn::FindNextVisibleRowWithContent(SCROW nRow, bool bForward) const } } +void ScColumn::CellStorageModified() +{ +} + void ScColumn::FindDataAreaPos(SCROW& rRow, bool bDown) const { // check if we are in a data area commit e7b1c7954e159197ad414e8aff7e7a04c30da29c Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Tue Nov 6 19:17:19 2012 -0500 Re-order the header includes. Make sure column.hxx comes first. Change-Id: I9f93724c4e0b565a9148d0893feda9e82109bff7 diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index 4ee7923..fc22a5b 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -17,15 +17,8 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include <map> - -#include <svl/poolcach.hxx> -#include <svl/zforlist.hxx> -#include <editeng/scripttypeitem.hxx> -#include <string.h> - -#include "scitems.hxx" #include "column.hxx" +#include "scitems.hxx" #include "cell.hxx" #include "document.hxx" #include "docpool.hxx" @@ -37,6 +30,13 @@ #include "detfunc.hxx" // for Notes in Sort/Swap #include "postit.hxx" +#include <svl/poolcach.hxx> +#include <svl/zforlist.hxx> +#include <editeng/scripttypeitem.hxx> + +#include <cstring> +#include <map> + using ::editeng::SvxBorderLine; using namespace formula; commit 9c8d87e46bba0eb9a3b8d923c6c630a359bf0f6c Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Tue Nov 6 19:07:08 2012 -0500 Use initializer to initialize data members. Change-Id: I912cede3a240ccd4e1cc94be46c7dfee36a85af6 diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index cfe4bbe..35316cd 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -67,14 +67,7 @@ struct ScNeededSizeOptions bool bGetFont; bool bTotalSize; - ScNeededSizeOptions() - { - pPattern = NULL; - bFormula = false; - bSkipMerged = true; - bGetFont = true; - bTotalSize = false; - } + ScNeededSizeOptions(); }; struct ColEntry @@ -83,7 +76,6 @@ struct ColEntry ScBaseCell* pCell; }; - class ScColumn { private: diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index d803755..4ee7923 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -49,6 +49,11 @@ inline bool IsAmbiguousScriptNonZero( sal_uInt8 nScript ) nScript != 0 ); } +ScNeededSizeOptions::ScNeededSizeOptions() : + pPattern(NULL), bFormula(false), bSkipMerged(true), bGetFont(true), bTotalSize(false) +{ +} + ScColumn::ScColumn() : nCol( 0 ), pAttrArray( NULL ), commit ba42d88d95cdc7fe6130b3bd3a41e8c731110238 Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Tue Nov 6 17:17:22 2012 -0500 Make ScColumn explicitly non-copyable. Change-Id: I0e3f552f8ed8a57f399ba9e01c06a23d9a9da854 diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index 9ed577ec..cfe4bbe 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -107,6 +107,9 @@ friend class ScCellIterator; friend class ScHorizontalCellIterator; friend class ScHorizontalAttrIterator; + ScColumn(const ScColumn&); // disabled + ScColumn& operator= (const ScColumn&); // disabled + public: ScColumn(); ~ScColumn(); commit 2b70c47a37f33819cff0e42d00c37cfaea0461ec Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Tue Nov 6 14:00:54 2012 -0500 Rename ScColumn::Resize() to ReserveSize(). The new name is more aligned with what it actually does. Change-Id: I703e20253fe5957c775026d8d08f2906f2d7889c diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index f6dff3b..9ed577ec 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -121,7 +121,7 @@ public: void Delete( SCROW nRow ); void DeleteAtIndex( SCSIZE nIndex ); void FreeAll(); - void Resize( SCSIZE nSize ); + void ReserveSize( SCSIZE nSize ); void SwapRow( SCROW nRow1, SCROW nRow2 ); void SwapCell( SCROW nRow, ScColumn& rCol); diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index f29dc2d..d803755 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -760,8 +760,7 @@ ScBaseCell* ScColumn::GetCell( SCROW nRow ) const return NULL; } - -void ScColumn::Resize( SCSIZE nSize ) +void ScColumn::ReserveSize( SCSIZE nSize ) { if (nSize > sal::static_int_cast<SCSIZE>(MAXROWCOUNT)) nSize = MAXROWCOUNT; @@ -1178,7 +1177,7 @@ void ScColumn::CopyToClip(SCROW nRow1, SCROW nRow2, ScColumn& rColumn, bool bKee if (nBlockCount) { - rColumn.Resize( rColumn.GetCellCount() + nBlockCount ); + rColumn.ReserveSize(rColumn.GetCellCount() + nBlockCount); ScAddress aOwnPos( nCol, 0, nTab ); ScAddress aDestPos( rColumn.nCol, 0, rColumn.nTab ); for (i = nStartIndex; i <= nEndIndex; i++) @@ -1368,7 +1367,7 @@ void ScColumn::CopyToColumn( if (nBlockCount) { - rColumn.Resize( rColumn.GetCellCount() + nBlockCount ); + rColumn.ReserveSize(rColumn.GetCellCount() + nBlockCount); ScAddress aDestPos( rColumn.nCol, 0, rColumn.nTab ); for (i = nStartIndex; i <= nEndIndex; i++) { diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index 1e0ce3c..043cec9 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -681,7 +681,7 @@ void ScColumn::CopyFromClip(SCROW nRow1, SCROW nRow2, long nDy, //! IDF_ALL muss immer mehr Flags enthalten, als bei "Inhalte Einfuegen" //! einzeln ausgewaehlt werden koennen! - Resize( maItems.size() + static_cast<SCSIZE>(nRow2-nRow1+1) ); + ReserveSize(maItems.size() + static_cast<SCSIZE>(nRow2-nRow1+1)); ScAddress aDestPos( nCol, 0, nTab ); // Row wird angepasst @@ -715,8 +715,7 @@ void ScColumn::CopyFromClip(SCROW nRow1, SCROW nRow2, long nDy, //! Always do the Resize from the outside, where the number of repetitions is known //! (then it can be removed here) - SCSIZE nNew = maItems.size() + nColCount; - Resize( nNew ); + ReserveSize(maItems.size() + nColCount); } sal_Bool bAtEnd = false; diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx index a04dece..446686e 100644 --- a/sc/source/core/data/table1.cxx +++ b/sc/source/core/data/table1.cxx @@ -1868,7 +1868,7 @@ void ScTable::CopyPrintRange(const ScTable& rTable) void ScTable::DoColResize( SCCOL nCol1, SCCOL nCol2, SCSIZE nAdd ) { for (SCCOL nCol=nCol1; nCol<=nCol2; nCol++) - aCol[nCol].Resize(aCol[nCol].GetCellCount() + nAdd); + aCol[nCol].ReserveSize(aCol[nCol].GetCellCount() + nAdd); } void ScTable::SetRepeatColRange( const ScRange* pNew ) diff --git a/sc/source/core/data/table4.cxx b/sc/source/core/data/table4.cxx index 00aa1c3..38adeb8 100644 --- a/sc/source/core/data/table4.cxx +++ b/sc/source/core/data/table4.cxx @@ -694,7 +694,7 @@ void ScTable::FillAuto( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, nInc,nMinDigits, pListData,nListIndex); if (bVertical) - aCol[nCol].Resize( aCol[nCol].GetCellCount() + nFillCount ); + aCol[nCol].ReserveSize(aCol[nCol].GetCellCount() + nFillCount); if (pListData) { @@ -1389,7 +1389,7 @@ void ScTable::FillSeries( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScBaseCell* pSrcCell = aCol[nCol].GetCell(static_cast<SCROW>(nRow)); if (bVertical && bAttribs) - aCol[nCol].Resize( aCol[nCol].GetCellCount() + nFillCount ); + aCol[nCol].ReserveSize(aCol[nCol].GetCellCount() + nFillCount); if (bAttribs) { commit 87d46d5b420744b0a9d9724188d9526c423b8dd3 Author: Andras Timar <ati...@suse.com> Date: Wed Feb 6 16:44:20 2013 +0100 bump copyright year + small fixes in SDK docs Change-Id: Iff9f11c043be5234dae43e8c3c93155019f6cf08 diff --git a/odk/docs/install.html b/odk/docs/install.html index 2bc5f27..3594ac0 100644 --- a/odk/docs/install.html +++ b/odk/docs/install.html @@ -411,7 +411,7 @@ <div id="Footer"> <div id="FooterText"> <p> - Copyright © 2000, 2010 LibreOffice contributors and/or their affiliates. All rights reserved. + Copyright © 2000, 2013 LibreOffice contributors and/or their affiliates. All rights reserved. <br> LibreOffice was created by The Document Foundation, based on Apache OpenOffice, which is Copyright 2011 diff --git a/odk/docs/notsupported.html b/odk/docs/notsupported.html index 441f3f5..4b13bac 100644 --- a/odk/docs/notsupported.html +++ b/odk/docs/notsupported.html @@ -76,7 +76,7 @@ <div id="Footer"> <div id="FooterText"> <p> - Copyright © 2000, 2010 LibreOffice contributors and/or their affiliates. All rights reserved. + Copyright © 2000, 2013 LibreOffice contributors and/or their affiliates. All rights reserved. <br> LibreOffice was created by The Document Foundation, based on Apache OpenOffice, which is Copyright 2011 diff --git a/odk/docs/tools.html b/odk/docs/tools.html index eb6d39c..219e594 100644 --- a/odk/docs/tools.html +++ b/odk/docs/tools.html @@ -1022,7 +1022,7 @@ types the specified types depend on.</p> <div id="Footer"> <div id="FooterText"> <p> - Copyright © 2000, 2010 LibreOffice contributors and/or their affiliates. All rights reserved. + Copyright © 2000, 2013 LibreOffice contributors and/or their affiliates. All rights reserved. <br> LibreOffice was created by The Document Foundation, based on Apache OpenOffice, which is Copyright 2011 diff --git a/odk/examples/DevelopersGuide/examples.html b/odk/examples/DevelopersGuide/examples.html index 5417ddb..b33b16e 100644 --- a/odk/examples/DevelopersGuide/examples.html +++ b/odk/examples/DevelopersGuide/examples.html @@ -2875,7 +2875,7 @@ for the Office application.</td> <div id="Footer"> <div id="FooterText"> <p> - Copyright © 2000, 2010 LibreOffice contributors and/or their affiliates. All rights reserved. + Copyright © 2000, 2013 LibreOffice contributors and/or their affiliates. All rights reserved. <br> LibreOffice was created by The Document Foundation, based on Apache OpenOffice, which is Copyright 2011 diff --git a/odk/examples/examples.html b/odk/examples/examples.html index 1312122..16e7d9d 100644 --- a/odk/examples/examples.html +++ b/odk/examples/examples.html @@ -810,7 +810,7 @@ <div id="Footer"> <div id="FooterText"> <p> - Copyright © 2000, 2010 LibreOffice contributors and/or their affiliates. All rights reserved. + Copyright © 2000, 2013 LibreOffice contributors and/or their affiliates. All rights reserved. <br> LibreOffice was created by The Document Foundation, based on Apache OpenOffice, which is Copyright 2011 diff --git a/odk/index.html b/odk/index.html index 2a858f5..7dd4b96 100644 --- a/odk/index.html +++ b/odk/index.html @@ -191,7 +191,7 @@ <div id="Footer"> <div id="FooterText"> <p> - Copyright © 2000, 2010 LibreOffice contributors and/or their affiliates. All rights reserved. + Copyright © 2000, 2013 LibreOffice contributors and/or their affiliates. All rights reserved. <br> LibreOffice was created by The Document Foundation, based on Apache OpenOffice, which is Copyright 2011 diff --git a/odk/index_online.html b/odk/index_online.html index 76e6985..f3ca65c 100644 --- a/odk/index_online.html +++ b/odk/index_online.html @@ -37,7 +37,7 @@ <tr valign="top"> <td class="content4"><img src="docs/images/arrow-1.gif"></td> <td colspan="2"><a href="docs/common/ref/com/sun/star/module-ix.html" title="link to the IDL reference documentation">IDL Reference</a></td> - <td class="content70">Complete LibreOffice 3.5 API reference.</td> + <td class="content70">Complete LibreOffice API reference.</td> </tr> <tr valign="top"> <td class="content4"><img src="docs/images/arrow-1.gif"></td> @@ -46,7 +46,7 @@ </tr> <tr valign="top"> <td class="content4"><img src="docs/images/arrow-1.gif"></td> - <td colspan="2"><a href="docs/cpp/ref/names/index.html" title="link to the C++ API reference documentation">C++ Reference</a></td> + <td colspan="2"><a href="docs/cpp/ref/index.html" title="link to the C++ API reference documentation">C++ Reference</a></td> <td class="content70">Reference documentation of the C++ UNO runtime and a set of C/C++ base and helper functions and classes to abstract from the system layer.</td> @@ -234,9 +234,9 @@ <div id="Footer"> <div id="FooterText"> <p> - Copyright © 2000, 2010 LibreOffice contributors and/or their affiliates. All rights reserved. + Copyright © 2000, 2013 LibreOffice contributors and/or their affiliates. All rights reserved. <br> - LibreOffice was created by The Document Foundation, based on OpenOffice.org, which is Copyright 2000, 2010 Oracle and/or its affiliates. + LibreOffice was created by The Document Foundation, based on Apache OpenOffice, which is Copyright 2011 The Apache Software Foundation. <br> The Document Foundation acknowledges all community members, please find more info <a href="http://www.libreoffice.org/about-us/credits/" target="_blank">at our website</a>. </p> commit 5a55a24bfc75d6392382509fe5a8734947525b10 Author: Matúš Kukan <matus.ku...@gmail.com> Date: Wed Feb 6 16:24:43 2013 +0100 pagein: learn to respect --enable-mergelibs case Add libmerged to pagein-common and remove merged libraries from there. Also fixes few misspelled library names. This should make pagein usefull also for libmerged and speed up cold start by pre-loading it. Change-Id: I80ffb263ed5f399dc639e0d054f782ecb85001d6 diff --git a/desktop/Pagein_common.mk b/desktop/Pagein_common.mk index 9a82a1c..450db26 100644 --- a/desktop/Pagein_common.mk +++ b/desktop/Pagein_common.mk @@ -29,6 +29,7 @@ $(eval $(call gb_Pagein_Pagein,common)) # sorted in approx. reverse load order (ld.so.1) $(eval $(call gb_Pagein_add_objects,common,\ + $(if $(MERGELIBS),merged) \ i18npool \ $(if $(findstring YES,$(SYSTEM_ICU)),,\ icui18n \ @@ -81,11 +82,11 @@ $(eval $(call gb_Pagein_add_objects,common,\ avmedia \ helplinker \ sax \ - gconfbe \ + gconfbe1 \ fsstorage \ - desktopbe \ - localebe \ - ucpexpand \ + desktopbe1 \ + localebe1 \ + ucpexpand1 \ sfx \ sofficeapp \ )) diff --git a/solenv/gbuild/Pagein.mk b/solenv/gbuild/Pagein.mk index 7f69ccc..fab6180 100644 --- a/solenv/gbuild/Pagein.mk +++ b/solenv/gbuild/Pagein.mk @@ -66,7 +66,7 @@ $(call gb_Pagein_get_outdir_target,$(1)) : $(call gb_Pagein_get_target,$(1)) endef define gb_Pagein_add_object -$(call gb_Pagein_get_target,$(1)) : OBJECTS += $(2) +$(call gb_Pagein_get_target,$(1)) : OBJECTS += $(filter-out $(gb_MERGEDLIBS),$(2)) endef commit 8c31a28a1fae2f2562f6248581a6ef321b77a4a6 Author: Caolán McNamara <caol...@redhat.com> Date: Wed Feb 6 14:57:55 2013 +0000 tweak OAddressBookSourceDialogUno conversion to work again these properties aren't registered, so setting them throws. The expectation is that they get used via OAddressBookSourceDialogUno::implInitialize so repackage them as PropertyValues wizards->address data source->evolution->next->field assignment and field assignment must not have an "address data source" button in it Change-Id: I5edb6f5117dd9bfa2ed40da040906a7107028433 diff --git a/svtools/source/uno/addrtempuno.cxx b/svtools/source/uno/addrtempuno.cxx index f6a88dd..da4fa51 100644 --- a/svtools/source/uno/addrtempuno.cxx +++ b/svtools/source/uno/addrtempuno.cxx @@ -153,7 +153,7 @@ namespace svt //------------------------------------------------------------------------- ::cppu::IPropertyArrayHelper& OAddressBookSourceDialogUno::getInfoHelper() { - return *const_cast<OAddressBookSourceDialogUno*>(this)->getArrayHelper(); + return *getArrayHelper(); } //------------------------------------------------------------------------------ @@ -174,30 +174,39 @@ namespace svt static_cast< AddressBookSourceDialog* >( m_pDialog )->getFieldMapping( m_aAliases ); } //------------------------------------------------------------------------------ - void SAL_CALL OAddressBookSourceDialogUno::initialize(const Sequence< Any >& aArguments) throw(Exception, RuntimeException) + void SAL_CALL OAddressBookSourceDialogUno::initialize(const Sequence< Any >& rArguments) throw(Exception, RuntimeException) { - if( aArguments.getLength() == 5 ) + if( rArguments.getLength() == 5 ) { Reference<com::sun::star::awt::XWindow> xParentWindow; Reference<com::sun::star::beans::XPropertySet> xDataSource; rtl::OUString sDataSourceName; rtl::OUString sCommand; rtl::OUString sTitle; - if ( (aArguments[0] >>= xParentWindow) - && (aArguments[1] >>= xDataSource) - && (aArguments[2] >>= sDataSourceName) - && (aArguments[3] >>= sCommand) - && (aArguments[4] >>= sTitle) ) + if ( (rArguments[0] >>= xParentWindow) + && (rArguments[1] >>= xDataSource) + && (rArguments[2] >>= sDataSourceName) + && (rArguments[3] >>= sCommand) + && (rArguments[4] >>= sTitle) ) { - setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ParentWindow" ) ), makeAny( xParentWindow ) ); - setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DataSource" ) ), makeAny( xDataSource ) ); - setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DataSourceName" ) ), makeAny( sDataSourceName ) ); - setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Command" ) ), makeAny( sCommand ) ); - setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Title" ) ), makeAny( sTitle ) ); + + // convert the parameters for creating the dialog to PropertyValues + Sequence< Any > aArguments(5); + Any* pArguments = aArguments.getArray(); + // the parent window + *pArguments++ <<= PropertyValue(OUString( "ParentWindow" ), -1, makeAny( xParentWindow ), PropertyState_DIRECT_VALUE); + // the data source to use + *pArguments++ <<= PropertyValue(OUString( "DataSource" ), -1, makeAny( xDataSource ), PropertyState_DIRECT_VALUE); + *pArguments++ <<= PropertyValue(OUString( "DataSourceName" ), -1, makeAny( sDataSourceName ), PropertyState_DIRECT_VALUE); + // the table to use + *pArguments++ <<= PropertyValue(OUString( "Command" ), -1, makeAny( sCommand ), PropertyState_DIRECT_VALUE); + // the title + *pArguments++ <<= PropertyValue(OUString( "Title" ), -1, makeAny( sTitle ), PropertyState_DIRECT_VALUE); + OGenericUnoDialog::initialize(aArguments); return; } } - OGenericUnoDialog::initialize(aArguments); + OGenericUnoDialog::initialize(rArguments); } //------------------------------------------------------------------------------ void OAddressBookSourceDialogUno::implInitialize(const com::sun::star::uno::Any& _rValue) commit 038c59bf4610768d3ad6bbad910e885bb98fe2c1 Author: Andras Timar <ati...@suse.com> Date: Wed Feb 6 16:25:54 2013 +0100 fix help text of uno-skeletonmaker -lh switch Change-Id: I07d9708c9a6903a910b94fc1e109d79e7d93590d diff --git a/odk/docs/tools.html b/odk/docs/tools.html index 4833bfd..eb6d39c 100644 --- a/odk/docs/tools.html +++ b/odk/docs/tools.html @@ -760,7 +760,7 @@ types the specified types depend on.</p> </tr> <tr> <td class="cell15"><code>-lh --licenseheader</code></td> - <td class="cell85">generates a default OpenOffice.org LGPL license header at the beginning of a component source file. This option is taken into account in 'component' mode only and if -o is unequal 'stdout'.</td> + <td class="cell85">generates a default LibreOffice MPLv2 license header at the beginning of a component source file. This option is taken into account in 'component' mode only and if -o is unequal 'stdout'.</td> </tr> <tr> <td class="cell15"><code>-bc<br>--backward-compatible</code></td> commit 15d8b51bf82610c663f80fe552a1c0315e137ad3 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Feb 5 17:33:49 2013 +0000 Resolves: rhbz#907933 crash on removing second last para in cell... if (basically) the last para is on next page Change-Id: Iaff610ea94a829e73bfb8c694a27e0e9b4f6e295 Reviewed-on: https://gerrit.libreoffice.org/2012 Tested-by: Michael Stahl <mst...@redhat.com> Reviewed-by: Michael Stahl <mst...@redhat.com> diff --git a/sw/source/core/inc/tabfrm.hxx b/sw/source/core/inc/tabfrm.hxx index 464fc9c..1041385 100644 --- a/sw/source/core/inc/tabfrm.hxx +++ b/sw/source/core/inc/tabfrm.hxx @@ -151,6 +151,8 @@ public: // sal_Bool HasFollowFlowLine() const { return bHasFollowFlowLine; } void SetFollowFlowLine( sal_Bool bNew ) { bHasFollowFlowLine = bNew; } + //return the SwTabFrm (if any) that this SwTabFrm is a follow flow line for + SwTabFrm* GetFollowFlowLineFor(); sal_Bool IsRebuildLastLine() const { return bIsRebuildLastLine; } void SetRebuildLastLine( sal_Bool bNew ) { bIsRebuildLastLine = bNew; } diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx index 27ad754..fb23128 100644 --- a/sw/source/core/layout/tabfrm.cxx +++ b/sw/source/core/layout/tabfrm.cxx @@ -132,8 +132,28 @@ extern const SwTable *pRowCacheLastTable; extern const SwTabFrm *pRowCacheLastTabFrm; extern const SwFrm *pRowCacheLastCellFrm; +//return the SwTabFrm (if any) that this SwTabFrm is a follow flow line for +SwTabFrm* SwTabFrm::GetFollowFlowLineFor() +{ + SwFlowFrm *pPrec = GetPrecede(); + if (pPrec && pPrec->GetFrm()->IsTabFrm()) + { + SwTabFrm *pPrevTabFrm = (SwTabFrm*)pPrec; + assert(this == pPrevTabFrm->GetFollow()); + if (pPrevTabFrm->HasFollowFlowLine() && pPrevTabFrm->GetFollow() == this) + return pPrevTabFrm; + } + return NULL; +} + SwTabFrm::~SwTabFrm() { + //rhbz#907933, we are a follow flow line for something and have been + //deleted, remove ourself as a follow flowline + SwTabFrm* pFlowFrameFor = GetFollowFlowLineFor(); + if (pFlowFrameFor) + pFlowFrameFor->RemoveFollowFlowLine(); + // There is some terrible code in fetab.cxx, that // makes use of these global pointers. Obviously // this code did not consider that a TabFrm can be commit 8418a122368a735acacb0983d14829efbf73783e Author: Tor Lillqvist <t...@iki.fi> Date: Wed Feb 6 16:48:02 2013 +0200 Tell what @__VIA_LIBRARY_PATH__ means Change-Id: I5ab38200d926376d3dbac8f3c795fa95ee2bbe46 diff --git a/solenv/bin/macosx-change-install-names.pl b/solenv/bin/macosx-change-install-names.pl index 56cf2dc..8bd42b3 100644 --- a/solenv/bin/macosx-change-install-names.pl +++ b/solenv/bin/macosx-change-install-names.pl @@ -49,6 +49,11 @@ sub action($$$) { + # The @__VIA_LIBRARY_PATH__ thing has no magic meaning anywhere + # (here in LO or to the dynamic linker), it is effectively a + # comment telling that this library is supposed to have been found + # by the dynamic linker already in DYLD_LIBRARY_PATH. + my %action = ('app/UREBIN/URELIB' => '@executable_path/../lib', 'app/OOO/URELIB' => '@executable_path/../ure-link/lib',
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits