sc/source/ui/unoobj/viewuno.cxx | 3 + sw/inc/docsh.hxx | 6 --- sw/inc/swwait.hxx | 19 ++++++++-- sw/source/ui/app/swwait.cxx | 70 +++++++++++++++++++++++++-------------- sw/source/ui/dochdl/swdtflvr.cxx | 3 - 5 files changed, 65 insertions(+), 36 deletions(-)
New commits: commit b68e42c51823eb1690c0a0fa096124ec607616b2 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Feb 18 20:50:35 2014 +0000 coverity#738809 Uninitialized scalar field Change-Id: If2d985ae8ed940e22d755289b8176f92238bc911 diff --git a/sc/source/ui/unoobj/viewuno.cxx b/sc/source/ui/unoobj/viewuno.cxx index a6d3e36..62f7e8e 100644 --- a/sc/source/ui/unoobj/viewuno.cxx +++ b/sc/source/ui/unoobj/viewuno.cxx @@ -468,7 +468,8 @@ ScTabViewObj::ScTabViewObj( ScTabViewShell* pViewSh ) : aActivationListeners( 0 ), nPreviousTab( 0 ), bDrawSelModeSet(false), - mbLeftMousePressed(false ), + bFilteredRangeSelection(false), + mbLeftMousePressed(false), mbPendingSelectionChanged(false) { if (pViewSh) commit 91a7096af027d3a5b12972a6a5256c2a52812686 Author: Oliver-Rainer Wittmann <o...@apache.org> Date: Mon Feb 17 16:38:10 2014 +0000 Resolves: #i124096# avoid unlock of dispatcher by... recursive Lock-Unlock-pattern (cherry picked from commit 8d769be834186ae6aa05e64d88b95a6b9d874c2e) Conflicts: sw/inc/docsh.hxx sw/inc/swwait.hxx sw/source/core/doc/docdesc.cxx sw/source/core/edit/autofmt.cxx sw/source/core/edit/edtab.cxx sw/source/ui/app/docsh.cxx sw/source/ui/app/docsh2.cxx sw/source/ui/app/docshini.cxx sw/source/ui/app/swwait.cxx sw/source/ui/dbui/dbinsdlg.cxx sw/source/ui/dbui/dbmgr.cxx sw/source/ui/dochdl/swdtflvr.cxx sw/source/ui/lingu/hyp.cxx sw/source/ui/misc/glossary.cxx sw/source/ui/misc/redlndlg.cxx sw/source/ui/shells/annotsh.cxx sw/source/ui/shells/drawsh.cxx sw/source/ui/shells/drwtxtex.cxx sw/source/ui/shells/frmsh.cxx sw/source/ui/shells/textsh1.cxx sw/source/ui/uiview/view2.cxx sw/source/ui/uiview/viewsrch.cxx Change-Id: I332d9ef6c3ce3205608850f9caccfa7b83a54ef3 diff --git a/sw/inc/docsh.hxx b/sw/inc/docsh.hxx index 5f919cf..04471ea 100644 --- a/sw/inc/docsh.hxx +++ b/sw/inc/docsh.hxx @@ -262,12 +262,6 @@ public: sal_Int16 GetUpdateDocMode() const {return nUpdateDocMode;} - /** Activate wait cursor for all windows of this document - Optionally all dispatcher could be Locked - Usually locking should be done using the class: SwWait. */ - void EnterWait( bool bLockDispatcher ); - void LeaveWait( bool bLockDispatcher ); - void ToggleBrowserMode(sal_Bool bOn, SwView* pView); sal_uLong LoadStylesFromFile( const OUString& rURL, SwgReaderOption& rOpt, diff --git a/sw/inc/swwait.hxx b/sw/inc/swwait.hxx index 6e4f422..bdf620f 100644 --- a/sw/inc/swwait.hxx +++ b/sw/inc/swwait.hxx @@ -21,15 +21,28 @@ #include "swdllapi.h" +#include <boost/unordered_set.hpp> + class SwDocShell; +class SfxDispatcher; class SW_DLLPUBLIC SwWait { - SwDocShell &rDoc; - bool bLock; public: - SwWait( SwDocShell &rDocShell, bool bLockDispatcher ); + // Activate wait cursor for all windows of given document <rDocShell> + // Optional all dispatcher could be Locked + SwWait( + SwDocShell &rDocShell, + const bool bLockUnlockDispatcher ); ~SwWait(); + +private: + void EnterWaitAndLockDispatcher(); + void LeaveWaitAndUnlockDispatcher(); + + SwDocShell& mrDoc; + const bool mbLockUnlockDispatcher; + boost::unordered_set< SfxDispatcher* > mpLockedDispatchers; }; #endif diff --git a/sw/source/ui/app/swwait.cxx b/sw/source/ui/app/swwait.cxx index 683b825..9ac290e 100644 --- a/sw/source/ui/app/swwait.cxx +++ b/sw/source/ui/app/swwait.cxx @@ -17,47 +17,69 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <swwait.hxx> +#include <docsh.hxx> + #include <sfx2/viewfrm.hxx> #include <sfx2/dispatch.hxx> #include <vcl/window.hxx> -#include <docsh.hxx> -#include <swwait.hxx> -void SwDocShell::EnterWait( bool bLockDispatcher ) +SwWait::SwWait( + SwDocShell &rDocShell, + const bool bLockUnlockDispatcher ) + : mrDoc ( rDocShell ) + , mbLockUnlockDispatcher( bLockUnlockDispatcher ) + , mpLockedDispatchers() { - SfxViewFrame *pFrame = SfxViewFrame::GetFirst( this, sal_False ); + EnterWaitAndLockDispatcher(); +} + +SwWait::~SwWait() +{ + LeaveWaitAndUnlockDispatcher(); +} + +void SwWait::EnterWaitAndLockDispatcher() +{ + SfxViewFrame *pFrame = SfxViewFrame::GetFirst( &mrDoc, sal_False ); while ( pFrame ) { pFrame->GetWindow().EnterWait(); - if ( bLockDispatcher ) - pFrame->GetDispatcher()->Lock( sal_True ); - pFrame = SfxViewFrame::GetNext( *pFrame, this, sal_False ); + if ( mbLockUnlockDispatcher ) + { + // do not look already locked dispatchers + SfxDispatcher* pDispatcher = pFrame->GetDispatcher(); + if ( !pDispatcher->IsLocked() ) + { + pDispatcher->Lock( sal_True ); + mpLockedDispatchers.insert( pDispatcher ); + } + } + + pFrame = SfxViewFrame::GetNext( *pFrame, &mrDoc, sal_False ); } } -void SwDocShell::LeaveWait( bool bLockDispatcher ) +void SwWait::LeaveWaitAndUnlockDispatcher() { - SfxViewFrame *pFrame = SfxViewFrame::GetFirst( this, sal_False ); + SfxViewFrame *pFrame = SfxViewFrame::GetFirst( &mrDoc, sal_False ); while ( pFrame ) { pFrame->GetWindow().LeaveWait(); - if ( bLockDispatcher ) - pFrame->GetDispatcher()->Lock( sal_False ); - pFrame = SfxViewFrame::GetNext( *pFrame, this, sal_False ); - } -} - -SwWait::SwWait( SwDocShell &rDocShell, bool bLockDispatcher ) : - rDoc ( rDocShell ), - bLock( bLockDispatcher ) -{ - rDoc.EnterWait( bLock ); -} + if ( mbLockUnlockDispatcher ) + { + // only unlock dispatchers which had been locked + SfxDispatcher* pDispatcher = pFrame->GetDispatcher(); + if ( mpLockedDispatchers.find( pDispatcher ) != mpLockedDispatchers.end() ) + { + mpLockedDispatchers.erase( pDispatcher ); + pDispatcher->Lock( sal_False ); + } + } -SwWait::~SwWait() -{ - rDoc.LeaveWait( bLock ); + pFrame = SfxViewFrame::GetNext( *pFrame, &mrDoc, sal_False ); + } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/ui/dochdl/swdtflvr.cxx b/sw/source/ui/dochdl/swdtflvr.cxx index 82e93fb..d9fa3f3 100644 --- a/sw/source/ui/dochdl/swdtflvr.cxx +++ b/sw/source/ui/dochdl/swdtflvr.cxx @@ -1158,8 +1158,7 @@ bool SwTransferable::PasteData( TransferableDataHelper& rData, const Point* pPt, sal_Int8 nDropAction, sal_Bool bPasteSelection ) { - SwWait aWait( *rSh.GetView(). - GetDocShell(), false ); + SwWait aWait( *rSh.GetView().GetDocShell(), false ); boost::scoped_ptr<SwTrnsfrActionAndUndo> pAction; SwModule* pMod = SW_MOD();
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits