diff options
-rw-r--r-- | include/vcl/weld.hxx | 6 | ||||
-rw-r--r-- | sc/source/ui/view/viewfun2.cxx | 12 | ||||
-rw-r--r-- | sc/source/ui/view/viewfunc.cxx | 3 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkinst.cxx | 12 |
4 files changed, 23 insertions, 10 deletions
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 0ecea6e3fb54..ee26ea3423a7 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -287,6 +287,12 @@ public: virtual void freeze() = 0; virtual void thaw() = 0; + /* push/pop busy mouse cursor state + + bBusy of true to push a busy state onto the stack and false + to pop it off, calls to this should balance. + + see weld::WaitObject */ virtual void set_busy_cursor(bool bBusy) = 0; virtual void queue_resize() = 0; diff --git a/sc/source/ui/view/viewfun2.cxx b/sc/source/ui/view/viewfun2.cxx index 43021d09c02d..6182277d3833 100644 --- a/sc/source/ui/view/viewfun2.cxx +++ b/sc/source/ui/view/viewfun2.cxx @@ -38,7 +38,6 @@ #include <svx/svdview.hxx> #include <vcl/svapp.hxx> #include <vcl/weld.hxx> -#include <vcl/waitobj.hxx> #include <osl/diagnose.h> #include <viewfunc.hxx> @@ -895,8 +894,7 @@ void ScViewFunc::EnterBlock( const OUString& rString, const EditTextObject* pDat } // Insert via PasteFromClip - - WaitObject aWait( GetFrameWin() ); + weld::WaitObject aWait(GetViewData().GetDialogParent()); ScAddress aPos( nCol, nRow, nTab ); @@ -2347,7 +2345,7 @@ void ScViewFunc::InsertTables(std::vector<OUString>& aNames, SCTAB nTab, if (bRecord && !rDoc.IsUndoEnabled()) bRecord = false; - WaitObject aWait( GetFrameWin() ); + weld::WaitObject aWait(GetViewData().GetDialogParent()); if (bRecord) { @@ -2388,7 +2386,7 @@ bool ScViewFunc::AppendTable( const OUString& rName, bool bRecord ) if (bRecord && !rDoc.IsUndoEnabled()) bRecord = false; - WaitObject aWait( GetFrameWin() ); + weld::WaitObject aWait(GetViewData().GetDialogParent()); if (bRecord) rDoc.BeginDrawUndo(); // InsertTab creates a SdrUndoNewPage @@ -2435,7 +2433,7 @@ void ScViewFunc::DeleteTables( const SCTAB nTab, SCTAB nSheets ) ScDocument& rDoc = pDocSh->GetDocument(); bool bVbaEnabled = rDoc.IsInVBAMode(); SCTAB nNewTab = nTab; - WaitObject aWait( GetFrameWin() ); + weld::WaitObject aWait(GetViewData().GetDialogParent()); while ( nNewTab > 0 && !rDoc.IsVisible( nNewTab ) ) --nNewTab; @@ -2474,7 +2472,7 @@ bool ScViewFunc::DeleteTables(const vector<SCTAB> &TheTabs, bool bRecord ) ScDocument& rDoc = pDocSh->GetDocument(); bool bVbaEnabled = rDoc.IsInVBAMode(); SCTAB nNewTab = TheTabs.front(); - WaitObject aWait( GetFrameWin() ); + weld::WaitObject aWait(GetViewData().GetDialogParent()); if (bRecord && !rDoc.IsUndoEnabled()) bRecord = false; if ( bVbaEnabled ) diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx index bef26c640673..e772f906303f 100644 --- a/sc/source/ui/view/viewfunc.cxx +++ b/sc/source/ui/view/viewfunc.cxx @@ -34,7 +34,6 @@ #include <vcl/svapp.hxx> #include <vcl/weld.hxx> #include <vcl/virdev.hxx> -#include <vcl/waitobj.hxx> #include <stdlib.h> #include <unotools/charclass.hxx> #include <vcl/uitest/logger.hxx> @@ -1830,7 +1829,7 @@ void ScViewFunc::DeleteMulti( bool bRows ) // proceed - WaitObject aWait( GetFrameWin() ); // important for TrackFormulas in UpdateReference + weld::WaitObject aWait(GetViewData().GetDialogParent()); // important for TrackFormulas in UpdateReference ResetAutoSpellForContentChange(); diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 10df2ee6e317..5ee5a9bf0bb3 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -2109,6 +2109,7 @@ protected: private: bool m_bTakeOwnership; bool m_bDraggedOver; + int m_nWaitCount; sal_uInt16 m_nLastMouseButton; sal_uInt16 m_nLastMouseClicks; int m_nPressedButton; @@ -2480,6 +2481,7 @@ public: , m_pBuilder(pBuilder) , m_bTakeOwnership(bTakeOwnership) , m_bDraggedOver(false) + , m_nWaitCount(0) , m_nLastMouseButton(0) , m_nLastMouseClicks(0) , m_nPressedButton(-1) @@ -3021,7 +3023,15 @@ public: virtual void set_busy_cursor(bool bBusy) override { - set_cursor(m_pWidget, bBusy ? "progress" : nullptr); + if (bBusy) + ++m_nWaitCount; + else + --m_nWaitCount; + if (m_nWaitCount == 1) + set_cursor(m_pWidget, "progress"); + else if (m_nWaitCount == 0) + set_cursor(m_pWidget, nullptr); + assert (m_nWaitCount >= 0); } virtual void queue_resize() override |