sw/inc/viewsh.hxx                           |    3 +++
 sw/source/core/doc/DocumentTimerManager.cxx |   10 +++++++---
 sw/source/core/frmedt/feshview.cxx          |    4 ++--
 sw/source/core/view/viewsh.cxx              |    3 +--
 sw/source/core/view/vnew.cxx                |    5 +++++
 sw/source/uibase/uiview/view2.cxx           |    2 +-
 6 files changed, 19 insertions(+), 8 deletions(-)

New commits:
commit 0d3d476b6af2acfd7dc334a80b94825e59cc8698
Author:     Michael Meeks <michael.me...@collabora.com>
AuthorDate: Thu Nov 22 12:48:17 2018 +0000
Commit:     Michael Meeks <michael.me...@collabora.com>
CommitDate: Fri Nov 23 00:16:21 2018 +0100

    Avoid busy-loop related to layout when dragging objects.
    
    Change-Id: I4fb437356bc154cfefc5958592ae5888e24d59c3
    Reviewed-on: https://gerrit.libreoffice.org/63804
    Tested-by: Jenkins
    Reviewed-by: Michael Meeks <michael.me...@collabora.com>
    (cherry picked from commit f19dfaf817556ba28d68c000f3561a2752635727)
    Reviewed-on: https://gerrit.libreoffice.org/63830

diff --git a/sw/inc/viewsh.hxx b/sw/inc/viewsh.hxx
index bf09c8118590..66382ecc216c 100644
--- a/sw/inc/viewsh.hxx
+++ b/sw/inc/viewsh.hxx
@@ -467,6 +467,9 @@ public:
     bool HasDrawView() const;
     void MakeDrawView();
 
+    // Are we dragging draw shapes around.
+    bool HasDrawViewDrag() const;
+
     // DrawView may be used at UI.
           SdrView *GetDrawView();
     const SdrView *GetDrawView() const { return 
const_cast<SwViewShell*>(this)->GetDrawView(); }
diff --git a/sw/source/core/doc/DocumentTimerManager.cxx 
b/sw/source/core/doc/DocumentTimerManager.cxx
index 7bd2e505a3a4..5d8c425dfd46 100644
--- a/sw/source/core/doc/DocumentTimerManager.cxx
+++ b/sw/source/core/doc/DocumentTimerManager.cxx
@@ -108,10 +108,14 @@ DocumentTimerManager::IdleJob 
DocumentTimerManager::GetNextIdleJob() const
                 return IdleJob::Grammar;
         }
 
-        for ( auto pLayout : m_rDoc.GetAllLayouts() )
+        // If we're dragging re-layout doesn't occur so avoid a busy loop.
+        if (!pShell->HasDrawViewDrag())
         {
-            if( pLayout->IsIdleFormat() )
-                return IdleJob::Layout;
+            for ( auto pLayout : m_rDoc.GetAllLayouts() )
+            {
+                if( pLayout->IsIdleFormat() )
+                    return IdleJob::Layout;
+            }
         }
 
         SwFieldUpdateFlags nFieldUpdFlag = 
m_rDoc.GetDocumentSettingManager().getFieldUpdateFlags(true);
diff --git a/sw/source/core/frmedt/feshview.cxx 
b/sw/source/core/frmedt/feshview.cxx
index 1d00cd578e29..ae1259ce55ca 100644
--- a/sw/source/core/frmedt/feshview.cxx
+++ b/sw/source/core/frmedt/feshview.cxx
@@ -720,7 +720,7 @@ void SwFEShell::BeginDrag( const Point* pPt, bool bIsShift)
 void SwFEShell::Drag( const Point *pPt, bool )
 {
     OSL_ENSURE( Imp()->HasDrawView(), "Drag without DrawView?" );
-    if ( Imp()->GetDrawView()->IsDragObj() )
+    if ( HasDrawViewDrag() )
     {
         ScrollTo( *pPt );
         Imp()->GetDrawView()->MovDragObj( *pPt );
@@ -772,7 +772,7 @@ void SwFEShell::EndDrag()
 void SwFEShell::BreakDrag()
 {
     OSL_ENSURE( Imp()->HasDrawView(), "BreakDrag without DrawView?" );
-    if ( Imp()->GetDrawView()->IsDragObj() )
+    if( HasDrawViewDrag() )
         Imp()->GetDrawView()->BrkDragObj();
     SetChainMarker();
 }
diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx
index 273692a86aa7..77ccf51f2cd4 100644
--- a/sw/source/core/view/viewsh.cxx
+++ b/sw/source/core/view/viewsh.cxx
@@ -698,8 +698,7 @@ bool SwViewShell::HasCharts() const
 
 void SwViewShell::LayoutIdle()
 {
-    if( !mpOpt->IsIdle() || !GetWin() ||
-        ( Imp()->HasDrawView() && Imp()->GetDrawView()->IsDragObj() ) )
+    if( !mpOpt->IsIdle() || !GetWin() || HasDrawViewDrag() )
         return;
 
     //No idle when printing is going on.
diff --git a/sw/source/core/view/vnew.cxx b/sw/source/core/view/vnew.cxx
index 2dd39f081668..5b386da0da16 100644
--- a/sw/source/core/view/vnew.cxx
+++ b/sw/source/core/view/vnew.cxx
@@ -367,6 +367,11 @@ void SwViewShell::MakeDrawView()
     Imp()->MakeDrawView( );
 }
 
+bool SwViewShell::HasDrawViewDrag() const
+{
+    return Imp()->HasDrawView() && Imp()->GetDrawView()->IsDragObj();
+}
+
 SdrView* SwViewShell::GetDrawView()
 {
     return Imp()->GetDrawView();
diff --git a/sw/source/uibase/uiview/view2.cxx 
b/sw/source/uibase/uiview/view2.cxx
index 534beec5cce6..f4222bf07eb4 100644
--- a/sw/source/uibase/uiview/view2.cxx
+++ b/sw/source/uibase/uiview/view2.cxx
@@ -804,7 +804,7 @@ void SwView::Execute(SfxRequest &rReq)
         break;
         case FN_ESCAPE:
         {
-            if ( m_pWrtShell->HasDrawView() && 
m_pWrtShell->GetDrawView()->IsDragObj() )
+            if ( m_pWrtShell->HasDrawViewDrag() )
             {
                 m_pWrtShell->BreakDrag();
                 m_pWrtShell->EnterSelFrameMode();
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to