include/svx/graphctl.hxx       |    2 ++
 svx/source/dialog/_contdlg.cxx |   10 ++++++++--
 svx/source/dialog/graphctl.cxx |   32 +++++++++++++++++++++++++++++---
 svx/source/dialog/imapdlg.cxx  |    3 +++
 4 files changed, 42 insertions(+), 5 deletions(-)

New commits:
commit 47ba511bf4fcad8502d3501bc16b07621e2ae6d8
Author: Michael Meeks <michael.me...@collabora.com>
Date:   Tue Sep 27 17:11:04 2016 +0100

    tdf#101827 - mend busy contour dialog.
    
    Previous impl. had an un-necessary timeout to update the screen constantly.
    
    Change-Id: I28ba50166530d516d299b9c873cf59577043bf82
    Reviewed-on: https://gerrit.libreoffice.org/29392
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Michael Meeks <michael.me...@collabora.com>
    (cherry picked from commit 1498c4f631e9c90b11dbdb18e8b094b90e143466)
    Reviewed-on: https://gerrit.libreoffice.org/29674
    Reviewed-by: jan iversen <j...@documentfoundation.org>
    Tested-by: jan iversen <j...@documentfoundation.org>

diff --git a/include/svx/graphctl.hxx b/include/svx/graphctl.hxx
index 1fb0411..0b4abde 100644
--- a/include/svx/graphctl.hxx
+++ b/include/svx/graphctl.hxx
@@ -52,6 +52,7 @@ class SVX_DLLPUBLIC GraphCtrl : public Control
     bool                bEditMode;
     bool                bSdrMode;
     bool                bAnim;
+    bool                mbInIdleUpdate;
 
                         DECL_LINK_TYPED( UpdateHdl, Idle*, void );
 
@@ -108,6 +109,7 @@ public:
     void                SetGraphSizeLink( const Link<GraphCtrl*,void>& rLink ) 
{ aGraphSizeLink = rLink; }
 
     void                SetUpdateLink( const Link<GraphCtrl*,void>& rLink ) { 
aUpdateLink = rLink; }
+    void                QueueIdleUpdate();
 
     virtual css::uno::Reference< css::accessibility::XAccessible > 
CreateAccessible() override;
 };
diff --git a/svx/source/dialog/_contdlg.cxx b/svx/source/dialog/_contdlg.cxx
index 33cb2cc..300e664 100644
--- a/svx/source/dialog/_contdlg.cxx
+++ b/svx/source/dialog/_contdlg.cxx
@@ -101,8 +101,8 @@ void SvxContourDlg::SetSuperClass( SvxSuperContourDlg& 
rSuperClass )
 }
 
 tools::PolyPolygon SvxContourDlg::CreateAutoContour( const Graphic& rGraphic,
-                                              const Rectangle* pRect,
-                                              const sal_uIntPtr nFlags )
+                                                     const Rectangle* pRect,
+                                                     const sal_uIntPtr nFlags )
 {
     Bitmap  aBmp;
     sal_uIntPtr nContourFlags = XOUTBMP_CONTOUR_HORZ;
@@ -533,6 +533,8 @@ IMPL_LINK_TYPED( SvxSuperContourDlg, Tbx1ClickHdl, 
ToolBox*, pTbx, void )
 
         m_pContourWnd->SetPipetteMode( bPipette );
     }
+    Invalidate();
+    m_pContourWnd->QueueIdleUpdate();
 }
 
 IMPL_LINK_TYPED( SvxSuperContourDlg, MousePosHdl, GraphCtrl*, pWnd, void )
@@ -587,6 +589,7 @@ IMPL_LINK_NOARG_TYPED(SvxSuperContourDlg, UpdateHdl, Idle 
*, void)
     }
 
     GetBindings().Invalidate( SID_CONTOUR_EXEC );
+    m_pContourWnd->QueueIdleUpdate();
 }
 
 IMPL_LINK_NOARG_TYPED(SvxSuperContourDlg, CreateHdl, Idle *, void)
@@ -729,6 +732,9 @@ IMPL_LINK_TYPED( SvxSuperContourDlg, WorkplaceClickHdl, 
ContourWindow&, rWnd, vo
     m_pTbx1->CheckItem(mnWorkSpaceId, false);
     m_pTbx1->CheckItem(mnSelectId);
     rWnd.SetWorkplaceMode( false );
+
+    m_pContourWnd->QueueIdleUpdate();
+    Invalidate();
 }
 
 IMPL_LINK_NOARG_TYPED(SvxSuperContourDlg, MiscHdl, LinkParamNone*, void)
diff --git a/svx/source/dialog/graphctl.cxx b/svx/source/dialog/graphctl.cxx
index cccbef8..4685a2f 100644
--- a/svx/source/dialog/graphctl.cxx
+++ b/svx/source/dialog/graphctl.cxx
@@ -52,6 +52,7 @@ void GraphCtrlUserCall::Changed( const SdrObject& rObj, 
SdrUserCallType eType, c
         default:
         break;
     }
+    rWin.QueueIdleUpdate();
 }
 
 GraphCtrl::GraphCtrl( vcl::Window* pParent, WinBits nStyle ) :
@@ -124,6 +125,8 @@ void GraphCtrl::SetWinStyle( WinBits nWinBits )
 
     if ( bSdrMode )
         InitSdrModel();
+
+    QueueIdleUpdate();
 }
 
 void GraphCtrl::InitSdrModel()
@@ -203,6 +206,7 @@ void GraphCtrl::SetGraphic( const Graphic& rGraphic, bool 
bNewModel )
 
     Resize();
     Invalidate();
+    QueueIdleUpdate();
 }
 
 void GraphCtrl::Resize()
@@ -282,14 +286,17 @@ void GraphCtrl::Paint( vcl::RenderContext& 
rRenderContext, const Rectangle& rRec
 
 void GraphCtrl::SdrObjChanged( const SdrObject&  )
 {
+    QueueIdleUpdate();
 }
 
 void GraphCtrl::SdrObjCreated( const SdrObject& )
 {
+    QueueIdleUpdate();
 }
 
 void GraphCtrl::MarkListHasChanged()
 {
+    QueueIdleUpdate();
 }
 
 void GraphCtrl::KeyInput( const KeyEvent& rKEvt )
@@ -602,6 +609,8 @@ void GraphCtrl::KeyInput( const KeyEvent& rKEvt )
         Control::KeyInput( rKEvt );
     else
         ReleaseMouse();
+
+    QueueIdleUpdate();
 }
 
 void GraphCtrl::MouseButtonDown( const MouseEvent& rMEvt )
@@ -641,6 +650,8 @@ void GraphCtrl::MouseButtonDown( const MouseEvent& rMEvt )
     }
     else
         Control::MouseButtonDown( rMEvt );
+
+    QueueIdleUpdate();
 }
 
 void GraphCtrl::MouseMove(const MouseEvent& rMEvt)
@@ -672,6 +683,8 @@ void GraphCtrl::MouseMove(const MouseEvent& rMEvt)
 
         aMousePosLink.Call( this );
     }
+
+    QueueIdleUpdate();
 }
 
 void GraphCtrl::MouseButtonUp(const MouseEvent& rMEvt)
@@ -688,6 +701,8 @@ void GraphCtrl::MouseButtonUp(const MouseEvent& rMEvt)
     }
     else
         Control::MouseButtonUp( rMEvt );
+
+    QueueIdleUpdate();
 }
 
 SdrObject* GraphCtrl::GetSelectedSdrObject() const
@@ -716,6 +731,8 @@ void GraphCtrl::SetEditMode( const bool _bEditMode )
     }
     else
         bEditMode = false;
+
+    QueueIdleUpdate();
 }
 
 void GraphCtrl::SetPolyEditMode( const sal_uInt16 _nPolyEdit )
@@ -727,6 +744,8 @@ void GraphCtrl::SetPolyEditMode( const sal_uInt16 
_nPolyEdit )
     }
     else
         nPolyEdit = 0;
+
+    QueueIdleUpdate();
 }
 
 void GraphCtrl::SetObjKind( const SdrObjKind _eObjKind )
@@ -740,15 +759,22 @@ void GraphCtrl::SetObjKind( const SdrObjKind _eObjKind )
     }
     else
         eObjKind = OBJ_NONE;
+
+    QueueIdleUpdate();
 }
 
-IMPL_LINK_TYPED( GraphCtrl, UpdateHdl, Idle*, pTimer, void )
+IMPL_LINK_TYPED( GraphCtrl, UpdateHdl, Idle *, , void )
 {
+    mbInIdleUpdate = true;
     aUpdateLink.Call( this );
-
-    pTimer->Start();
+    mbInIdleUpdate = false;
 }
 
+void GraphCtrl::QueueIdleUpdate()
+{
+    if (!mbInIdleUpdate)
+        aUpdateIdle.Start();
+}
 
 css::uno::Reference< css::accessibility::XAccessible > 
GraphCtrl::CreateAccessible()
 {
diff --git a/svx/source/dialog/imapdlg.cxx b/svx/source/dialog/imapdlg.cxx
index 2df979a..02cef6b 100644
--- a/svx/source/dialog/imapdlg.cxx
+++ b/svx/source/dialog/imapdlg.cxx
@@ -754,6 +754,7 @@ IMPL_LINK_NOARG_TYPED(SvxIMapDlg, UpdateHdl, Idle *, void)
     pOwnData->aUpdateTargetList.clear();
 
     GetBindings().Invalidate( SID_IMAP_EXEC );
+    pIMapWnd->QueueIdleUpdate();
 }
 
 IMPL_LINK_TYPED( SvxIMapDlg, StateHdl, GraphCtrl*, pWnd, void )
@@ -804,6 +805,8 @@ IMPL_LINK_TYPED( SvxIMapDlg, StateHdl, GraphCtrl*, pWnd, 
void )
         m_pTbxIMapDlg1->CheckItem( mnPolyInsertId, false );
         pWnd->SetPolyEditMode( 0 );
     }
+
+    pIMapWnd->QueueIdleUpdate();
 }
 
 IMPL_LINK_NOARG_TYPED(SvxIMapDlg, MiscHdl, LinkParamNone*, void)
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to