framework/source/fwe/classes/framelistanalyzer.cxx | 2 framework/source/services/autorecovery.cxx | 2 include/sfx2/DocumentMetadataAccess.hxx | 2 qadevOOo/tests/java/ifc/table/_XTableCharts.java | 2 sfx2/source/doc/Metadatable.cxx | 1 sfx2/source/doc/SfxDocumentMetaData.cxx | 1 solenv/gbuild/CppunitTest.mk | 3 sw/inc/pam.hxx | 9 - sw/inc/swcrsr.hxx | 7 sw/inc/viscrs.hxx | 1 sw/source/core/access/acccell.cxx | 4 sw/source/core/access/acccontext.cxx | 176 +++++++++------------ sw/source/core/access/acccontext.hxx | 52 ++---- sw/source/core/access/accdoc.cxx | 45 ----- sw/source/core/access/accdoc.hxx | 6 sw/source/core/access/accframebase.cxx | 14 - sw/source/core/access/accmap.cxx | 14 - sw/source/core/access/accpage.cxx | 6 sw/source/core/access/accpara.cxx | 14 - sw/source/core/crsr/pam.cxx | 9 - sw/source/core/crsr/swcrsr.cxx | 4 sw/source/core/crsr/viscrs.cxx | 2 sw/source/core/edit/eddel.cxx | 2 sw/source/core/edit/edglss.cxx | 3 sw/source/core/text/frminf.cxx | 2 sw/source/core/unocore/unoobj2.cxx | 2 sw/source/core/unocore/unotextmarkup.cxx | 6 sw/source/filter/basflt/shellio.cxx | 2 sw/source/filter/html/swhtml.cxx | 13 - sw/source/filter/ww8/ww8par.cxx | 4 sw/source/filter/ww8/ww8par2.cxx | 2 sw/source/filter/ww8/ww8par5.cxx | 6 unoxml/source/rdf/librdf_repository.cxx | 1 33 files changed, 168 insertions(+), 251 deletions(-)
New commits: commit c23dd470d49d722197c148f4ef64a6a3350af88d Author: Michael Stahl <mst...@redhat.com> Date: Sat Apr 25 22:24:58 2015 +0200 sw: same treatment for SwCursor's fake "copy constructor" Change-Id: Id627274ca6ad87e7e85b5ce64419ed68a5d4c9c3 diff --git a/sw/inc/swcrsr.hxx b/sw/inc/swcrsr.hxx index 1e84b16..5e3ea0a 100644 --- a/sw/inc/swcrsr.hxx +++ b/sw/inc/swcrsr.hxx @@ -69,6 +69,8 @@ class SW_DLLPUBLIC SwCursor : public SwPaM using SwPaM::Find; + SwCursor(SwCursor const& rPaM) SAL_DELETED_FUNCTION; + protected: _SwCursor_SavePos* CreateNewSavePos() const; void SaveState(); @@ -86,8 +88,9 @@ public: SwCursor( const SwPosition &rPos, SwPaM* pRing, bool bColumnSel ); virtual ~SwCursor(); - // @@@ semantic: no copy ctor. - SwCursor( SwCursor& rCpy); + /// this takes a second parameter, which indicates the Ring that + /// the new cursor should be part of (may be null) + SwCursor(SwCursor const& rCursor, SwPaM* pRing); public: diff --git a/sw/inc/viscrs.hxx b/sw/inc/viscrs.hxx index a96d366..99b25f7 100644 --- a/sw/inc/viscrs.hxx +++ b/sw/inc/viscrs.hxx @@ -126,6 +126,7 @@ public: SwShellCrsr( const SwCrsrShell& rCrsrSh, const SwPosition &rPos ); SwShellCrsr( const SwCrsrShell& rCrsrSh, const SwPosition &rPos, const Point& rPtPos, SwPaM* pRing = 0 ); + // note: *intentionally* links the new shell cursor into the old one's Ring SwShellCrsr( SwShellCrsr& ); virtual ~SwShellCrsr(); diff --git a/sw/source/core/crsr/swcrsr.cxx b/sw/source/core/crsr/swcrsr.cxx index e0a1a9c..dcca20d 100644 --- a/sw/source/core/crsr/swcrsr.cxx +++ b/sw/source/core/crsr/swcrsr.cxx @@ -123,8 +123,8 @@ SwCursor::SwCursor( const SwPosition &rPos, SwPaM* pRing, bool bColumnSel ) } // @@@ semantic: no copy ctor. -SwCursor::SwCursor( SwCursor& rCpy ) - : SwPaM( rCpy, &rCpy ) +SwCursor::SwCursor(SwCursor const& rCpy, SwPaM *const pRing) + : SwPaM( rCpy, pRing ) , m_pSavePos(nullptr) , m_nRowSpanOffset(rCpy.m_nRowSpanOffset) , m_nCursorBidiLevel(rCpy.m_nCursorBidiLevel) diff --git a/sw/source/core/crsr/viscrs.cxx b/sw/source/core/crsr/viscrs.cxx index 11ef0f5..f5cdeb8 100644 --- a/sw/source/core/crsr/viscrs.cxx +++ b/sw/source/core/crsr/viscrs.cxx @@ -528,7 +528,7 @@ SwShellCrsr::SwShellCrsr( {} SwShellCrsr::SwShellCrsr( SwShellCrsr& rICrsr ) - : SwCursor(rICrsr) + : SwCursor(rICrsr, &rICrsr) , SwSelPaintRects(*rICrsr.GetShell()) , m_MarkPt(rICrsr.GetMkPos()) , m_PointPt(rICrsr.GetPtPos()) commit bdf3c9bff607e3977c8455927b21ba292530d25a Author: Michael Stahl <mst...@redhat.com> Date: Sat Apr 25 22:17:06 2015 +0200 sw: replace SwPaM's so-called "copy constructor" Make explict that it links the new SwPaM into a Ring, by adding a 2nd parameter for the Ring. Change-Id: I8ac0bb1a8bede8b67a3a8874cf805bd88aad2819 diff --git a/sw/inc/pam.hxx b/sw/inc/pam.hxx index 30a19c3..916e4e0 100644 --- a/sw/inc/pam.hxx +++ b/sw/inc/pam.hxx @@ -166,8 +166,10 @@ class SW_DLLPUBLIC SwPaM : public sw::Ring<SwPaM> SwPaM* MakeRegion( SwMoveFn fnMove, const SwPaM * pOrigRg = 0 ); + SwPaM(SwPaM const& rPaM) SAL_DELETED_FUNCTION; + public: - SwPaM( const SwPosition& rPos, SwPaM* pRing = 0 ); + explicit SwPaM( const SwPosition& rPos, SwPaM* pRing = 0 ); SwPaM( const SwPosition& rMk, const SwPosition& rPt, SwPaM* pRing = 0 ); SwPaM( const SwNodeIndex& rMk, const SwNodeIndex& rPt, long nMkOffset = 0, long nPtOffset = 0, SwPaM* pRing = 0 ); @@ -181,8 +183,9 @@ public: SwPaM( const SwNodeIndex& rNd, sal_Int32 nCntnt = 0, SwPaM* pRing = 0 ); virtual ~SwPaM(); - /// @@@ semantic: no copy ctor. - SwPaM( SwPaM & ); + /// this takes a second parameter, which indicates the Ring that + /// the new PaM should be part of (may be null) + SwPaM(SwPaM const& rPaM, SwPaM * pRing); /// @@@ semantic: no copy assignment for super class Ring. SwPaM& operator=( const SwPaM & ); diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx index e449f94..be811b4 100644 --- a/sw/source/core/crsr/pam.cxx +++ b/sw/source/core/crsr/pam.cxx @@ -436,9 +436,8 @@ SwPaM::SwPaM( const SwNodeIndex& rNodeIdx, sal_Int32 nCntnt, SwPaM* pRing ) SwPaM::~SwPaM() {} -// @@@ semantic: no copy ctor. -SwPaM::SwPaM( SwPaM &rPam ) - : Ring( &rPam ) +SwPaM::SwPaM(SwPaM const& rPam, SwPaM *const pRing) + : Ring(pRing) , m_Bound1( *(rPam.m_pPoint) ) , m_Bound2( *(rPam.m_pMark) ) , m_pPoint( &m_Bound1 ), m_pMark( rPam.HasMark() ? &m_Bound2 : m_pPoint ) @@ -504,7 +503,7 @@ bool SwPaM::Move( SwMoveFn fnMove, SwGoInDoc fnGo ) @param fnMove Contains information if beginning or end of document. @param pOrigRg The given region. - @return Newly created area. + @return Newly created range, in Ring with parameter pOrigRg. */ SwPaM* SwPaM::MakeRegion( SwMoveFn fnMove, const SwPaM * pOrigRg ) { @@ -520,7 +519,7 @@ SwPaM* SwPaM::MakeRegion( SwMoveFn fnMove, const SwPaM * pOrigRg ) } else { - pPam = new SwPaM( *const_cast<SwPaM*>(pOrigRg) ); // given search area + pPam = new SwPaM(*pOrigRg, const_cast<SwPaM*>(pOrigRg)); // given search range // make sure that SPoint is on the "real" start position // FORWARD: SPoint always smaller than GetMark // BACKWARD: SPoint always bigger than GetMark diff --git a/sw/source/core/crsr/swcrsr.cxx b/sw/source/core/crsr/swcrsr.cxx index 83e0870..e0a1a9c 100644 --- a/sw/source/core/crsr/swcrsr.cxx +++ b/sw/source/core/crsr/swcrsr.cxx @@ -124,7 +124,7 @@ SwCursor::SwCursor( const SwPosition &rPos, SwPaM* pRing, bool bColumnSel ) // @@@ semantic: no copy ctor. SwCursor::SwCursor( SwCursor& rCpy ) - : SwPaM( rCpy ) + : SwPaM( rCpy, &rCpy ) , m_pSavePos(nullptr) , m_nRowSpanOffset(rCpy.m_nRowSpanOffset) , m_nCursorBidiLevel(rCpy.m_nCursorBidiLevel) diff --git a/sw/source/core/text/frminf.cxx b/sw/source/core/text/frminf.cxx index 530e52a..61b5560 100644 --- a/sw/source/core/text/frminf.cxx +++ b/sw/source/core/text/frminf.cxx @@ -156,7 +156,7 @@ SwPaM *AddPam( SwPaM *pPam, const SwTxtFrm* pTxtFrm, pPam->GetPoint()->nContent += nLen; return pPam; } - pPam = new SwPaM( *pPam ); + pPam = new SwPaM(*pPam, pPam); } SwIndex &rContent = pPam->GetPoint()->nContent; diff --git a/sw/source/core/unocore/unoobj2.cxx b/sw/source/core/unocore/unoobj2.cxx index 685e356..18cb6a5 100644 --- a/sw/source/core/unocore/unoobj2.cxx +++ b/sw/source/core/unocore/unoobj2.cxx @@ -144,7 +144,7 @@ void DeepCopyPaM(SwPaM const & rSource, SwPaM & rTarget) do { // create new PaM - SwPaM *const pNew = new SwPaM(*pPam); + SwPaM *const pNew = new SwPaM(*pPam, nullptr); // insert into ring pNew->MoveTo(&rTarget); pPam = pPam->GetNext(); diff --git a/sw/source/core/unocore/unotextmarkup.cxx b/sw/source/core/unocore/unotextmarkup.cxx index 9a6984f..1a7c162 100644 --- a/sw/source/core/unocore/unotextmarkup.cxx +++ b/sw/source/core/unocore/unotextmarkup.cxx @@ -125,10 +125,10 @@ void SAL_CALL SwXTextMarkup::commitTextRangeMarkup(::sal_Int32 nType, const OUSt } else if (pCursor) { - SwPaM aPam(*pCursor->GetPaM()); + SwPaM & rPam(*pCursor->GetPaM()); - SwPosition* startPos = aPam.Start(); - SwPosition* endPos = aPam.End(); + SwPosition* startPos = rPam.Start(); + SwPosition* endPos = rPam.End(); commitStringMarkup (nType, aIdentifier, startPos->nContent.GetIndex(), endPos->nContent.GetIndex() - startPos->nContent.GetIndex(), xMarkupInfoContainer); } diff --git a/sw/source/filter/basflt/shellio.cxx b/sw/source/filter/basflt/shellio.cxx index 567aad5..2fcf22f 100644 --- a/sw/source/filter/basflt/shellio.cxx +++ b/sw/source/filter/basflt/shellio.cxx @@ -795,7 +795,7 @@ sal_uLong SwWriter::Write( WriterRef& rxWriter, const OUString* pRealFileName ) } else { - pPam = new SwPaM( *pPam ); + pPam = new SwPaM( *pPam, pPam ); pPam->Move( fnMoveBackward, fnGoDoc ); pPam->SetMark(); pPam->Move( fnMoveForward, fnGoDoc ); diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx index 5dfd048..85922e7 100644 --- a/sw/source/filter/ww8/ww8par.cxx +++ b/sw/source/filter/ww8/ww8par.cxx @@ -2474,7 +2474,7 @@ void SwWW8ImplReader::AppendTxtNode(SwPosition& rPos) if(pPreviousNumPaM) delete pPreviousNumPaM, pPreviousNumPaM = 0; - pPreviousNumPaM = new SwPaM(*pPaM); + pPreviousNumPaM = new SwPaM(*pPaM, pPaM); pPrevNumRule = pRule; } else if(!pRule && pPreviousNumPaM) @@ -4503,7 +4503,7 @@ void wwSectionManager::InsertSegments() if (bInsertSection) { // Start getting the bounds of this section - SwPaM aSectPaM(*mrReader.pPaM); + SwPaM aSectPaM(*mrReader.pPaM, mrReader.pPaM); SwNodeIndex aAnchor(aSectPaM.GetPoint()->nNode); if (aNext != aEnd) { diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx index 2a86c4f..97865c5 100644 --- a/sw/source/filter/ww8/ww8par2.cxx +++ b/sw/source/filter/ww8/ww8par2.cxx @@ -3484,7 +3484,7 @@ void SwWW8ImplReader::StopTable() // #i101116# - Keep PaM on table end only for nested tables if ( nInTable > 1 ) { - mpTableEndPaM.reset(new SwPaM(*pPaM)); + mpTableEndPaM.reset(new SwPaM(*pPaM, pPaM)); } } diff --git a/sw/source/filter/ww8/ww8par5.cxx b/sw/source/filter/ww8/ww8par5.cxx index 521e7f8..daef1e6 100644 --- a/sw/source/filter/ww8/ww8par5.cxx +++ b/sw/source/filter/ww8/ww8par5.cxx @@ -2204,7 +2204,7 @@ eF_ResT SwWW8ImplReader::Read_F_Macro( WW8FieldDesc*, OUString& rStr) WW8_CP nOldCp = pPlcxMan->Where(); WW8_CP nCp = nOldCp + nOffset; - SwPaM aPaM(*pPaM); + SwPaM aPaM(*pPaM, pPaM); aPaM.SetMark(); aPaM.Move(fnMoveBackward); aPaM.Exchange(); @@ -3318,9 +3318,9 @@ eF_ResT SwWW8ImplReader::Read_F_Tox( WW8FieldDesc* pF, OUString& rStr ) { delete mpPosAfterTOC; } - mpPosAfterTOC = new SwPaM(*pPaM); + mpPosAfterTOC = new SwPaM(*pPaM, pPaM); (*pPaM).Move(fnMoveBackward); - SwPaM aRegion(*pPaM); + SwPaM aRegion(*pPaM, pPaM); OSL_ENSURE(rDoc.GetCurTOX(*aRegion.GetPoint()), "Misunderstood how toc works"); if (SwTOXBase* pBase2 = (SwTOXBase*)rDoc.GetCurTOX(*aRegion.GetPoint())) commit c55599fd0e7198773087c6433031f7119aaaca36 Author: Michael Stahl <mst...@redhat.com> Date: Sat Apr 25 21:25:00 2015 +0200 rhbz#1205072: sw: resource mangement SNAFU caused by SwPaM copy ctor SwPaM copy ctor has the surprising habit of linking the new one into the old one's Ring. If you copy a shell cursor, *this* epic fail happens: ==948== Thread 6 SelectionManager: ==948== Invalid free() / delete / delete[] / realloc() ==948== at 0x4A07CE9: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==948== by 0x222F542B: SwPaM::operator delete(void*, unsigned long) (in /libreoffice-4-3/instdir/program/libswlo.so) ==948== by 0x2239E20E: SwPaM::~SwPaM() (pam.cxx:422) ==948== by 0x22368630: CheckRange(SwCursor*) (crsrsh.cxx:111) ==948== by 0x2236DECC: SwCrsrShell::UpdateCrsr(unsigned short, bool) (crsrsh.cxx:1397) ==948== by 0x22369113: SwCrsrShell::EndAction(bool) (crsrsh.cxx:290) ==948== by 0x2268971F: SwEditShell::EndAllAction() (edws.cxx:87) ==948== by 0x2262BEF3: SwBaseLink::DataChanged(rtl::OUString const&, com::sun::star::uno::Any const&) (swbaslnk.cxx:274) ==948== by 0x2262C78E: SwBaseLink::SwapIn(bool, bool) (swbaslnk.cxx:411) ==948== by 0x227102EC: SwGrfNode::SwapIn(bool) (ndgrf.cxx:539) ==948== by 0x227121BC: SwGrfNode::MakeCopy(SwDoc*, SwNodeIndex const&) const (ndgrf.cxx:999) ==948== by 0x22610E4D: SwNodes::_CopyNodes(SwNodeRange const&, SwNodeIndex const&, bool, bool) const (nodes.cxx:1862) ==948== by 0x225B98E0: SwDoc::CopyWithFlyInFly(SwNodeRange const&, int, SwNodeIndex const&, SwPaM const*, bool, bool, bool) const (ndcopy.cxx:1336) ==948== by 0x224AC1FF: SwDoc::CopyLayoutFmt(SwFrmFmt const&, SwFmtAnchor const&, bool, bool) (doclay.cxx:446) ==948== by 0x2294D2D4: SwTxtFlyCnt::CopyFlyFmt(SwDoc*) (atrflyin.cxx:130) ==948== by 0x229A5B96: MakeTxtAttr(SwDoc&, SfxPoolItem&, int, int, CopyOrNew_t, SwTxtNode*) (thints.cxx:1060) ==948== by 0x229A64E6: SwTxtNode::InsertItem(SfxPoolItem&, int, int, unsigned short) (thints.cxx:1224) ==948== by 0x2298E536: SwTxtNode::CopyText(SwTxtNode*, SwIndex const&, SwIndex const&, int, bool) (ndtxt.cxx:1773) ==948== by 0x2298DC08: SwTxtNode::CopyText(SwTxtNode*, SwIndex const&, int, bool) (ndtxt.cxx:1555) ==948== by 0x225B4C9D: SwTxtNode::MakeCopy(SwDoc*, SwNodeIndex const&) const (ndcopy.cxx:286) ==948== by 0x22610E4D: SwNodes::_CopyNodes(SwNodeRange const&, SwNodeIndex const&, bool, bool) const (nodes.cxx:1862) ==948== by 0x223EF3C2: SwNodes::_Copy(SwNodeRange const&, SwNodeIndex const&, bool) const (ndarr.hxx:182) ==948== by 0x225B5D8D: SwTableNode::MakeCopy(SwDoc*, SwNodeIndex const&) const (ndcopy.cxx:475) ==948== by 0x22610ACA: SwNodes::_CopyNodes(SwNodeRange const&, SwNodeIndex const&, bool, bool) const (nodes.cxx:1790) ==948== by 0x223EF3C2: SwNodes::_Copy(SwNodeRange const&, SwNodeIndex const&, bool) const (ndarr.hxx:182) ==948== by 0x225CA663: SwSectionNode::MakeCopy(SwDoc*, SwNodeIndex const&) const (ndsect.cxx:1270) ==948== by 0x22610BFC: SwNodes::_CopyNodes(SwNodeRange const&, SwNodeIndex const&, bool, bool) const (nodes.cxx:1817) ==948== by 0x223EF3C2: SwNodes::_Copy(SwNodeRange const&, SwNodeIndex const&, bool) const (ndarr.hxx:182) ==948== by 0x225CA663: SwSectionNode::MakeCopy(SwDoc*, SwNodeIndex const&) const (ndsect.cxx:1270) ==948== by 0x22610BFC: SwNodes::_CopyNodes(SwNodeRange const&, SwNodeIndex const&, bool, bool) const (nodes.cxx:1817) ==948== by 0x223EF3C2: SwNodes::_Copy(SwNodeRange const&, SwNodeIndex const&, bool) const (ndarr.hxx:182) ==948== by 0x225CA663: SwSectionNode::MakeCopy(SwDoc*, SwNodeIndex const&) const (ndsect.cxx:1270) ==948== by 0x22610BFC: SwNodes::_CopyNodes(SwNodeRange const&, SwNodeIndex const&, bool, bool) const (nodes.cxx:1817) ==948== by 0x225B98E0: SwDoc::CopyWithFlyInFly(SwNodeRange const&, int, SwNodeIndex const&, SwPaM const*, bool, bool, bool) const (ndcopy.cxx:1336) ==948== by 0x225B8F15: SwDoc::CopyImpl(SwPaM&, SwPosition&, bool, bool, SwPaM*) const (ndcopy.cxx:1239) ==948== by 0x225B6EE0: SwDoc::CopyRange(SwPaM&, SwPosition&, bool) const (ndcopy.cxx:707) ==948== by 0x22667E69: SwEditShell::_CopySelToDoc(SwDoc*, SwNodeIndex*) (edglss.cxx:244) ==948== by 0x226C8400: SwFEShell::Copy(SwDoc*, rtl::OUString const*) (fecopy.cxx:214) ==948== by 0x22DBF72B: (anonymous namespace)::lclOverWriteDoc(SwWrtShell&, SwDoc&) (swdtflvr.cxx:373) ==948== by 0x22DBFBC6: SwTransferable::GetData(com::sun::star::datatransfer::DataFlavor const&, rtl::OUString const&) (swdtflvr.cxx:439) ==948== by 0x7CB36C7: TransferableHelper::getTransferData2(com::sun::star::datatransfer::DataFlavor const&, rtl::OUString const&) (transfer.cxx:332) ==948== by 0x7CB34B5: TransferableHelper::getTransferData(com::sun::star::datatransfer::DataFlavor const&) (transfer.cxx:306) ==948== by 0x17A7E949: x11::SelectionManager::convertData(com::sun::star::uno::Reference<com::sun::star::datatransfer::XTransferable> const&, unsigned long, unsigned long, int&, com::sun::star::uno::Sequence<signed char>&) (X11_selection.cxx:655) ==948== by 0x17A823CA: x11::SelectionManager::sendData(x11::SelectionAdaptor*, unsigned long, unsigned long, unsigned long, unsigned long) (X11_selection.cxx:1503) ==948== by 0x17A82E03: x11::SelectionManager::handleSelectionRequest(XSelectionRequestEvent&) (X11_selection.cxx:1729) ==948== by 0x17A8A08A: x11::SelectionManager::handleXEvent(_XEvent&) (X11_selection.cxx:3574) ==948== Address 0x21e31a60 is on thread 6's stack ==948== in frame #40, created by SwEditShell::_CopySelToDoc(SwDoc*, SwNodeIndex*) (edglss.cxx:158) (regression from 49505336a629a75f4fb48bbe0c532b402e857ed4) Change-Id: I3d0a288a83b4719dda7977b4898dea656ea67388 diff --git a/sw/source/core/edit/eddel.cxx b/sw/source/core/edit/eddel.cxx index 0cbd8f2..8c0e777 100644 --- a/sw/source/core/edit/eddel.cxx +++ b/sw/source/core/edit/eddel.cxx @@ -95,7 +95,7 @@ void SwEditShell::DeleteSel( SwPaM& rPam, bool* pUndo ) if (bSelectAll) { assert(dynamic_cast<SwShellCrsr*>(&rPam)); // must be corrected pam - pNewPam.reset(new SwPaM(rPam)); + pNewPam.reset(new SwPaM(*rPam.GetMark(), *rPam.GetPoint())); // Selection starts at the first para of the first cell, but we // want to delete the table node before the first cell as well. pNewPam->Start()->nNode = pNewPam->Start()->nNode.GetNode().FindTableNode()->GetIndex(); diff --git a/sw/source/core/edit/edglss.cxx b/sw/source/core/edit/edglss.cxx index 8139e10..5647587 100644 --- a/sw/source/core/edit/edglss.cxx +++ b/sw/source/core/edit/edglss.cxx @@ -231,13 +231,14 @@ bool SwEditShell::_CopySelToDoc( SwDoc* pInsDoc, SwNodeIndex* pSttNd ) // Make a copy, so that in case we need to adjust the selection // for the purpose of copying, our shell cursor is not touched. // (Otherwise we would have to restore it.) - SwPaM aPaM(rPaM); + SwPaM aPaM(*rPaM.GetMark(), *rPaM.GetPoint()); if (bSelectAll) { // Selection starts at the first para of the first cell, // but we want to copy the table and the start node before // the first cell as well. aPaM.Start()->nNode = aPaM.Start()->nNode.GetNode().FindTableNode()->GetIndex(); + aPaM.Start()->nContent.Assign(nullptr, 0); } bRet = GetDoc()->getIDocumentContentOperations().CopyRange( aPaM, aPos, /*bCopyAll=*/false, /*bCheckPos=*/true ) || bRet; } commit 1b6be726449fb9b1ff54bc99a1b8839621444ddc Author: Michael Stahl <mst...@redhat.com> Date: Sat Apr 25 20:42:54 2015 +0200 gbuild: CppunitTest: allow specifying arguments with CPPUNITTEST_ARGS Change-Id: Ied595f97c2a6501a7e80a378a474689c43ad60d9 diff --git a/solenv/gbuild/CppunitTest.mk b/solenv/gbuild/CppunitTest.mk index 970e8b9..a6eae56 100644 --- a/solenv/gbuild/CppunitTest.mk +++ b/solenv/gbuild/CppunitTest.mk @@ -68,7 +68,8 @@ $(if $(URE),\ $(if $(VCL),\ --protector $(call gb_Library_get_target,vclbootstrapprotector) vclbootstrapprotector \ ) \ -$(ARGS) +$(ARGS) \ +$(CPPUNITTEST_ARGS) endef .PHONY : $(call gb_CppunitTest_get_clean_target,%) commit 77de4200b5d344e12c7239c32af2a2af887a176b Author: Michael Stahl <mst...@redhat.com> Date: Sat Apr 25 19:26:59 2015 +0200 sw: remove more SwAccessibleContext code that... ... looks related to some non-existent "async loading" feature. Change-Id: I99eaad92ce7f98e65c491e9862bed505ce1aa9fc diff --git a/sw/source/core/access/acccontext.cxx b/sw/source/core/access/acccontext.cxx index 4e3b92f..30b19f6 100644 --- a/sw/source/core/access/acccontext.cxx +++ b/sw/source/core/access/acccontext.cxx @@ -521,7 +521,6 @@ SwAccessibleContext::SwAccessibleContext( SwAccessibleMap *const pMap, , m_nRole(nRole) , m_isDisposing( false ) , m_isRegisteredAtAccessibleMap( true ) - , m_isBeginDocumentLoad( true ) , m_isSelectedInDoc(false) { InitStates(); @@ -581,21 +580,6 @@ uno::Reference< XAccessible> SAL_CALL { ::rtl::Reference < SwAccessibleContext > xChildImpl( GetMap()->GetContextImpl( aChild.GetSwFrm(), !m_isDisposing ) ); - //Send out accessible event when begin load. - if (m_isBeginDocumentLoad && m_nRole == AccessibleRole::DOCUMENT_TEXT) - { - - FireStateChangedEvent( AccessibleStateType::FOCUSABLE,true ); - FireStateChangedEvent( AccessibleStateType::BUSY,true ); - FireStateChangedEvent( AccessibleStateType::FOCUSED,true ); - // OFFSCREEN == !SHOWING, should stay consistent - // FireStateChangedEvent( AccessibleStateType::OFFSCREEN,true ); - FireStateChangedEvent( AccessibleStateType::SHOWING,true ); - FireStateChangedEvent( AccessibleStateType::BUSY,false ); - // OFFSCREEN again? - // FireStateChangedEvent( AccessibleStateType::OFFSCREEN,false ); - m_isBeginDocumentLoad = false; - } if( xChildImpl.is() ) { xChildImpl->SetParent( this ); diff --git a/sw/source/core/access/acccontext.hxx b/sw/source/core/access/acccontext.hxx index 873e9b2..4e620d6 100644 --- a/sw/source/core/access/acccontext.hxx +++ b/sw/source/core/access/acccontext.hxx @@ -89,8 +89,6 @@ private: bool m_isRegisteredAtAccessibleMap; void InitStates(); - //Add a member to identify the first time that document load - bool m_isBeginDocumentLoad; protected: void SetName( const OUString& rName ) { m_sName = rName; } commit 1d2244ecac353c227c6001d9a2e326d42b1116b0 Author: Michael Stahl <mst...@redhat.com> Date: Sat Apr 25 19:23:12 2015 +0200 sw: remove SwAccessibleDocument XEventListener buggy dead code This was added with IA2, but evidently it's dead - the listener is never registered at the broadcaster. Also the first of the events it is listening for does not exist, and the others are actually called "OnLoadFinished" and "OnLayoutFinished". Also remove the "isIfAsynLoad" [sic] member. Change-Id: Ib261c193289e415af91b3097c525e90ef051f824 diff --git a/sw/source/core/access/acccontext.cxx b/sw/source/core/access/acccontext.cxx index aca8c35..4e3b92f 100644 --- a/sw/source/core/access/acccontext.cxx +++ b/sw/source/core/access/acccontext.cxx @@ -521,9 +521,7 @@ SwAccessibleContext::SwAccessibleContext( SwAccessibleMap *const pMap, , m_nRole(nRole) , m_isDisposing( false ) , m_isRegisteredAtAccessibleMap( true ) - //Initialize the begin document load and IfAsynLoad to true , m_isBeginDocumentLoad( true ) - , isIfAsynLoad( true ) , m_isSelectedInDoc(false) { InitStates(); @@ -589,16 +587,13 @@ uno::Reference< XAccessible> SAL_CALL FireStateChangedEvent( AccessibleStateType::FOCUSABLE,true ); FireStateChangedEvent( AccessibleStateType::BUSY,true ); - if( !isIfAsynLoad ) - { - FireStateChangedEvent( AccessibleStateType::FOCUSED,true ); - // OFFSCREEN == !SHOWING, should stay consistent - // FireStateChangedEvent( AccessibleStateType::OFFSCREEN,true ); - FireStateChangedEvent( AccessibleStateType::SHOWING,true ); - FireStateChangedEvent( AccessibleStateType::BUSY,false ); - // OFFSCREEN again? - // FireStateChangedEvent( AccessibleStateType::OFFSCREEN,false ); - } + FireStateChangedEvent( AccessibleStateType::FOCUSED,true ); + // OFFSCREEN == !SHOWING, should stay consistent + // FireStateChangedEvent( AccessibleStateType::OFFSCREEN,true ); + FireStateChangedEvent( AccessibleStateType::SHOWING,true ); + FireStateChangedEvent( AccessibleStateType::BUSY,false ); + // OFFSCREEN again? + // FireStateChangedEvent( AccessibleStateType::OFFSCREEN,false ); m_isBeginDocumentLoad = false; } if( xChildImpl.is() ) diff --git a/sw/source/core/access/acccontext.hxx b/sw/source/core/access/acccontext.hxx index 43ec362..873e9b2 100644 --- a/sw/source/core/access/acccontext.hxx +++ b/sw/source/core/access/acccontext.hxx @@ -98,8 +98,6 @@ protected: { return m_nRole; } - //Add a member to identify if the document is Asyn load. - bool isIfAsynLoad; //This flag is used to mark the object's selected state. bool m_isSelectedInDoc; void SetParent( SwAccessibleContext *pParent ); diff --git a/sw/source/core/access/accdoc.cxx b/sw/source/core/access/accdoc.cxx index 0e33471..765ce5f 100644 --- a/sw/source/core/access/accdoc.cxx +++ b/sw/source/core/access/accdoc.cxx @@ -465,12 +465,6 @@ uno::Any SwAccessibleDocument::queryInterface( uno::Reference<XAccessibleSelection> aSelect = this; aRet <<= aSelect; } - //Add XEventListener interface support. - else if ( (rType == cppu::UnoType<com::sun::star::document::XEventListener>::get()) ) - { - uno::Reference<com::sun::star::document::XEventListener> aSelect = this; - aRet <<= aSelect; - } else if ( rType == cppu::UnoType<XAccessibleExtendedAttributes>::get()) { uno::Reference<XAccessibleExtendedAttributes> aAttribute = this; @@ -494,13 +488,10 @@ uno::Sequence< uno::Type > SAL_CALL SwAccessibleDocument::getTypes() sal_Int32 nIndex = aTypes.getLength(); //Reset types memory alloc - //aTypes.realloc( nIndex + 1 ); - aTypes.realloc( nIndex + 2 ); + aTypes.realloc( nIndex + 1 ); uno::Type* pTypes = aTypes.getArray(); pTypes[nIndex] = cppu::UnoType<XAccessibleSelection>::get(); - //Add XEventListener interface support. - pTypes[nIndex + 1 ] = cppu::UnoType<com::sun::star::document::XEventListener>::get(); return aTypes; } @@ -562,40 +553,6 @@ void SwAccessibleDocument::deselectAccessibleChild( maSelectionHelper.deselectAccessibleChild( nChildIndex ); } -//Implement XEventListener interfaces -void SAL_CALL SwAccessibleDocument::notifyEvent( const ::com::sun::star::document::EventObject& Event ) - throw (::com::sun::star::uno::RuntimeException, std::exception) -{ - SolarMutexGuard g; - - if ( Event.EventName == "FirstPageShows" ) - { - FireStateChangedEvent( AccessibleStateType::FOCUSED,true ); - } - else if ( Event.EventName == "LoadFinished" ) - { - // IA2 CWS. MT: OFFSCREEN == !SHOWING, should stay consistent - // FireStateChangedEvent( AccessibleStateType::OFFSCREEN,true ); - // MT: LoadFinished => Why not SHOWING == TRUE? - FireStateChangedEvent( AccessibleStateType::SHOWING,false ); - } - else if ( Event.EventName == "FormatFinished" ) - { - FireStateChangedEvent( AccessibleStateType::BUSY,false ); - // FireStateChangedEvent( AccessibleStateType::OFFSCREEN,false ); - FireStateChangedEvent( AccessibleStateType::SHOWING,true ); - } - else - { - isIfAsynLoad = false; - } -} - -void SAL_CALL SwAccessibleDocument::disposing( const ::com::sun::star::lang::EventObject& ) - throw (::com::sun::star::uno::RuntimeException, std::exception) -{ -} - uno::Any SAL_CALL SwAccessibleDocument::getExtendedAttributes() throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException, diff --git a/sw/source/core/access/accdoc.hxx b/sw/source/core/access/accdoc.hxx index 953c8a1..1fae89e 100644 --- a/sw/source/core/access/accdoc.hxx +++ b/sw/source/core/access/accdoc.hxx @@ -107,7 +107,6 @@ public: */ class SwAccessibleDocument : public SwAccessibleDocumentBase, public com::sun::star::accessibility::XAccessibleSelection, - public com::sun::star::document::XEventListener, public com::sun::star::accessibility::XAccessibleExtendedAttributes, public com::sun::star::accessibility::XAccessibleGetAccFlowTo { @@ -125,11 +124,6 @@ public: SwAccessibleDocument( SwAccessibleMap* pInitMap ); DECL_LINK( WindowChildEventListener, VclSimpleEvent* ); - // XEventListener - virtual void SAL_CALL notifyEvent( const ::com::sun::star::document::EventObject& Event ) - throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; - virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Event ) - throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; // XServiceInfo commit 8c7928b647c49e7bb4a6d0ee46a1d5bc90f168b5 Author: Michael Stahl <mst...@redhat.com> Date: Sat Apr 25 19:15:27 2015 +0200 sw: prefix members of SwAccessibleContext Change-Id: Ie5cb2d9819fcb4b22b596a0ba407043d9d80db7d diff --git a/sw/source/core/access/acccell.cxx b/sw/source/core/access/acccell.cxx index aee976e..b52f9a4 100644 --- a/sw/source/core/access/acccell.cxx +++ b/sw/source/core/access/acccell.cxx @@ -127,7 +127,7 @@ bool SwAccessibleCell::_InvalidateMyCursorPos() bool bNew = IsSelected(); bool bOld; { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); bOld = bIsSelected; bIsSelected = bNew; } @@ -227,7 +227,7 @@ void SwAccessibleCell::_InvalidateCursorPos() bool SwAccessibleCell::HasCursor() { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); return bIsSelected; } diff --git a/sw/source/core/access/acccontext.cxx b/sw/source/core/access/acccontext.cxx index dd42c52..aca8c35 100644 --- a/sw/source/core/access/acccontext.cxx +++ b/sw/source/core/access/acccontext.cxx @@ -55,27 +55,27 @@ using namespace ::com::sun::star::accessibility; void SwAccessibleContext::InitStates() { - bIsShowingState = GetMap() && IsShowing( *(GetMap()) ); + m_isShowingState = GetMap() && IsShowing( *(GetMap()) ); SwViewShell *pVSh = GetMap()->GetShell(); - bIsEditableState = pVSh && IsEditable( pVSh ); - bIsOpaqueState = pVSh && IsOpaque( pVSh ); - bIsDefuncState = false; + m_isEditableState = pVSh && IsEditable( pVSh ); + m_isOpaqueState = pVSh && IsOpaque( pVSh ); + m_isDefuncState = false; } void SwAccessibleContext::SetParent( SwAccessibleContext *pParent ) { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); uno::Reference < XAccessible > xParent( pParent ); - xWeakParent = xParent; + m_xWeakParent = xParent; } uno::Reference< XAccessible > SwAccessibleContext::GetWeakParent() const { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); - uno::Reference< XAccessible > xParent( xWeakParent ); + uno::Reference< XAccessible > xParent( m_xWeakParent ); return xParent; } @@ -278,9 +278,9 @@ void SwAccessibleContext::Scrolled( const SwRect& rOldVisArea ) bool bIsOldShowingState; bool bIsNewShowingState = IsShowing( *(GetMap()) ); { - osl::MutexGuard aGuard( aMutex ); - bIsOldShowingState = bIsShowingState; - bIsShowingState = bIsNewShowingState; + osl::MutexGuard aGuard( m_Mutex ); + bIsOldShowingState = m_isShowingState; + m_isShowingState = bIsNewShowingState; } if( bIsOldShowingState != bIsNewShowingState ) @@ -443,8 +443,8 @@ void SwAccessibleContext::FireAccessibleEvent( AccessibleEventObject& rEvent ) rEvent.Source = xThis; } - if (nClientId) - comphelper::AccessibleEventNotifier::addEvent( nClientId, rEvent ); + if (m_nClientId) + comphelper::AccessibleEventNotifier::addEvent( m_nClientId, rEvent ); } void SwAccessibleContext::FireVisibleDataEvent() @@ -475,11 +475,11 @@ void SwAccessibleContext::GetStates( SolarMutexGuard aGuard; // SHOWING - if( bIsShowingState ) + if (m_isShowingState) rStateSet.AddState( AccessibleStateType::SHOWING ); // EDITABLE - if( bIsEditableState ) + if (m_isEditableState) //Set editable state to graphic and other object when the document is editable { rStateSet.AddState( AccessibleStateType::EDITABLE ); @@ -490,13 +490,13 @@ void SwAccessibleContext::GetStates( rStateSet.AddState( AccessibleStateType::ENABLED ); // OPAQUE - if( bIsOpaqueState ) + if (m_isOpaqueState) rStateSet.AddState( AccessibleStateType::OPAQUE ); // VISIBLE rStateSet.AddState( AccessibleStateType::VISIBLE ); - if( bIsDefuncState ) + if (m_isDefuncState) rStateSet.AddState( AccessibleStateType::DEFUNC ); } @@ -504,27 +504,27 @@ bool SwAccessibleContext::IsEditableState() { bool bRet; { - osl::MutexGuard aGuard( aMutex ); - bRet = bIsEditableState; + osl::MutexGuard aGuard( m_Mutex ); + bRet = m_isEditableState; } return bRet; } -SwAccessibleContext::SwAccessibleContext( SwAccessibleMap *pM, - sal_Int16 nR, +SwAccessibleContext::SwAccessibleContext( SwAccessibleMap *const pMap, + sal_Int16 const nRole, const SwFrm *pF ) - : SwAccessibleFrame( pM->GetVisArea().SVRect(), pF, - pM->GetShell()->IsPreview() ) - , pMap( pM ) - , nClientId(0) - , nRole( nR ) - , bDisposing( false ) - , bRegisteredAtAccessibleMap( true ) + : SwAccessibleFrame( pMap->GetVisArea().SVRect(), pF, + pMap->GetShell()->IsPreview() ) + , m_pMap( pMap ) + , m_nClientId(0) + , m_nRole(nRole) + , m_isDisposing( false ) + , m_isRegisteredAtAccessibleMap( true ) //Initialize the begin document load and IfAsynLoad to true - , bBeginDocumentLoad( true ) + , m_isBeginDocumentLoad( true ) , isIfAsynLoad( true ) - , bIsSeletedInDoc( false) + , m_isSelectedInDoc(false) { InitStates(); } @@ -550,10 +550,10 @@ sal_Int32 SAL_CALL SwAccessibleContext::getAccessibleChildCount() CHECK_FOR_DEFUNC( XAccessibleContext ) //Notify the frame is a document - if( nRole == AccessibleRole::DOCUMENT_TEXT ) + if (m_nRole == AccessibleRole::DOCUMENT_TEXT) bIsAccDocUse = true; - return bDisposing ? 0 : GetChildCount( *(GetMap()) ); + return m_isDisposing ? 0 : GetChildCount( *(GetMap()) ); } uno::Reference< XAccessible> SAL_CALL @@ -565,7 +565,7 @@ uno::Reference< XAccessible> SAL_CALL CHECK_FOR_DEFUNC( XAccessibleContext ) //Notify the frame is a document - if( nRole == AccessibleRole::DOCUMENT_TEXT ) + if (m_nRole == AccessibleRole::DOCUMENT_TEXT) bIsAccDocUse = true; const SwAccessibleChild aChild( GetChild( *(GetMap()), nIndex ) ); @@ -582,9 +582,9 @@ uno::Reference< XAccessible> SAL_CALL if( aChild.GetSwFrm() ) { ::rtl::Reference < SwAccessibleContext > xChildImpl( - GetMap()->GetContextImpl( aChild.GetSwFrm(), !bDisposing ) ); + GetMap()->GetContextImpl( aChild.GetSwFrm(), !m_isDisposing ) ); //Send out accessible event when begin load. - if( bBeginDocumentLoad && nRole == AccessibleRole::DOCUMENT_TEXT ) + if (m_isBeginDocumentLoad && m_nRole == AccessibleRole::DOCUMENT_TEXT) { FireStateChangedEvent( AccessibleStateType::FOCUSABLE,true ); @@ -599,7 +599,7 @@ uno::Reference< XAccessible> SAL_CALL // OFFSCREEN again? // FireStateChangedEvent( AccessibleStateType::OFFSCREEN,false ); } - bBeginDocumentLoad = false; + m_isBeginDocumentLoad = false; } if( xChildImpl.is() ) { @@ -611,7 +611,7 @@ uno::Reference< XAccessible> SAL_CALL { ::rtl::Reference < ::accessibility::AccessibleShape > xChildImpl( GetMap()->GetContextImpl( aChild.GetDrawObject(), - this, !bDisposing ) ); + this, !m_isDisposing) ); if( xChildImpl.is() ) xChild = xChildImpl.get(); } @@ -631,18 +631,18 @@ uno::Reference< XAccessible> SAL_CALL SwAccessibleContext::getAccessibleParent() CHECK_FOR_DEFUNC( XAccessibleContext ) const SwFrm *pUpper = GetParent(); - OSL_ENSURE( pUpper != 0 || bDisposing, "no upper found" ); + OSL_ENSURE( pUpper != 0 || m_isDisposing, "no upper found" ); uno::Reference< XAccessible > xAcc; if( pUpper ) - xAcc = GetMap()->GetContext( pUpper, !bDisposing ); + xAcc = GetMap()->GetContext( pUpper, !m_isDisposing ); - OSL_ENSURE( xAcc.is() || bDisposing, "no parent found" ); + OSL_ENSURE( xAcc.is() || m_isDisposing, "no parent found" ); // Remember the parent as weak ref. { - osl::MutexGuard aWeakParentGuard( aMutex ); - xWeakParent = xAcc; + osl::MutexGuard aWeakParentGuard( m_Mutex ); + m_xWeakParent = xAcc; } return xAcc; @@ -656,14 +656,14 @@ sal_Int32 SAL_CALL SwAccessibleContext::getAccessibleIndexInParent() CHECK_FOR_DEFUNC( XAccessibleContext ) const SwFrm *pUpper = GetParent(); - OSL_ENSURE( pUpper != 0 || bDisposing, "no upper found" ); + OSL_ENSURE( pUpper != 0 || m_isDisposing, "no upper found" ); sal_Int32 nIndex = -1; if( pUpper ) { ::rtl::Reference < SwAccessibleContext > xAccImpl( - GetMap()->GetContextImpl( pUpper, !bDisposing ) ); - OSL_ENSURE( xAccImpl.is() || bDisposing, "no parent found" ); + GetMap()->GetContextImpl(pUpper, !m_isDisposing) ); + OSL_ENSURE( xAccImpl.is() || m_isDisposing, "no parent found" ); if( xAccImpl.is() ) nIndex = xAccImpl->GetChildIndex( *(GetMap()), SwAccessibleChild(GetFrm()) ); } @@ -674,7 +674,7 @@ sal_Int32 SAL_CALL SwAccessibleContext::getAccessibleIndexInParent() sal_Int16 SAL_CALL SwAccessibleContext::getAccessibleRole() throw (uno::RuntimeException, std::exception) { - return nRole; + return m_nRole; } OUString SAL_CALL SwAccessibleContext::getAccessibleDescription() @@ -687,7 +687,7 @@ OUString SAL_CALL SwAccessibleContext::getAccessibleDescription() OUString SAL_CALL SwAccessibleContext::getAccessibleName() throw (uno::RuntimeException, std::exception) { - return sName; + return m_sName; } uno::Reference< XAccessibleRelationSet> SAL_CALL @@ -710,7 +710,7 @@ uno::Reference<XAccessibleStateSet> SAL_CALL ::utl::AccessibleStateSetHelper *pStateSet = new ::utl::AccessibleStateSetHelper; - if( bIsSeletedInDoc ) + if (m_isSelectedInDoc) pStateSet->AddState( AccessibleStateType::SELECTED ); uno::Reference<XAccessibleStateSet> xStateSet( pStateSet ); @@ -735,9 +735,9 @@ void SAL_CALL SwAccessibleContext::addAccessibleEventListener( if (xListener.is()) { SolarMutexGuard aGuard; - if (!nClientId) - nClientId = comphelper::AccessibleEventNotifier::registerClient( ); - comphelper::AccessibleEventNotifier::addEventListener( nClientId, xListener ); + if (!m_nClientId) + m_nClientId = comphelper::AccessibleEventNotifier::registerClient( ); + comphelper::AccessibleEventNotifier::addEventListener( m_nClientId, xListener ); } } @@ -748,15 +748,15 @@ void SAL_CALL SwAccessibleContext::removeAccessibleEventListener( if (xListener.is()) { SolarMutexGuard aGuard; - sal_Int32 nListenerCount = comphelper::AccessibleEventNotifier::removeEventListener( nClientId, xListener ); + sal_Int32 nListenerCount = comphelper::AccessibleEventNotifier::removeEventListener( m_nClientId, xListener ); if ( !nListenerCount ) { // no listeners anymore // -> revoke ourself. This may lead to the notifier thread dying (if we were the last client), // and at least to us not firing any events anymore, in case somebody calls // NotifyAccessibleEvent, again - comphelper::AccessibleEventNotifier::revokeClient( nClientId ); - nClientId = 0; + comphelper::AccessibleEventNotifier::revokeClient( m_nClientId ); + m_nClientId = 0; } } } @@ -1052,7 +1052,7 @@ void SwAccessibleContext::Dispose( bool bRecursive ) OSL_ENSURE( GetMap()->GetVisArea() == GetVisArea(), "invalid vis area for dispose" ); - bDisposing = true; + m_isDisposing = true; // dispose children if( bRecursive ) @@ -1076,22 +1076,22 @@ void SwAccessibleContext::Dispose( bool bRecursive ) // set defunc state (its not required to broadcast a state changed // event if the object is disposed afterwards) { - osl::MutexGuard aDefuncStateGuard( aMutex ); - bIsDefuncState = true; + osl::MutexGuard aDefuncStateGuard( m_Mutex ); + m_isDefuncState = true; } // broadcast dispose event - if ( nClientId ) + if (m_nClientId) { - comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( nClientId, *this ); - nClientId = 0; + comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( m_nClientId, *this ); + m_nClientId = 0; } RemoveFrmFromAccessibleMap(); ClearFrm(); - pMap = 0; + m_pMap = nullptr; - bDisposing = false; + m_isDisposing = false; } void SwAccessibleContext::DisposeChild( const SwAccessibleChild& rChildFrmOrObj, @@ -1144,9 +1144,9 @@ void SwAccessibleContext::InvalidatePosOrSize( const SwRect& ) bool bIsOldShowingState; bool bIsNewShowingState = IsShowing( *(GetMap()) ); { - osl::MutexGuard aShowingStateGuard( aMutex ); - bIsOldShowingState = bIsShowingState; - bIsShowingState = bIsNewShowingState; + osl::MutexGuard aShowingStateGuard( m_Mutex ); + bIsOldShowingState = m_isShowingState; + m_isShowingState = bIsNewShowingState; } if( bIsOldShowingState != bIsNewShowingState ) @@ -1292,9 +1292,9 @@ void SwAccessibleContext::InvalidateStates( AccessibleStates _nStates ) bool bIsOldEditableState; bool bIsNewEditableState = IsEditable( pVSh ); { - osl::MutexGuard aGuard( aMutex ); - bIsOldEditableState = bIsEditableState; - bIsEditableState = bIsNewEditableState; + osl::MutexGuard aGuard( m_Mutex ); + bIsOldEditableState = m_isEditableState; + m_isEditableState = bIsNewEditableState; } if( bIsOldEditableState != bIsNewEditableState ) @@ -1306,9 +1306,9 @@ void SwAccessibleContext::InvalidateStates( AccessibleStates _nStates ) bool bIsOldOpaqueState; bool bIsNewOpaqueState = IsOpaque( pVSh ); { - osl::MutexGuard aGuard( aMutex ); - bIsOldOpaqueState = bIsOpaqueState; - bIsOpaqueState = bIsNewOpaqueState; + osl::MutexGuard aGuard( m_Mutex ); + bIsOldOpaqueState = m_isOpaqueState; + m_isOpaqueState = bIsNewOpaqueState; } if( bIsOldOpaqueState != bIsNewOpaqueState ) @@ -1438,7 +1438,7 @@ OUString SwAccessibleContext::GetResource( sal_uInt16 nResId, void SwAccessibleContext::RemoveFrmFromAccessibleMap() { - if( bRegisteredAtAccessibleMap && GetFrm() && GetMap() ) + if (m_isRegisteredAtAccessibleMap && GetFrm() && GetMap()) GetMap()->RemoveContext( GetFrm() ); } @@ -1489,12 +1489,12 @@ void SwAccessibleContext::GetAdditionalAccessibleChildren( std::vector< vcl::Win } } -bool SwAccessibleContext::SetSelectedState(bool bSeleted) +bool SwAccessibleContext::SetSelectedState(bool const bSelected) { - if(bIsSeletedInDoc != bSeleted) + if (m_isSelectedInDoc != bSelected) { - bIsSeletedInDoc = bSeleted; - FireStateChangedEvent( AccessibleStateType::SELECTED, bSeleted ); + m_isSelectedInDoc = bSelected; + FireStateChangedEvent( AccessibleStateType::SELECTED, bSelected ); return true; } return false; diff --git a/sw/source/core/access/acccontext.hxx b/sw/source/core/access/acccontext.hxx index a609f5c..43ec362 100644 --- a/sw/source/core/access/acccontext.hxx +++ b/sw/source/core/access/acccontext.hxx @@ -59,57 +59,57 @@ class SwAccessibleContext : friend class SwAccessibleSelectionHelper; protected: - mutable ::osl::Mutex aListenerMutex; - mutable ::osl::Mutex aMutex; + mutable ::osl::Mutex m_ListenerMutex; + mutable ::osl::Mutex m_Mutex; private: - OUString sName; // immutable outside constructor + OUString m_sName; // immutable outside constructor // The parent if it has been retrieved. This is always an // SwAccessibleContext. (protected by Mutex) ::com::sun::star::uno::WeakReference < - ::com::sun::star::accessibility::XAccessible > xWeakParent; + ::com::sun::star::accessibility::XAccessible > m_xWeakParent; - SwAccessibleMap *pMap; // must be protected by solar mutex + SwAccessibleMap *m_pMap; // must be protected by solar mutex - sal_uInt32 nClientId; // client id in the AccessibleEventNotifier queue - sal_Int16 nRole; // immutable outside constructor + sal_uInt32 m_nClientId; // client id in the AccessibleEventNotifier queue + sal_Int16 m_nRole; // immutable outside constructor // The current states (protected by mutex) - bool bIsShowingState : 1; - bool bIsEditableState : 1; - bool bIsOpaqueState : 1; - bool bIsDefuncState : 1; + bool m_isShowingState : 1; + bool m_isEditableState : 1; + bool m_isOpaqueState : 1; + bool m_isDefuncState : 1; // Are we currently disposing that object (protected by solar mutex)? - bool bDisposing : 1; + bool m_isDisposing : 1; // #i85634# - boolean, indicating if the accessible context is // in general registered at the accessible map. - bool bRegisteredAtAccessibleMap; + bool m_isRegisteredAtAccessibleMap; void InitStates(); //Add a member to identify the first time that document load - bool bBeginDocumentLoad; + bool m_isBeginDocumentLoad; protected: - void SetName( const OUString& rName ) { sName = rName; } + void SetName( const OUString& rName ) { m_sName = rName; } inline sal_Int16 GetRole() const { - return nRole; + return m_nRole; } //Add a member to identify if the document is Asyn load. bool isIfAsynLoad; //This flag is used to mark the object's selected state. - bool bIsSeletedInDoc; + bool m_isSelectedInDoc; void SetParent( SwAccessibleContext *pParent ); ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> GetWeakParent() const; - bool IsDisposing() const { return bDisposing; } + bool IsDisposing() const { return m_isDisposing; } vcl::Window *GetWindow(); - SwAccessibleMap *GetMap() { return pMap; } - const SwAccessibleMap *GetMap() const { return pMap; } + SwAccessibleMap *GetMap() { return m_pMap; } + const SwAccessibleMap *GetMap() const { return m_pMap; } /** convenience method to get the SwViewShell through accessibility map */ inline SwViewShell* GetShell() @@ -166,7 +166,7 @@ protected: virtual void _InvalidateFocus(); public: - void SetMap(SwAccessibleMap *pM){pMap = pM;} + void SetMap(SwAccessibleMap *const pMap) { m_pMap = pMap; } void FireAccessibleEvent( ::com::sun::star::accessibility::AccessibleEventObject& rEvent ); protected: @@ -190,14 +190,14 @@ protected: // #i85634# inline void NotRegisteredAtAccessibleMap() { - bRegisteredAtAccessibleMap = false; + m_isRegisteredAtAccessibleMap = false; } void RemoveFrmFromAccessibleMap(); virtual ~SwAccessibleContext(); public: - SwAccessibleContext( SwAccessibleMap *pMap, sal_Int16 nRole, + SwAccessibleContext( SwAccessibleMap *m_pMap, sal_Int16 nRole, const SwFrm *pFrm ); // XAccessible @@ -362,7 +362,7 @@ public: // #i88070# - get all additional accessible children void GetAdditionalAccessibleChildren( std::vector< vcl::Window* >* pChildren ); - const OUString& GetName() const { return sName; } + const OUString& GetName() const { return m_sName; } virtual bool HasCursor(); // required by map to remember that object @@ -378,7 +378,7 @@ public: //This method is used to updated the selected state and fire the selected state changed event. virtual bool SetSelectedState(bool bSeleted); - bool IsSeletedInDoc(){ return bIsSeletedInDoc; } + bool IsSeletedInDoc() { return m_isSelectedInDoc; } static OUString GetResource( sal_uInt16 nResId, const OUString *pArg1 = 0, diff --git a/sw/source/core/access/accframebase.cxx b/sw/source/core/access/accframebase.cxx index 9682e94..d5bb32a 100644 --- a/sw/source/core/access/accframebase.cxx +++ b/sw/source/core/access/accframebase.cxx @@ -146,7 +146,7 @@ void SwAccessibleFrameBase::_InvalidateCursorPos() bool bOldSelected; { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); bOldSelected = bIsSelected; bIsSelected = bNewSelected; } @@ -192,7 +192,7 @@ void SwAccessibleFrameBase::_InvalidateFocus() bool bSelected; { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); bSelected = bIsSelected; } assert(bSelected && "focus object should be selected"); @@ -204,7 +204,7 @@ void SwAccessibleFrameBase::_InvalidateFocus() bool SwAccessibleFrameBase::HasCursor() { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); return bIsSelected; } @@ -377,12 +377,12 @@ SwFlyFrm* SwAccessibleFrameBase::getFlyFrm() const bool SwAccessibleFrameBase::SetSelectedState( bool ) { - bool bParaSeleted = GetSelectedState() || IsSelected(); + bool bParaSelected = GetSelectedState() || IsSelected(); - if(bIsSeletedInDoc != bParaSeleted) + if (m_isSelectedInDoc != bParaSelected) { - bIsSeletedInDoc = bParaSeleted; - FireStateChangedEvent( AccessibleStateType::SELECTED, bParaSeleted ); + m_isSelectedInDoc = bParaSelected; + FireStateChangedEvent( AccessibleStateType::SELECTED, bParaSelected ); return true; } return false; diff --git a/sw/source/core/access/accpage.cxx b/sw/source/core/access/accpage.cxx index 11a8bdd..46d6e0d 100644 --- a/sw/source/core/access/accpage.cxx +++ b/sw/source/core/access/accpage.cxx @@ -71,7 +71,7 @@ void SwAccessiblePage::_InvalidateCursorPos() bool bOldSelected; { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); bOldSelected = bIsSelected; bIsSelected = bNewSelected; } @@ -100,7 +100,7 @@ void SwAccessiblePage::_InvalidateFocus() bool bSelected; { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); bSelected = bIsSelected; } OSL_ENSURE( bSelected, "focus object should be selected" ); @@ -132,7 +132,7 @@ SwAccessiblePage::~SwAccessiblePage() bool SwAccessiblePage::HasCursor() { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); return bIsSelected; } diff --git a/sw/source/core/access/accpara.cxx b/sw/source/core/access/accpara.cxx index 99a77d1..8758038 100644 --- a/sw/source/core/access/accpara.cxx +++ b/sw/source/core/access/accpara.cxx @@ -425,7 +425,7 @@ void SwAccessibleParagraph::_InvalidateContent( bool bVisibleDataFired ) nHeadingLevel = GetRealHeadingLevel(); bool bOldIsHeading; { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); bOldIsHeading = bIsHeading; if( bIsHeading != bNewIsHeading ) bIsHeading = bNewIsHeading; @@ -445,7 +445,7 @@ void SwAccessibleParagraph::_InvalidateContent( bool bVisibleDataFired ) OUString sNewDesc( GetDescription() ); OUString sOldDesc; { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); sOldDesc = sDesc; if( sDesc != sNewDesc ) sDesc = sNewDesc; @@ -470,7 +470,7 @@ void SwAccessibleParagraph::_InvalidateCursorPos() sal_Int32 nNew = GetCaretPos(); sal_Int32 nOld; { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); nOld = nOldCaretPos; nOldCaretPos = nNew; } @@ -520,7 +520,7 @@ void SwAccessibleParagraph::_InvalidateFocus() { sal_Int32 nPos; { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); nPos = nOldCaretPos; } OSL_ENSURE( nPos != -1, "focus object should be selected" ); @@ -568,7 +568,7 @@ SwAccessibleParagraph::~SwAccessibleParagraph() bool SwAccessibleParagraph::HasCursor() { - osl::MutexGuard aGuard( aMutex ); + osl::MutexGuard aGuard( m_Mutex ); return nOldCaretPos != -1; } @@ -933,7 +933,7 @@ OUString SAL_CALL SwAccessibleParagraph::getAccessibleDescription() CHECK_FOR_DEFUNC( XAccessibleContext ); - osl::MutexGuard aGuard2( aMutex ); + osl::MutexGuard aGuard2( m_Mutex ); if( sDesc.isEmpty() ) sDesc = GetDescription(); @@ -1287,7 +1287,7 @@ sal_Int32 SwAccessibleParagraph::getCaretPosition() sal_Int32 nRet = GetCaretPos(); { - osl::MutexGuard aOldCaretPosGuard( aMutex ); + osl::MutexGuard aOldCaretPosGuard( m_Mutex ); OSL_ENSURE( nRet == nOldCaretPos, "caret pos out of sync" ); nOldCaretPos = nRet; } commit 5ce7572ee77be4459536fa5f3153fdc8b4b5d0d3 Author: Michael Stahl <mst...@redhat.com> Date: Sat Apr 25 00:27:00 2015 +0200 sw: deploy some asserts Change-Id: I7bb6820c2ad46f6822dc1f153ae25fd55a1f674b diff --git a/sw/source/core/access/accmap.cxx b/sw/source/core/access/accmap.cxx index 7ebdc99..71c4a1e 100644 --- a/sw/source/core/access/accmap.cxx +++ b/sw/source/core/access/accmap.cxx @@ -371,8 +371,8 @@ public: mnStates( AccessibleStates::NONE ), mpParentFrm( nullptr ) { - OSL_ENSURE( SwAccessibleEvent_Impl::DISPOSE == meType, - "wrong event constructor, DISPOSE only" ); + assert(SwAccessibleEvent_Impl::DISPOSE == meType && + "wrong event constructor, DISPOSE only"); } SwAccessibleEvent_Impl( EventType eT ) @@ -380,7 +380,7 @@ public: mnStates( AccessibleStates::NONE ), mpParentFrm( nullptr ) { - OSL_ENSURE( SwAccessibleEvent_Impl::SHAPE_SELECTION == meType, + assert(SwAccessibleEvent_Impl::SHAPE_SELECTION == meType && "wrong event constructor, SHAPE_SELECTION only" ); } @@ -395,8 +395,8 @@ public: mnStates( AccessibleStates::NONE ), mpParentFrm( nullptr ) { - OSL_ENSURE( SwAccessibleEvent_Impl::CHILD_POS_CHANGED == meType || - SwAccessibleEvent_Impl::POS_CHANGED == meType, + assert((SwAccessibleEvent_Impl::CHILD_POS_CHANGED == meType || + SwAccessibleEvent_Impl::POS_CHANGED == meType) && "wrong event constructor, (CHILD_)POS_CHANGED only" ); } @@ -410,7 +410,7 @@ public: mnStates( _nStates ), mpParentFrm( nullptr ) { - OSL_ENSURE( SwAccessibleEvent_Impl::CARET_OR_STATES == meType, + assert( SwAccessibleEvent_Impl::CARET_OR_STATES == meType && "wrong event constructor, CARET_OR_STATES only" ); } @@ -422,7 +422,7 @@ public: mnStates( AccessibleStates::NONE ), mpParentFrm( pParentFrm ) { - OSL_ENSURE( SwAccessibleEvent_Impl::CHILD_POS_CHANGED == meType, + assert( SwAccessibleEvent_Impl::CHILD_POS_CHANGED == meType && "wrong event constructor, CHILD_POS_CHANGED only" ); } commit bcf426652399e81ae692a1202afb409db3a49103 Author: Michael Stahl <mst...@redhat.com> Date: Fri Apr 24 23:52:40 2015 +0200 sw: simplify and remove special case in SwHTMLParser::AddParSpace() Change-Id: Ia64935bcc957cc5730f8cd67ec374c548a46b531 diff --git a/sw/source/filter/html/swhtml.cxx b/sw/source/filter/html/swhtml.cxx index 57a51f1..0c6f9e6 100644 --- a/sw/source/filter/html/swhtml.cxx +++ b/sw/source/filter/html/swhtml.cxx @@ -2415,29 +2415,20 @@ void SwHTMLParser::AddParSpace() } else { - if (!pTxtNode->HasHints()) - { - pTxtNode->SetAttr( - SvxULSpaceItem( rULSpace.GetUpper(), HTML_PARSPACE, RES_UL_SPACE ) ); - return; - } //What I do here, is that I examine the attributes, and if //I find out, that it's CJK/CTL, then I set the paragraph space //to the value set in HTML_CJK_PARSPACE/HTML_CTL_PARSPACE. bool bIsCJK = false; bool bIsCTL = false; - SwpHints& rHints = pTxtNode->GetSwpHints(); - sal_uInt16 nWhich; - SwTxtAttr *pHt; const size_t nCntAttr = (pTxtNode && pTxtNode->GetpSwpHints()) ? pTxtNode->GetSwpHints().Count() : 0; for(size_t i = 0; i < nCntAttr; ++i) { - pHt = rHints.GetTextHint(i); - nWhich = pHt->Which(); + SwTxtAttr *const pHt = pTxtNode->GetSwpHints().GetTextHint(i); + sal_uInt16 const nWhich = pHt->Which(); if (RES_CHRATR_CJK_FONT == nWhich || RES_CHRATR_CJK_FONTSIZE == nWhich || RES_CHRATR_CJK_LANGUAGE == nWhich || commit 104ed86c382b73505b477bf3024982dd27823023 Author: Michael Stahl <mst...@redhat.com> Date: Fri Apr 24 23:31:06 2015 +0200 sw: fix SwAccessibleParagraph crash on delete It happens that SwAccessibleParagraph::getCharacterBounds() is called from ATK with a clearly invalid pPortionData member; the SwTxtNode has no text but there are portions. This is because after a deletion both a POS_CHANGED and a INVALID_CONTENT event are created for the same SwAccessibleParagraph, and they are merged into one POS_CHANGED event by SwAccessibleMap::AppendEvent(), but SwAccessibleContext::InvalidatePosOrSize() returns early if the paragraph happens to not be visible, skipping the invalidation. (regression from 76c549eb01dcb7b5bf28a271ce00e386f3d388ba, which removed a Dispose() call; not sure if the Dispose() is needed here) Change-Id: I985e9a439ee6c7024963eace876186f2247b9e03 diff --git a/sw/source/core/access/acccontext.cxx b/sw/source/core/access/acccontext.cxx index 3628cd8..dd42c52 100644 --- a/sw/source/core/access/acccontext.cxx +++ b/sw/source/core/access/acccontext.cxx @@ -1160,12 +1160,9 @@ void SwAccessibleContext::InvalidatePosOrSize( const SwRect& ) FireVisibleDataEvent(); } - if( !bIsNewShowingState && - SwAccessibleChild( GetParent() ).IsVisibleChildrenOnly() ) - { - return; - } - + // note: InvalidatePosOrSize must call _InvalidateContent so that + // SwAccessibleParagraph updates its portions, or dispose it + // (see accmap.cxx: INVALID_CONTENT is contained in POS_CHANGED) _InvalidateContent( true ); } commit deb50a2a8a958be55a3564399b1973d365e82cf3 Author: Michael Stahl <mst...@redhat.com> Date: Fri Apr 24 16:29:37 2015 +0200 remove some @author tags from suspiciously unidiomatic code Change-Id: I3930420fe502978f8e14a688f2eb99c74d185f7b diff --git a/framework/source/fwe/classes/framelistanalyzer.cxx b/framework/source/fwe/classes/framelistanalyzer.cxx index 00599b8..708281f 100644 --- a/framework/source/fwe/classes/framelistanalyzer.cxx +++ b/framework/source/fwe/classes/framelistanalyzer.cxx @@ -187,7 +187,7 @@ void FrameListAnalyzer::impl_analyze() // b) Or is includes this task the special backing component? // Return it separated from any return list. // But check if the reference task itself is the backing frame. - // Our user mst know it to decide right. + // Our user must know it to decide right. if ((m_eDetectMode & E_BACKINGCOMPONENT) == E_BACKINGCOMPONENT) { try diff --git a/framework/source/services/autorecovery.cxx b/framework/source/services/autorecovery.cxx index 5bf18dc..b235a62 100644 --- a/framework/source/services/autorecovery.cxx +++ b/framework/source/services/autorecovery.cxx @@ -231,7 +231,7 @@ public: /** timer must be started with special short time intervall, to poll for an user idle period */ E_POLL_FOR_USER_IDLE, - /** timer mst be started with a very(!) short time intervall, + /** timer must be started with a very(!) short time interval, to poll for the end of an user action, which does not allow saving documents in general */ E_POLL_TILL_AUTOSAVE_IS_ALLOWED, /** dont start the timer - but calls the same action then before immediately again! */ diff --git a/include/sfx2/DocumentMetadataAccess.hxx b/include/sfx2/DocumentMetadataAccess.hxx index 8178b59..3ebe5d0 100644 --- a/include/sfx2/DocumentMetadataAccess.hxx +++ b/include/sfx2/DocumentMetadataAccess.hxx @@ -41,8 +41,6 @@ from the document, and i do not like defining an API for that. Also, the implementation does _no_ locking, so make sure access is protected externally. - - @author mst */ namespace com { namespace sun { namespace star { namespace embed { diff --git a/qadevOOo/tests/java/ifc/table/_XTableCharts.java b/qadevOOo/tests/java/ifc/table/_XTableCharts.java index be07fe9..62f939d 100644 --- a/qadevOOo/tests/java/ifc/table/_XTableCharts.java +++ b/qadevOOo/tests/java/ifc/table/_XTableCharts.java @@ -68,7 +68,7 @@ public class _XTableCharts extends MultiMethodTest { * <code>false</code>. <p> * The following method tests are to be completed successfully before : * <ul> - * <li> <code> addNewByName() </code> : chart mst be added first </li> + * <li> <code> addNewByName() </code> : chart must be added first </li> * </ul> */ public void _removeByName() { diff --git a/sfx2/source/doc/Metadatable.cxx b/sfx2/source/doc/Metadatable.cxx index 0e19ee4..59dfb8a 100644 --- a/sfx2/source/doc/Metadatable.cxx +++ b/sfx2/source/doc/Metadatable.cxx @@ -100,7 +100,6 @@ <type>MetadatableUndo<type> instance, which can be used to undo the action by passing it to <method>Metadatable::RestoreMetadata</method>. - @author mst */ diff --git a/sfx2/source/doc/SfxDocumentMetaData.cxx b/sfx2/source/doc/SfxDocumentMetaData.cxx index 52be422..db6274f 100644 --- a/sfx2/source/doc/SfxDocumentMetaData.cxx +++ b/sfx2/source/doc/SfxDocumentMetaData.cxx @@ -106,7 +106,6 @@ * and update the DOM tree only when storing the document (in * <method>updateUserDefinedAndAttributes</method>). * - * @author mst */ /// anonymous implementation namespace diff --git a/unoxml/source/rdf/librdf_repository.cxx b/unoxml/source/rdf/librdf_repository.cxx index f28b0f8..10f7241 100644 --- a/unoxml/source/rdf/librdf_repository.cxx +++ b/unoxml/source/rdf/librdf_repository.cxx @@ -76,7 +76,6 @@ librdf_GraphResult: an XEnumeration<Statement> librdf_QuerySelectResult: an XEnumeration<sequence<XNode>> - @author mst */ /// anonymous implementation namespace _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits