openoffice-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From a..@apache.org
Subject svn commit: r1522906 [1/2] - in /openoffice/branches/alg/aw080/main: chart2/source/controller/drawinglayer/ chart2/source/controller/inc/ chart2/source/controller/main/ filter/inc/filter/msfilter/ reportdesign/inc/ reportdesign/source/core/inc/ reportd...
Date Fri, 13 Sep 2013 12:52:59 GMT
Author: alg
Date: Fri Sep 13 12:52:57 2013
New Revision: 1522906

URL: http://svn.apache.org/r1522906
Log:
selection rework, fixes for virtual function warnings

Modified:
    openoffice/branches/alg/aw080/main/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx
    openoffice/branches/alg/aw080/main/chart2/source/controller/inc/DrawViewWrapper.hxx
    openoffice/branches/alg/aw080/main/chart2/source/controller/main/SelectionHelper.cxx
    openoffice/branches/alg/aw080/main/filter/inc/filter/msfilter/escherex.hxx
    openoffice/branches/alg/aw080/main/reportdesign/inc/RptModel.hxx
    openoffice/branches/alg/aw080/main/reportdesign/source/core/inc/ReportUndoFactory.hxx
    openoffice/branches/alg/aw080/main/reportdesign/source/core/sdr/ReportUndoFactory.cxx
    openoffice/branches/alg/aw080/main/reportdesign/source/core/sdr/RptModel.cxx
    openoffice/branches/alg/aw080/main/reportdesign/source/ui/report/SectionView.cxx
    openoffice/branches/alg/aw080/main/reportdesign/source/ui/report/ViewsWindow.cxx
    openoffice/branches/alg/aw080/main/sc/source/ui/view/tabview5.cxx
    openoffice/branches/alg/aw080/main/sc/source/ui/view/tabvwshb.cxx
    openoffice/branches/alg/aw080/main/sd/source/ui/animations/CustomAnimationPane.cxx
    openoffice/branches/alg/aw080/main/sd/source/ui/animations/motionpathtag.cxx
    openoffice/branches/alg/aw080/main/sd/source/ui/annotations/annotationmanager.cxx
    openoffice/branches/alg/aw080/main/sd/source/ui/annotations/annotationtag.cxx
    openoffice/branches/alg/aw080/main/sd/source/ui/func/fucopy.cxx
    openoffice/branches/alg/aw080/main/sd/source/ui/func/fusel.cxx
    openoffice/branches/alg/aw080/main/sd/source/ui/func/futext.cxx
    openoffice/branches/alg/aw080/main/sd/source/ui/func/smarttag.cxx
    openoffice/branches/alg/aw080/main/sd/source/ui/table/tableobjectbar.cxx
    openoffice/branches/alg/aw080/main/sd/source/ui/unoidl/unopage.cxx
    openoffice/branches/alg/aw080/main/sd/source/ui/view/drviews1.cxx
    openoffice/branches/alg/aw080/main/sd/source/ui/view/sdwindow.cxx
    openoffice/branches/alg/aw080/main/sd/source/ui/view/viewoverlaymanager.cxx
    openoffice/branches/alg/aw080/main/svx/inc/svx/sdrselection.hxx
    openoffice/branches/alg/aw080/main/svx/inc/svx/svddrgv.hxx
    openoffice/branches/alg/aw080/main/svx/inc/svx/svdhdl.hxx
    openoffice/branches/alg/aw080/main/svx/inc/svx/svdmrkv.hxx
    openoffice/branches/alg/aw080/main/svx/source/engine3d/view3d.cxx
    openoffice/branches/alg/aw080/main/svx/source/svdraw/sdrselection.cxx
    openoffice/branches/alg/aw080/main/svx/source/svdraw/svddrgv.cxx
    openoffice/branches/alg/aw080/main/svx/source/svdraw/svdedxv.cxx
    openoffice/branches/alg/aw080/main/svx/source/svdraw/svdglev.cxx
    openoffice/branches/alg/aw080/main/svx/source/svdraw/svdhdl.cxx
    openoffice/branches/alg/aw080/main/svx/source/svdraw/svdmrkv.cxx
    openoffice/branches/alg/aw080/main/svx/source/svdraw/svdmrkv1.cxx
    openoffice/branches/alg/aw080/main/svx/source/svdraw/svdpagv.cxx
    openoffice/branches/alg/aw080/main/svx/source/svdraw/svdpoev.cxx
    openoffice/branches/alg/aw080/main/svx/source/toolbars/fontworkbar.cxx
    openoffice/branches/alg/aw080/main/svx/source/unodraw/unopage.cxx
    openoffice/branches/alg/aw080/main/sw/inc/dcontact.hxx
    openoffice/branches/alg/aw080/main/sw/source/core/draw/dcontact.cxx
    openoffice/branches/alg/aw080/main/sw/source/core/draw/dflyobj.cxx
    openoffice/branches/alg/aw080/main/sw/source/core/inc/dflyobj.hxx
    openoffice/branches/alg/aw080/main/sw/source/filter/ww8/attributeoutputbase.hxx
    openoffice/branches/alg/aw080/main/sw/source/filter/ww8/docxattributeoutput.cxx
    openoffice/branches/alg/aw080/main/sw/source/filter/ww8/docxattributeoutput.hxx
    openoffice/branches/alg/aw080/main/sw/source/filter/ww8/rtfsdrexport.cxx
    openoffice/branches/alg/aw080/main/sw/source/filter/ww8/rtfsdrexport.hxx
    openoffice/branches/alg/aw080/main/sw/source/filter/ww8/wrtw8num.cxx

Modified: openoffice/branches/alg/aw080/main/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx (original)
+++ openoffice/branches/alg/aw080/main/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx Fri Sep 13 12:52:57 2013
@@ -220,17 +220,12 @@ SdrPageView* DrawViewWrapper::GetPageVie
 };
 
 //virtual
-void DrawViewWrapper::SetMarkHandles()
+void DrawViewWrapper::CreateMarkHandles(SdrHdlList& rTarget)
 {
-    // hack for chart: It creates ominous own handles, and that by directly manipulating
-    // the normally not accessible maViewHandleList. For now, allow access to it by casting
-    // it to non-const
-    const SdrHdlList& rHdlList = GetHdlList();
-
-    if( m_pMarkHandleProvider && m_pMarkHandleProvider->getMarkHandles( const_cast< SdrHdlList& >(rHdlList) ) )
+    if( m_pMarkHandleProvider && m_pMarkHandleProvider->getMarkHandles( rTarget ) )
         return;
     else
-        SdrView::SetMarkHandles();
+        SdrView::CreateMarkHandles(rTarget);
 }
 
 SdrObject* DrawViewWrapper::getHitObject( const basegfx::B2DPoint& rPnt ) const

Modified: openoffice/branches/alg/aw080/main/chart2/source/controller/inc/DrawViewWrapper.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/chart2/source/controller/inc/DrawViewWrapper.hxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/chart2/source/controller/inc/DrawViewWrapper.hxx (original)
+++ openoffice/branches/alg/aw080/main/chart2/source/controller/inc/DrawViewWrapper.hxx Fri Sep 13 12:52:57 2013
@@ -48,6 +48,10 @@ public:
 
 class DrawViewWrapper : public E3dView
 {
+private:
+    //fill list of selection handles
+    virtual void CreateMarkHandles(SdrHdlList& rTarget);
+
 public:
 	DrawViewWrapper(SdrModel& rModel, OutputDevice* pOut, bool bPaintPageForEditMode);
 	virtual ~DrawViewWrapper();
@@ -59,9 +63,6 @@ public:
     void attachParentReferenceDevice(
         const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > & xChartModel );
 
-    //fill list of selection handles 'maViewHandleList'
-    virtual void SetMarkHandles();
-
     SdrPageView*    GetPageView() const;
 
     SdrObject* getHitObject( const basegfx::B2DPoint& rPnt ) const;

Modified: openoffice/branches/alg/aw080/main/chart2/source/controller/main/SelectionHelper.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/chart2/source/controller/main/SelectionHelper.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/chart2/source/controller/main/SelectionHelper.cxx (original)
+++ openoffice/branches/alg/aw080/main/chart2/source/controller/main/SelectionHelper.cxx Fri Sep 13 12:52:57 2013
@@ -622,7 +622,6 @@ bool SelectionHelper::getMarkHandles( Sd
     //that object should be used to create handles from
     if( m_pMarkObj && m_pMarkObj != m_pSelectedObj)
     {
-        rHdlList.Clear();
 		SdrPathObj* pSdrPathObj = dynamic_cast< SdrPathObj* >(m_pMarkObj);
         
 		if( pSdrPathObj )
@@ -648,8 +647,6 @@ bool SelectionHelper::getMarkHandles( Sd
     //@todo:
     //add and document good marking defaults ...
 
-    rHdlList.Clear();
-
     SdrObject* pObj = m_pSelectedObj;
     if(!pObj)
         return false;

Modified: openoffice/branches/alg/aw080/main/filter/inc/filter/msfilter/escherex.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/filter/inc/filter/msfilter/escherex.hxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/filter/inc/filter/msfilter/escherex.hxx (original)
+++ openoffice/branches/alg/aw080/main/filter/inc/filter/msfilter/escherex.hxx Fri Sep 13 12:52:57 2013
@@ -1568,7 +1568,7 @@ public:
 				// ein ESCHER_Sp wird geschrieben ( Ein ESCHER_DgContainer muss dazu geoeffnet sein !!)
 		virtual void AddShape( sal_uInt32 nShpInstance, sal_uInt32 nFlagIds, sal_uInt32 nShapeID = 0 );
 
-		virtual void Commit( 
+        virtual void Commit( 
             EscherPropertyContainer& rProps, 
             const basegfx::B2DRange& rObjectRange);
 

Modified: openoffice/branches/alg/aw080/main/reportdesign/inc/RptModel.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/reportdesign/inc/RptModel.hxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/reportdesign/inc/RptModel.hxx (original)
+++ openoffice/branches/alg/aw080/main/reportdesign/inc/RptModel.hxx Fri Sep 13 12:52:57 2013
@@ -63,10 +63,10 @@ public:
     OReportModel(::reportdesign::OReportDefinition* _pReportDefinition);
     virtual ~OReportModel();
 
-	virtual void        SetChanged(sal_Bool bFlg = sal_True);
+	virtual void        SetChanged(bool bFlg = true);
 	virtual SdrPage*    AllocPage(bool bMasterPage);
 	virtual Window*     GetCurDocViewWin();
-    virtual SdrPage*    RemovePage(sal_uInt16 nPgNum);
+    virtual SdrPage*    RemovePage(sal_uInt32 nPgNum);
     /** returns the numbering type that is used to format page fields in drawing shapes */
 	virtual SvxNumType  GetPageNumType() const;
 

Modified: openoffice/branches/alg/aw080/main/reportdesign/source/core/inc/ReportUndoFactory.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/reportdesign/source/core/inc/ReportUndoFactory.hxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/reportdesign/source/core/inc/ReportUndoFactory.hxx (original)
+++ openoffice/branches/alg/aw080/main/reportdesign/source/core/inc/ReportUndoFactory.hxx Fri Sep 13 12:52:57 2013
@@ -58,8 +58,8 @@ namespace rptui
 	    virtual SdrUndoAction* CreateUndoObjectSetText( SdrObject& rNewObj, sal_Int32 nText );
 
 	    // layer
-	    virtual SdrUndoAction* CreateUndoNewLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel);
-	    virtual SdrUndoAction* CreateUndoDeleteLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel);
+	    virtual SdrUndoAction* CreateUndoNewLayer(sal_uInt32 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel);
+	    virtual SdrUndoAction* CreateUndoDeleteLayer(sal_uInt32 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel);
 //	    virtual SdrUndoAction* CreateUndoMoveLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel, sal_uInt16 nNeuPos1);
 
 	    // page

Modified: openoffice/branches/alg/aw080/main/reportdesign/source/core/sdr/ReportUndoFactory.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/reportdesign/source/core/sdr/ReportUndoFactory.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/reportdesign/source/core/sdr/ReportUndoFactory.cxx (original)
+++ openoffice/branches/alg/aw080/main/reportdesign/source/core/sdr/ReportUndoFactory.cxx Fri Sep 13 12:52:57 2013
@@ -124,12 +124,12 @@ SdrUndoAction* OReportUndoFactory::Creat
 }
 
 // layer
-SdrUndoAction* OReportUndoFactory::CreateUndoNewLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel)
+SdrUndoAction* OReportUndoFactory::CreateUndoNewLayer(sal_uInt32 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel)
 {
 	return m_pUndoFactory->CreateUndoNewLayer( nLayerNum, rNewLayerAdmin, rNewModel );
 }
 
-SdrUndoAction* OReportUndoFactory::CreateUndoDeleteLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel)
+SdrUndoAction* OReportUndoFactory::CreateUndoDeleteLayer(sal_uInt32 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel)
 {
 	return m_pUndoFactory->CreateUndoDeleteLayer( nLayerNum, rNewLayerAdmin, rNewModel );
 }

Modified: openoffice/branches/alg/aw080/main/reportdesign/source/core/sdr/RptModel.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/reportdesign/source/core/sdr/RptModel.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/reportdesign/source/core/sdr/RptModel.cxx (original)
+++ openoffice/branches/alg/aw080/main/reportdesign/source/core/sdr/RptModel.cxx Fri Sep 13 12:52:57 2013
@@ -100,7 +100,7 @@ SdrPage* OReportModel::AllocPage(bool /*
 
 //----------------------------------------------------------------------------
 
-void OReportModel::SetChanged( sal_Bool bChanged )
+void OReportModel::SetChanged( bool bChanged )
 {
 	SdrModel::SetChanged( bChanged );
 	SetModified( bChanged );
@@ -125,7 +125,7 @@ void OReportModel::SetModified(sal_Bool 
 		m_pController->setModified(_bModified);
 }
 // -----------------------------------------------------------------------------
-SdrPage* OReportModel::RemovePage(sal_uInt16 nPgNum)
+SdrPage* OReportModel::RemovePage(sal_uInt32 nPgNum)
 {
     OReportPage* pPage = dynamic_cast<OReportPage*>(SdrModel::RemovePage(nPgNum));
     //if ( pPage )

Modified: openoffice/branches/alg/aw080/main/reportdesign/source/ui/report/SectionView.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/reportdesign/source/ui/report/SectionView.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/reportdesign/source/ui/report/SectionView.cxx (original)
+++ openoffice/branches/alg/aw080/main/reportdesign/source/ui/report/SectionView.cxx Fri Sep 13 12:52:57 2013
@@ -157,13 +157,15 @@ void OSectionView::Notify( SfxBroadcaste
     {
         const SdrObject* pObj = pSdrHint->GetSdrHintObject();
         const SdrHintKind eKind = pSdrHint->GetSdrHintKind();
-        // check for change of selected object
-        if((HINT_OBJCHG_MOVE == eKind || HINT_OBJCHG_RESIZE == eKind || HINT_OBJCHG_ATTR == eKind) 
-            && pObj && IsObjMarked(*pObj))
-        {
-            SetMarkHandles();
-        }
-	    else if ( eKind == HINT_OBJREMOVED )
+        // TTTT: Should be handled by Selection::Notify now
+        //// check for change of selected object
+        //if((HINT_OBJCHG_MOVE == eKind || HINT_OBJCHG_RESIZE == eKind || HINT_OBJCHG_ATTR == eKind) 
+        //    && pObj && IsObjMarked(*pObj))
+        //{
+        //    RecreateAllMarkHandles();
+        //}
+	    //else
+            if ( eKind == HINT_OBJREMOVED )
         {
 		    ObjectRemovedInAliveMode(pObj);
     }

Modified: openoffice/branches/alg/aw080/main/reportdesign/source/ui/report/ViewsWindow.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/reportdesign/source/ui/report/ViewsWindow.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/reportdesign/source/ui/report/ViewsWindow.cxx (original)
+++ openoffice/branches/alg/aw080/main/reportdesign/source/ui/report/ViewsWindow.cxx Fri Sep 13 12:52:57 2013
@@ -953,7 +953,7 @@ void OViewsWindow::alignMarkedObjects(sa
             }
 		}
 
-        pView->SetMarkHandles();
+        pView->RecreateAllMarkHandles();
     }
 }
 // -----------------------------------------------------------------------------
@@ -1788,7 +1788,7 @@ void OViewsWindow::handleKey(const KeyCo
 			    }
 		    }
 
-            rView.SetMarkHandles();
+            rView.RecreateAllMarkHandles();
 	    }
     }
 }

Modified: openoffice/branches/alg/aw080/main/sc/source/ui/view/tabview5.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sc/source/ui/view/tabview5.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sc/source/ui/view/tabview5.cxx (original)
+++ openoffice/branches/alg/aw080/main/sc/source/ui/view/tabview5.cxx Fri Sep 13 12:52:57 2013
@@ -485,7 +485,7 @@ void ScTabView::UpdateAnchorHandles()
 {
 	if ( pDrawView )
 	{
-		pDrawView->SetMarkHandles();
+		pDrawView->RecreateAllMarkHandles();
 	}
 }
 

Modified: openoffice/branches/alg/aw080/main/sc/source/ui/view/tabvwshb.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sc/source/ui/view/tabvwshb.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sc/source/ui/view/tabvwshb.cxx (original)
+++ openoffice/branches/alg/aw080/main/sc/source/ui/view/tabvwshb.cxx Fri Sep 13 12:52:57 2013
@@ -225,7 +225,8 @@ sal_Bool ScTabViewShell::ActivateObject(
     // #i118524# refresh handles to suppress for activated OLE
     if(GetSdrView())
     {
-        GetSdrView()->forceSelectionChange();
+        // TTTT: Is this needed? Check for it...
+        GetSdrView()->handleSelectionChange();
     }
 	//!	SetDocumentName sollte schon im Sfx passieren ???
     //TODO/LATER: how "SetDocumentName"?

Modified: openoffice/branches/alg/aw080/main/sd/source/ui/animations/CustomAnimationPane.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sd/source/ui/animations/CustomAnimationPane.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sd/source/ui/animations/CustomAnimationPane.cxx (original)
+++ openoffice/branches/alg/aw080/main/sd/source/ui/animations/CustomAnimationPane.cxx Fri Sep 13 12:52:57 2013
@@ -1030,7 +1030,7 @@ void CustomAnimationPane::updateMotionPa
 
 	if( bChanges && pView )
 	{
-		pView->SetMarkHandles();
+		pView->RecreateAllMarkHandles();
 	}
 }
 

Modified: openoffice/branches/alg/aw080/main/sd/source/ui/animations/motionpathtag.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sd/source/ui/animations/motionpathtag.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sd/source/ui/animations/motionpathtag.cxx (original)
+++ openoffice/branches/alg/aw080/main/sd/source/ui/animations/motionpathtag.cxx Fri Sep 13 12:52:57 2013
@@ -459,7 +459,7 @@ void MotionPathTag::MovePath( double fDX
     {
         mpPathObj->setSdrObjectTransformation(basegfx::tools::createTranslateB2DHomMatrix(fDX, fDY) * mpPathObj->getSdrObjectTransformation());
         // sdr::legacy::MoveSdrObject(*mpPathObj, Size( nDX, nDY ) );
-        mrView.SetMarkHandles(); // TTTT: Neded?
+        mrView.RecreateAllMarkHandles(); // TTTT: Neded?
     }
 }
 
@@ -517,7 +517,7 @@ bool MotionPathTag::MouseButtonDown( con
 				if(0xffffffff != nInsPointNum) 
 				{
 					mrView.MarkPoints(0, true); // unmarkall
-					mrView.SetMarkHandles();
+					mrView.RecreateAllMarkHandles();
 
 					bool bRet = mrView.BegDragObj(aMDPos, mrView.GetHdlByIndex(nInsPointNum+1), 0.0, new PathDragObjOwn( mrView ) );
 
@@ -1023,7 +1023,7 @@ void MotionPathTag::disposing()
 	{
 		SdrPathObj* pPathObj = mpPathObj;
 		mpPathObj = 0;
-		mrView.SetMarkHandles();
+		mrView.RecreateAllMarkHandles();
 		deleteSdrObjectSafeAndClearPointer(pPathObj);
 	}
 
@@ -1071,7 +1071,7 @@ void MotionPathTag::DeleteMarkedPoints()
 				}
 
 				mrView.MarkPoints(0, true); // unmarkall
-				mrView.SetMarkHandles();
+				mrView.RecreateAllMarkHandles();
 			}
 		}
 	}
@@ -1120,7 +1120,7 @@ void MotionPathTag::SetMarkedSegmentsKin
 			if(sdr::PolyPolygonEditor::SetSegmentsKind( aPolyPolygon, eKind, maSelectedPoints ) )
 			{
 				mpPathObj->setB2DPolyPolygonInObjectCoordinates(aPolyPolygon);
-				mrView.SetMarkHandles();
+				mrView.RecreateAllMarkHandles();
 			}
 		}
 	}
@@ -1172,7 +1172,7 @@ void MotionPathTag::SetMarkedPointsSmoot
 			if(sdr::PolyPolygonEditor::SetPointsSmooth( aPolyPolygon, eFlags, maSelectedPoints ) )
 			{
 				mpPathObj->setB2DPolyPolygonInObjectCoordinates(aPolyPolygon);
-				mrView.SetMarkHandles();
+				mrView.RecreateAllMarkHandles();
 			}
 		}
 	}
@@ -1205,7 +1205,7 @@ void SAL_CALL MotionPathTag::changesOccu
 		mpEffect->updateSdrPathObjFromPath( *mpPathObj );
 		mbInUpdatePath = false;
 		updatePathAttributes();
-		mrView.SetMarkHandles();
+		mrView.RecreateAllMarkHandles();
 	}
 }
 

Modified: openoffice/branches/alg/aw080/main/sd/source/ui/annotations/annotationmanager.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sd/source/ui/annotations/annotationmanager.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sd/source/ui/annotations/annotationmanager.cxx (original)
+++ openoffice/branches/alg/aw080/main/sd/source/ui/annotations/annotationmanager.cxx Fri Sep 13 12:52:57 2013
@@ -856,7 +856,7 @@ IMPL_LINK(AnnotationManagerImpl,UpdateTa
         CreateTags();
         
     if(  mrBase.GetDrawView() )
-        static_cast< ::sd::View* >( mrBase.GetDrawView() )->SetMarkHandles();        
+        static_cast< ::sd::View* >( mrBase.GetDrawView() )->RecreateAllMarkHandles();        
 
     invalidateSlots();
     

Modified: openoffice/branches/alg/aw080/main/sd/source/ui/annotations/annotationtag.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sd/source/ui/annotations/annotationtag.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sd/source/ui/annotations/annotationtag.cxx (original)
+++ openoffice/branches/alg/aw080/main/sd/source/ui/annotations/annotationtag.cxx Fri Sep 13 12:52:57 2013
@@ -437,7 +437,7 @@ void AnnotationTag::Move( double fDX, do
         if( mrManager.GetDoc()->IsUndoEnabled() )
             mrManager.GetDoc()->EndUndo();
 
-		mrView.SetMarkHandles();
+		mrView.RecreateAllMarkHandles();
 	}
 }
 

Modified: openoffice/branches/alg/aw080/main/sd/source/ui/func/fucopy.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sd/source/ui/func/fucopy.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sd/source/ui/func/fucopy.cxx (original)
+++ openoffice/branches/alg/aw080/main/sd/source/ui/func/fucopy.cxx Fri Sep 13 12:52:57 2013
@@ -327,7 +327,7 @@ void FuCopy::DoExecute( SfxRequest& rReq
 		}
 
 		// adapt handles
-		mpView->SetMarkHandles();
+		mpView->RecreateAllMarkHandles();
 
 		mpView->EndUndo();
 	}

Modified: openoffice/branches/alg/aw080/main/sd/source/ui/func/fusel.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sd/source/ui/func/fusel.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sd/source/ui/func/fusel.cxx (original)
+++ openoffice/branches/alg/aw080/main/sd/source/ui/func/fusel.cxx Fri Sep 13 12:52:57 2013
@@ -403,12 +403,6 @@ bool FuSelection::MouseButtonDown(const 
                         }
                     }
 
-                    // refresh mbMoveAllowedOnSelection when selection has changed
-                    if(mpView->isSelectionChangePending())
-                    {
-                        mpView->forceSelectionChange();
-                    }
-
                     if( !bDeactivateOLE )
                     {
                         if ( !bReadOnly &&
@@ -505,7 +499,7 @@ bool FuSelection::MouseButtonDown(const 
                     mpView->MarkPoints(0, true); 
 
                     // update all SdrHdl before getting one
-                    mpView->forceSelectionChange();
+                    // mpView->forceSelectionChange(); TTTT: Should be done in PickHandle
 
                     // get one
                     pHdl = mpView->PickHandle(aMDPos);
@@ -531,14 +525,14 @@ bool FuSelection::MouseButtonDown(const 
 
                     if ( ! rMEvt.IsRight())
 					{
-						if(mpView->isSelectionChangePending())
-						{
+						//if(mpView->isSelectionChangePending())
+						//{
                             // trigger evtl. outstanding selection change
                             // to get a valid SdrHdl with the next call
-							mpView->forceSelectionChange();
+							// mpView->forceSelectionChange(); TTTT: Should be done in PickHandle
 
 							pHdl = mpView->PickHandle(aMDPos);
-						}
+						//}
 
 						if(pHdl)
 						{
@@ -708,7 +702,7 @@ bool FuSelection::MouseButtonUp(const Mo
 
     // force trigger selection change to get bSelectionChanged
     // set in FuSelection::SelectionHasChanged() call eventually
-    mpView->forceSelectionChange();
+    // mpView->forceSelectionChange(); TTTT: Should be done in HasMarkablePoints
 
 	const double fHitLog(basegfx::B2DVector(mpWindow->GetInverseViewTransformation() * basegfx::B2DVector(HITPIX, 0.0)).getLength());
 	const double fDrgLog(basegfx::B2DVector(mpWindow->GetInverseViewTransformation() * basegfx::B2DVector(DRGPIX, 0.0)).getLength());

Modified: openoffice/branches/alg/aw080/main/sd/source/ui/func/futext.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sd/source/ui/func/futext.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sd/source/ui/func/futext.cxx (original)
+++ openoffice/branches/alg/aw080/main/sd/source/ui/func/futext.cxx Fri Sep 13 12:52:57 2013
@@ -780,7 +780,7 @@ bool FuText::MouseButtonUp(const MouseEv
 			ImpSetAttributesFitCommon(GetTextObj());
 
 			// adapt handles
-			mpView->SetMarkHandles();
+			mpView->RecreateAllMarkHandles();
 			mpView->PickHandle(aLogicPos);
 			SetInEditMode(rMEvt, false);
 		}

Modified: openoffice/branches/alg/aw080/main/sd/source/ui/func/smarttag.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sd/source/ui/func/smarttag.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sd/source/ui/func/smarttag.cxx (original)
+++ openoffice/branches/alg/aw080/main/sd/source/ui/func/smarttag.cxx Fri Sep 13 12:52:57 2013
@@ -220,7 +220,7 @@ void SmartTagSet::select( const SmartTag
 		if( mrView.areSdrObjectsSelected() )
 			mrView.UnmarkAllObj();
 		else
-			mrView.SetMarkHandles();
+			mrView.RecreateAllMarkHandles();
 	}
 }
 
@@ -233,7 +233,7 @@ void SmartTagSet::deselect()
 		mxSelectedTag->deselect();
 		mxSelectedTag.clear();
 		mrView.SetPossibilitiesDirty();
-		mrView.SetMarkHandles();
+		mrView.RecreateAllMarkHandles();
 	}
 }
 

Modified: openoffice/branches/alg/aw080/main/sd/source/ui/table/tableobjectbar.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sd/source/ui/table/tableobjectbar.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sd/source/ui/table/tableobjectbar.cxx (original)
+++ openoffice/branches/alg/aw080/main/sd/source/ui/table/tableobjectbar.cxx Fri Sep 13 12:52:57 2013
@@ -199,7 +199,7 @@ void TableObjectBar::Execute( SfxRequest
 		case SID_TABLE_INSERT_ROW:
 		case SID_TABLE_INSERT_COL:
 		{
-			pView->SetMarkHandles();
+			pView->RecreateAllMarkHandles();
 			pBindings->Invalidate( SID_TABLE_DELETE_ROW );
 			pBindings->Invalidate( SID_TABLE_DELETE_COL );
 			pBindings->Invalidate( SID_FRAME_LINESTYLE );

Modified: openoffice/branches/alg/aw080/main/sd/source/ui/unoidl/unopage.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sd/source/ui/unoidl/unopage.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sd/source/ui/unoidl/unopage.cxx (original)
+++ openoffice/branches/alg/aw080/main/sd/source/ui/unoidl/unopage.cxx Fri Sep 13 12:52:57 2013
@@ -1586,7 +1586,7 @@ Reference< drawing::XShape > SAL_CALL Sd
 	mpView->ShowSdrPage( *GetPage() );
 	_SelectObjectsInView( xShapes );
 	mpView->CombineMarkedObjects( sal_False );
-	mpView->SetMarkHandles();
+	mpView->RecreateAllMarkHandles();
 	
 	SdrObject* pSelected = mpView->getSelectedIfSingle();
 
@@ -1636,7 +1636,7 @@ Reference< drawing::XShape > SAL_CALL Sd
 	mpView->ShowSdrPage( *GetPage() );
 	_SelectObjectsInView( xShapes );
 	mpView->CombineMarkedObjects( sal_True );
-	mpView->SetMarkHandles();
+	mpView->RecreateAllMarkHandles();
 
 	SdrObject* pSelected = mpView->getSelectedIfSingle();
 

Modified: openoffice/branches/alg/aw080/main/sd/source/ui/view/drviews1.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sd/source/ui/view/drviews1.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sd/source/ui/view/drviews1.cxx (original)
+++ openoffice/branches/alg/aw080/main/sd/source/ui/view/drviews1.cxx Fri Sep 13 12:52:57 2013
@@ -1233,7 +1233,7 @@ bool DrawViewShell::SwitchPage(sal_uInt3
 		rBindings.Invalidate(SID_INSERTPAGE,true,false);
 		UpdatePreview( mpActualPage );
 
-		mpDrawView->SetMarkHandles();
+		mpDrawView->RecreateAllMarkHandles();
 	}
 
 	return (bOK);

Modified: openoffice/branches/alg/aw080/main/sd/source/ui/view/sdwindow.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sd/source/ui/view/sdwindow.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sd/source/ui/view/sdwindow.cxx (original)
+++ openoffice/branches/alg/aw080/main/sd/source/ui/view/sdwindow.cxx Fri Sep 13 12:52:57 2013
@@ -990,7 +990,7 @@ void Window::DataChanged( const DataChan
 				// #101928# re-create handles to show new outfit
 				if(dynamic_cast< DrawViewShell* >(mpViewShell))
 				{
-					mpViewShell->GetView()->SetMarkHandles();
+					mpViewShell->GetView()->RecreateAllMarkHandles();
 				}
             }
         }

Modified: openoffice/branches/alg/aw080/main/sd/source/ui/view/viewoverlaymanager.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sd/source/ui/view/viewoverlaymanager.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sd/source/ui/view/viewoverlaymanager.cxx (original)
+++ openoffice/branches/alg/aw080/main/sd/source/ui/view/viewoverlaymanager.cxx Fri Sep 13 12:52:57 2013
@@ -510,7 +510,7 @@ IMPL_LINK(ViewOverlayManager,UpdateTagsH
     bChanges |= CreateTags();
         
     if( bChanges && mrBase.GetDrawView() )
-        static_cast< ::sd::View* >( mrBase.GetDrawView() )->SetMarkHandles();        
+        static_cast< ::sd::View* >( mrBase.GetDrawView() )->RecreateAllMarkHandles();        
     return 0;
 }
 

Modified: openoffice/branches/alg/aw080/main/svx/inc/svx/sdrselection.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/inc/svx/sdrselection.hxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/inc/svx/sdrselection.hxx (original)
+++ openoffice/branches/alg/aw080/main/svx/inc/svx/sdrselection.hxx Fri Sep 13 12:52:57 2013
@@ -63,7 +63,7 @@ namespace sdr
 		typedef ::std::set< SdrObject*, SelectionComparator > SelectionSet;
 
 		// basic selection calss with minimal interface
-		class SVX_DLLPUBLIC Selection : private boost::noncopyable, public SfxListener, public Timer
+		class SVX_DLLPUBLIC Selection : private boost::noncopyable, public SfxListener
 		{
 		private:
 			// view this incarnation belongs to exclusively
@@ -87,7 +87,6 @@ namespace sdr
 			basegfx::B2DRange	maSnapRange;
 
 			// local tooling
-			void delayedSelectionChanged();
 			void createIndexDescription(bool bPoints);
 			void checkPointIndexCorrection();
 			void checkGlueIndexCorrection();
@@ -98,20 +97,14 @@ namespace sdr
 			// derived from SfxListener
 			virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint);
 
-			// derived from Timer
-			virtual void Timeout();
+			// handle change
+			void handleChange();
 
 		public:
 			/// constructor
 			Selection(SdrView& rSdrView);
             virtual ~Selection();
 
-			/// test if selection change is pending
-			bool isSelectionChangePending() const;
-
-			/// force evtl. delayed SelectionChange to be broadcasted
-			void forceSelectionChange();
-
 			/// const accesses
 			const SdrObjectVector& getVector() const;
 			SdrObject* getSingle() const;

Modified: openoffice/branches/alg/aw080/main/svx/inc/svx/svddrgv.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/inc/svx/svddrgv.hxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/inc/svx/svddrgv.hxx (original)
+++ openoffice/branches/alg/aw080/main/svx/inc/svx/svddrgv.hxx Fri Sep 13 12:52:57 2013
@@ -37,7 +37,6 @@ class ImpSdrDragViewExtraData;
 
 class SVX_DLLPUBLIC SdrDragView: public SdrExchangeView
 {
-private:
 protected:
 	SdrHdl*						mpDragHdl;
 	SdrDragMethod*				mpCurrentSdrDragMethod;
@@ -69,7 +68,7 @@ protected:
 	virtual ~SdrDragView();
 
 public:
-	virtual void SetMarkHandles();
+	virtual void RecreateAllMarkHandles();
 
 	virtual bool IsAction() const;
 	virtual void MovAction(const basegfx::B2DPoint& rPnt);

Modified: openoffice/branches/alg/aw080/main/svx/inc/svx/svdhdl.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/inc/svx/svdhdl.hxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/inc/svx/svdhdl.hxx (original)
+++ openoffice/branches/alg/aw080/main/svx/inc/svx/svdhdl.hxx Fri Sep 13 12:52:57 2013
@@ -158,6 +158,8 @@ enum BitmapMarkerKind
 //		SwSdrHdl
 //
 
+typedef ::std::vector< SdrHdl* > SdrHdlContainerType;
+
 class SVX_DLLPUBLIC SdrHdl : private boost::noncopyable
 {
 private:
@@ -276,7 +278,6 @@ public:
 class SVX_DLLPUBLIC SdrHdlList : private boost::noncopyable
 {
 private:
-    typedef ::std::vector< SdrHdl* > SdrHdlContainerType;
 	friend class SdrHdl;
 
 	SVX_DLLPRIVATE bool operator==(const SdrHdlList&);

Modified: openoffice/branches/alg/aw080/main/svx/inc/svx/svdmrkv.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/inc/svx/svdmrkv.hxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/inc/svx/svdmrkv.hxx (original)
+++ openoffice/branches/alg/aw080/main/svx/inc/svx/svdmrkv.hxx Fri Sep 13 12:52:57 2013
@@ -99,7 +99,7 @@ void sortSdrObjectSelection(SdrObjectVec
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 
-class SVX_DLLPUBLIC SdrMarkView : public SdrSnapView 
+class SVX_DLLPUBLIC SdrMarkView : public SdrSnapView, public Timer
 {
 private:
 	ImplMarkingOverlay*									mpMarkObjOverlay;
@@ -115,13 +115,18 @@ protected:
     
 private:
     // make private; access should be limited since it is dependent of selection and thus from
-    // the selection to be up-to-date. Before using a call to isSelectionChangePending() and 
-    // evtl. to forceSelectionChange() may be done which will potentially recreate all SdrHdl objects
-	SdrHdlList					maViewHandleList;
+    // the selection to be up-to-date
+	SdrHdlList					maViewSdrHandleList;
 
 	// new selection abstraction. Private to guarantee isolation
 	sdr::selection::Selection	maSelection;
 
+    // stuff to save focus during SdrHdl recreation
+    sal_uInt32                  mnSavePolyNum;
+    sal_uInt32                  mnSavePointNum;
+    SdrHdlKind                  meSaveKind;
+    const SdrObject*            mpSaveObj;
+
 protected:
     basegfx::B2DRange			maMarkedPointRange;
     basegfx::B2DRange			maMarkedGluePointRange;
@@ -135,8 +140,9 @@ protected:
     bool						mbForceFrameHandles : 1; // Persistent - FrameDrag auch bei Einzelobjekten
     bool						mbPlusHdlAlways : 1;   // Persistent
     bool						mbInsPolyPoint : 1;     // z.Zt InsPolyPointDragging
-    
-    virtual void AddDragModeHdl(SdrDragMode eMode);
+    bool                        mbSaveOldFocus : 1;
+
+    virtual void AddDragModeHdl(SdrHdlList& rTarget, SdrDragMode eMode);
 	virtual bool MouseMove(const MouseEvent& rMEvt, Window* pWin);
 
 	// add custom handles (used by other apps, e.g. AnchorPos)
@@ -147,8 +153,8 @@ protected:
     virtual SdrObject* CheckSingleSdrObjectHit(const basegfx::B2DPoint& rPnt, double fTol, SdrObjList* pOL, sal_uInt32 nOptions, const SetOfByte* pMVisLay, SdrObject*& rpRootObj) const;
     bool ImpIsFrameHandles() const;
 
-    // Macht aus einer Winkelangabe in 1/100deg einen String inkl. Grad-Zeichen
-    bool ImpMarkPoint(SdrHdl* pHdl, bool bUnmark);
+    // select or deselect points associated with given SdrHdl vector
+    bool ImpMarkPoints(const SdrHdlContainerType& rHdls, bool bUnmark);
 
 	void SetMoveOutside(bool bOn);
 	bool IsMoveOutside() const;
@@ -157,8 +163,20 @@ protected:
     SdrMarkView(SdrModel& rModel1, OutputDevice* pOut = 0);
 	virtual ~SdrMarkView();
 
+    // helper stuff for the complete RecreateAllMarkHandles implementation
+    void OnDemandCreate(SdrHdlList& rTarget);
+    void SaveMarkHandleFocus(const SdrHdlList& rTarget);
+    virtual void CreateMarkHandles(SdrHdlList& rTarget);
+    void RestoreMarkHandleFocus(SdrHdlList& rTarget);
+
 public:
-    void SetMarkHandles();
+    // completely recreate all SdrHdl based controller objects for all views
+    virtual void RecreateAllMarkHandles();
+
+    // from time derivation; used for automatic on-demand SdrHdl creation after 
+    // RecreateAllMarkHandles calls; either triggered from timer or by hand from
+    // GetHdlList() to ensure a new, correct SdrHdl list
+    virtual void Timeout();
 
 	void MarkGluePoints(const basegfx::B2DRange* pRange, bool bUnmark);
     virtual void MarkPoints(const basegfx::B2DRange* pRange, bool bUnmark);
@@ -212,10 +230,6 @@ public:
     ////////////////////////////////////////////////////////////////////////////////////////////////////
 	// new interface to selection, a direct wrapper to sdr::selection::Selection
 
-    // validity of selection check and force
-	bool isSelectionChangePending() const { return maSelection.isSelectionChangePending(); }
-	void forceSelectionChange() { maSelection.forceSelectionChange(); }
-
 	// selection const accesses
 	SdrObjectVector getSelectedSdrObjectVectorFromSdrMarkView() const { return maSelection.getVector(); }
 	SdrObject* getSelectedIfSingle() const { return maSelection.getSingle(); }

Modified: openoffice/branches/alg/aw080/main/svx/source/engine3d/view3d.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/source/engine3d/view3d.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/source/engine3d/view3d.cxx (original)
+++ openoffice/branches/alg/aw080/main/svx/source/engine3d/view3d.cxx Fri Sep 13 12:52:57 2013
@@ -1539,7 +1539,7 @@ void E3dView::Start3DCreation()
         SetRef2(basegfx::B2DPoint(GetRef1().getX(), nY2));
 
 		// force re-creation of SdrHdls TTTT needed?
-		SetMarkHandles();
+		RecreateAllMarkHandles();
 
 		// SpiegelPolygone SOFORT zeigen
 		const SdrHdlList &aHdlList = GetHdlList();

Modified: openoffice/branches/alg/aw080/main/svx/source/svdraw/sdrselection.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/source/svdraw/sdrselection.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/source/svdraw/sdrselection.cxx (original)
+++ openoffice/branches/alg/aw080/main/svx/source/svdraw/sdrselection.cxx Fri Sep 13 12:52:57 2013
@@ -156,31 +156,7 @@ namespace sdr
 			}
 		}
 
-		void Selection::delayedSelectionChanged()
-		{
-			// trigger a delayed selection change
-			if(!IsActive())
-			{
-                SetTimeout(1);
-                Start();
-            }
-		}
-
-		bool Selection::isSelectionChangePending() const
-		{
-			return IsActive();
-		}
-
-		void Selection::forceSelectionChange()
-		{
-			if(IsActive())
-			{
-				Stop();
-				Timeout();
-			}
-		}
-
-		void Selection::Timeout()
+		void Selection::handleChange()
 		{
 			// check if marked points need to be corrected
 			if(!maPointIndices.empty())
@@ -273,7 +249,6 @@ namespace sdr
 		Selection::Selection(SdrView& rSdrView)
 		:	boost::noncopyable(),
 			SfxListener(),
-			Timer(),
 			mrSdrView(rSdrView),
 			maSet(),
 			maPointIndices(),
@@ -287,7 +262,6 @@ namespace sdr
 
         Selection::~Selection()
         {
-            Stop();
         }
 
 		void Selection::Notify(SfxBroadcaster& /*rBC*/, const SfxHint& rHint)
@@ -307,15 +281,12 @@ namespace sdr
 					case HINT_OBJCHG_RESIZE:
 					case HINT_OBJCHG_ATTR:
 					{
-						// the BoundRange/SnapRange of a selected SdrObject
-						// may have changed. Since this may happen often and
-						// mainly based on the selection, do not trigger a
-						// selection change immediately, but start a timer
-						// to do so later
-						delayedSelectionChanged();
-
 						// reset buffered SnapRange
 						resetBufferedSelectionInformation();
+
+						// the BoundRange/SnapRange of a selected SdrObject
+						// may have changed
+						handleChange();
 						break;
 					}
 					case HINT_OBJINSERTED:
@@ -330,7 +301,7 @@ namespace sdr
 					{
 						// a selected SdrObject was removed from SdrObjList, thus is no
 						// longer active in the SdrModel. Remove from selection, too.
-						// This also triggers a delayedSelectionChanged()
+						// This also triggers handleChange()
 						if(pSdrHint->GetSdrHintObject())
 						{
 							removeSdrObject(*pSdrHint->GetSdrHintObject());
@@ -350,7 +321,7 @@ namespace sdr
 									This should be avoided by managing the selection before calling changing methods (!)");
 
 								// remove the deleted SdrObject from the selection. This will trigger
-								// a delayedSelectionChanged to react. All selection
+								// handleChange() to react. All selection
 								// users have to forget the deleted SdrObject ASAP
 								removeSdrObject(*pSdrHint->GetSdrHintObject());
 							}
@@ -452,7 +423,7 @@ namespace sdr
 					}
 
 					resetBufferedSelectionInformation();
-					delayedSelectionChanged();
+					handleChange();
 				}
 			}
 		}
@@ -470,7 +441,7 @@ namespace sdr
 				resetBufferedSelectionInformation();
 				resetBufferedPointInformation();
 				resetBufferedGlueInformation();
-				delayedSelectionChanged();
+				handleChange();
 			}
 		}
 
@@ -489,7 +460,7 @@ namespace sdr
 				resetBufferedSelectionInformation();
 				resetBufferedPointInformation();
 				resetBufferedGlueInformation();
-				delayedSelectionChanged();
+				handleChange();
 			}
 		}
 
@@ -524,7 +495,7 @@ namespace sdr
 						StartListening(const_cast< SdrObject& >(**aIter));
 					}
 
-					delayedSelectionChanged();
+					handleChange();
 				}
 			}
 		}
@@ -581,7 +552,7 @@ namespace sdr
 							resetBufferedGlueInformation();
 						}
 
-						delayedSelectionChanged();
+						handleChange();
 					}
 				}
 				else
@@ -618,7 +589,7 @@ namespace sdr
 								resetBufferedGlueInformation();
 							}
 
-							delayedSelectionChanged();
+							handleChange();
 						}
 					}
 				}

Modified: openoffice/branches/alg/aw080/main/svx/source/svdraw/svddrgv.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/source/svdraw/svddrgv.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/source/svdraw/svddrgv.cxx (original)
+++ openoffice/branches/alg/aw080/main/svx/source/svdraw/svddrgv.cxx Fri Sep 13 12:52:57 2013
@@ -653,7 +653,8 @@ bool SdrDragView::EndDragObj(bool bCopy)
 		
         if(mbInsPolyPoint) 
 		{
-			SetMarkHandles();
+			RecreateAllMarkHandles();
+
 			mbInsPolyPoint = false;
 
 			if( bUndo )
@@ -691,7 +692,7 @@ void SdrDragView::BrkDragObj()
 			mpInsPointUndo->Undo(); // Den eingefuegten Punkt wieder raus
 			delete mpInsPointUndo;
 			mpInsPointUndo = 0;
-			SetMarkHandles();
+			RecreateAllMarkHandles();
 			mbInsPolyPoint = false;
 		}
 
@@ -767,7 +768,7 @@ bool SdrDragView::ImpBegInsObjPoint(bool
 		{
 			mbInsPolyPoint = true;
 			MarkPoints(0, true); // unmarkall
-			// SetMarkHandles(); TTTT should be triggered by GetHdlList() below
+			// RecreateAllMarkHandles(); TTTT should be triggered by GetHdlList() below
 
 			bRetval = BegDragObj(rPnt, GetHdlList().GetHdlByIndex(mnInsPointNum), 0.0);
 
@@ -980,14 +981,14 @@ bool SdrDragView::IsOrthoDesired() const
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 
-void SdrDragView::SetMarkHandles()
+void SdrDragView::RecreateAllMarkHandles()
 {
 	if(GetDragHdl())
 	{
 		mpDragHdl = 0;
     }
 
-	SdrExchangeView::SetMarkHandles();
+	SdrExchangeView::RecreateAllMarkHandles();
 }
 
 bool SdrDragView::IsSolidDragging() const 

Modified: openoffice/branches/alg/aw080/main/svx/source/svdraw/svdedxv.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/source/svdraw/svdedxv.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/source/svdraw/svdedxv.cxx (original)
+++ openoffice/branches/alg/aw080/main/svx/source/svdraw/svdedxv.cxx Fri Sep 13 12:52:57 2013
@@ -809,7 +809,7 @@ bool SdrObjEditView::SdrBeginTextEdit(
 
 			mpTextEditCursorMerker = pWin->GetCursor();
 	        SetMoveOutside(true);
-			// SetMarkHandles(); TTTT: Should be triggered by SetMoveOutside directly
+			// RecreateAllMarkHandles(); TTTT: Should be triggered by SetMoveOutside directly
 
             mpTextEditOutlinerView = ImpMakeOutlinerView(pWin, !bEmpty, pGivenOutlinerView);
 
@@ -1166,7 +1166,7 @@ SdrEndTextEditKind SdrObjEditView::SdrEn
 			// #111096#
 			// Switch on evtl. TextAnimation again after TextEdit
 			pTEObj->SetTextAnimationAllowed(true);
-			SetMarkHandles();
+			RecreateAllMarkHandles();
 		}
 
         // alle OutlinerViews loeschen

Modified: openoffice/branches/alg/aw080/main/svx/source/svdraw/svdglev.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/source/svdraw/svdglev.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/source/svdraw/svdglev.cxx (original)
+++ openoffice/branches/alg/aw080/main/svx/source/svdraw/svdglev.cxx Fri Sep 13 12:52:57 2013
@@ -501,7 +501,7 @@ void SdrGlueEditView::MoveMarkedGluePoin
 
 	ImpTransformMarkedGluePoints(ImpMove, &rDelta);
 	EndUndo();
-	SetMarkHandles();
+	RecreateAllMarkHandles();
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -532,7 +532,7 @@ void SdrGlueEditView::ResizeMarkedGluePo
 
 	ImpTransformMarkedGluePoints(ImpResize, &rRef, &rScale);
 	EndUndo();
-	SetMarkHandles();
+	RecreateAllMarkHandles();
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -570,7 +570,7 @@ void SdrGlueEditView::RotateMarkedGluePo
 
 	ImpTransformMarkedGluePoints(ImpRotate, &rRef, &fAngle, &fSin, &fCos);
 	EndUndo();
-	SetMarkHandles();
+	RecreateAllMarkHandles();
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////

Modified: openoffice/branches/alg/aw080/main/svx/source/svdraw/svdhdl.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/source/svdraw/svdhdl.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/source/svdraw/svdhdl.cxx (original)
+++ openoffice/branches/alg/aw080/main/svx/source/svdraw/svdhdl.cxx Fri Sep 13 12:52:57 2013
@@ -376,7 +376,7 @@ void SdrHdl::Touch()
     // force update of graphic representation, but only when not empty. When
     // it is empty, the finishing call to CreateVisualizations() is not yet 
     // done but can be expected. If not empty, attributes are changed outside
-    // handle creation (SdrMarkView::SetMarkHandles()), e.g. blinking or MouseOver
+    // handle creation (SdrMarkView::RecreateAllMarkHandles()), e.g. blinking or MouseOver
     if(!getOverlayObjectList().isEmpty())
     {
         CreateB2dIAObject();

Modified: openoffice/branches/alg/aw080/main/svx/source/svdraw/svdmrkv.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/source/svdraw/svdmrkv.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/source/svdraw/svdmrkv.cxx (original)
+++ openoffice/branches/alg/aw080/main/svx/source/svdraw/svdmrkv.cxx Fri Sep 13 12:52:57 2013
@@ -228,15 +228,20 @@ void sortSdrObjectSelection(SdrObjectVec
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 
 SdrMarkView::SdrMarkView(SdrModel& rModel1, OutputDevice* pOut)
-:	SdrSnapView(rModel1, pOut),
+:   SdrSnapView(rModel1, pOut),
+    Timer(),
 	mpMarkObjOverlay(0),
 	mpMarkPointsOverlay(0),
 	mpMarkGluePointsOverlay(0),
 	maRef1(),
 	maRef2(),
 	maLastCrookCenter(),
-	maViewHandleList(*this),
+	maViewSdrHandleList(*this),
 	maSelection(*getAsSdrView()),
+    mnSavePolyNum(0),
+    mnSavePointNum(0),
+    meSaveKind(HDL_MOVE),
+    mpSaveObj(0),
 	maMarkedPointRange(),
 	maMarkedGluePointRange(),
 	mnInsPointNum(0),
@@ -245,13 +250,15 @@ SdrMarkView::SdrMarkView(SdrModel& rMode
 	mbDesignMode(false),
 	mbForceFrameHandles(false),
 	mbPlusHdlAlways(false),
-	mbInsPolyPoint(false)
+	mbInsPolyPoint(false),
+    mbSaveOldFocus(false)
 {
 	BrkMarkObj();
 	BrkMarkPoints();
 	BrkMarkGluePoints();
 
 	StartListening(rModel1);
+    SetTimeout(1);
 }
 
 SdrMarkView::~SdrMarkView()
@@ -400,30 +407,6 @@ void SdrMarkView::BrkMarkObj()
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 
-sal_uInt32 SdrMarkView::GetHdlNum(SdrHdl* pHdl) const 
-{
-    return GetHdlList().GetHdlNum(pHdl); 
-}
-
-SdrHdl* SdrMarkView::GetHdlByIndex(sal_uInt32 nHdlNum)  const 
-{ 
-    const SdrHdlList& rHdlList = GetHdlList();
-
-    if(nHdlNum < rHdlList.GetHdlCount()) 
-    {
-        return rHdlList.GetHdlByIndex(nHdlNum); 
-    }
-
-    return 0; 
-}
-
-const SdrHdlList& SdrMarkView::GetHdlList() const 
-{
-    return maViewHandleList; 
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
 bool SdrMarkView::BegMarkPoints(const basegfx::B2DPoint& rPnt, bool bUnmark)
 {
 	if(HasMarkablePoints()) 
@@ -637,34 +620,122 @@ bool SdrMarkView::ImpIsFrameHandles() co
 	return bFrmHdl;
 }
 
-void SdrMarkView::SetMarkHandles()
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+sal_uInt32 SdrMarkView::GetHdlNum(SdrHdl* pHdl) const 
 {
-	// #105722# remember old focus handle values to search for it again
-	const SdrHdl* pSaveOldFocusHdl = maViewHandleList.GetFocusHdl();
-	bool bSaveOldFocus(false);
-	sal_uInt32 nSavePolyNum(0);
-	sal_uInt32 nSavePointNum(0);
-	SdrHdlKind eSaveKind(HDL_MOVE);
-	const SdrObject* pSaveObj = 0;
-
-	if(pSaveOldFocusHdl
-		&& dynamic_cast< const SdrPathObj* >(pSaveOldFocusHdl->GetObj())
-		&& (HDL_POLY == pSaveOldFocusHdl->GetKind()  || HDL_BWGT == pSaveOldFocusHdl->GetKind()))
-	{
-		bSaveOldFocus = true;
-		nSavePolyNum = pSaveOldFocusHdl->GetPolyNum();
-		nSavePointNum = pSaveOldFocusHdl->GetPointNum();
-		pSaveObj = pSaveOldFocusHdl->GetObj();
-		eSaveKind = pSaveOldFocusHdl->GetKind();
-	}
-
-	// delete/clear all handles. This will always be done
-	maViewHandleList.Clear();
-	maViewHandleList.SetRotateShear(SDRDRAG_ROTATE == GetDragMode());
-	maViewHandleList.SetDistortShear(SDRDRAG_SHEAR == GetDragMode());
-	const SdrObjectVector aSelection(getSelectedSdrObjectVectorFromSdrMarkView());
-	const bool bStdDrag(SDRDRAG_MOVE == GetDragMode());
-	bool bFrmHdl(ImpIsFrameHandles());
+    return maViewSdrHandleList.GetHdlNum(pHdl); 
+}
+
+SdrHdl* SdrMarkView::GetHdlByIndex(sal_uInt32 nHdlNum)  const 
+{ 
+    if(nHdlNum < maViewSdrHandleList.GetHdlCount()) 
+    {
+        return maViewSdrHandleList.GetHdlByIndex(nHdlNum); 
+    }
+
+    return 0; 
+}
+
+const SdrHdlList& SdrMarkView::GetHdlList() const 
+{
+    if(IsActive())
+    {
+        const_cast< SdrMarkView* >(this)->Timeout();
+    }
+
+    return maViewSdrHandleList; 
+}
+
+void SdrMarkView::Timeout()
+{
+    Stop();
+
+    if(maViewSdrHandleList.GetHdlCount())
+    {
+        SaveMarkHandleFocus(maViewSdrHandleList);
+        maViewSdrHandleList.Clear();
+    }
+
+    if(!maViewSdrHandleList.GetHdlCount())
+    {
+        CreateMarkHandles(maViewSdrHandleList);
+        RestoreMarkHandleFocus(maViewSdrHandleList);
+
+        if(maViewSdrHandleList.GetHdlCount())
+        {
+            // create overlay objects
+            maViewSdrHandleList.CreateVisualizations();
+        }
+    }
+}
+
+void SdrMarkView::RecreateAllMarkHandles()
+{
+    if(!IsActive())
+    {
+        SetTimeout(1);
+        Start();
+    }
+}
+
+void SdrMarkView::SaveMarkHandleFocus(const SdrHdlList& rTarget)
+{
+    mbSaveOldFocus = false;
+
+    if(rTarget.GetHdlCount())
+    {
+        // #105722# remember old focus handle values to search for it again
+        const SdrHdl* pSaveOldFocusHdl = rTarget.GetFocusHdl();
+
+        if(pSaveOldFocusHdl
+            && dynamic_cast< const SdrPathObj* >(pSaveOldFocusHdl->GetObj())
+            && (HDL_POLY == pSaveOldFocusHdl->GetKind()  || HDL_BWGT == pSaveOldFocusHdl->GetKind()))
+        {
+            mbSaveOldFocus = true;
+            mnSavePolyNum = pSaveOldFocusHdl->GetPolyNum();
+            mnSavePointNum = pSaveOldFocusHdl->GetPointNum();
+            mpSaveObj = pSaveOldFocusHdl->GetObj();
+            meSaveKind = pSaveOldFocusHdl->GetKind();
+        }
+    }
+}
+
+void SdrMarkView::RestoreMarkHandleFocus(SdrHdlList& rTarget)
+{
+    // #105722# try to restore focus handle index from remembered values
+    if(mbSaveOldFocus)
+    {
+        for(sal_uInt32 a(0); a < rTarget.GetHdlCount(); a++)
+        {
+            SdrHdl* pCandidate = rTarget.GetHdlByIndex(a);
+
+            if(pCandidate->GetObj()
+                && pCandidate->GetObj() == mpSaveObj
+                && pCandidate->GetKind() == meSaveKind
+                && pCandidate->GetPolyNum() == mnSavePolyNum
+                && pCandidate->GetPointNum() == mnSavePointNum)
+            {
+                rTarget.SetFocusHdl(pCandidate);
+                break;
+            }
+        }
+    }
+}
+
+void SdrMarkView::CreateMarkHandles(SdrHdlList& rTarget)
+{
+    if(rTarget.GetHdlCount())
+    {
+        OSL_ENSURE(false, "CreateMarkHandles should only be called when there are no SdrHdl yet, delete them before recreation (!)");
+        return;
+    }
+
+    rTarget.SetRotateShear(SDRDRAG_ROTATE == GetDragMode());
+    rTarget.SetDistortShear(SDRDRAG_SHEAR == GetDragMode());
+    const SdrObjectVector aSelection(getSelectedSdrObjectVectorFromSdrMarkView());
+    const bool bStdDrag(SDRDRAG_MOVE == GetDragMode());
+    bool bFrmHdl(ImpIsFrameHandles());
     const SdrObject* pSingleSelected = getSelectedIfSingle();
     const SdrTextObj* pSingleTextObj = dynamic_cast< const SdrTextObj* >(pSingleSelected);
     const bool bSingleTextObjMark(pSingleTextObj && pSingleTextObj->IsTextFrame());
@@ -675,10 +746,10 @@ void SdrMarkView::SetMarkHandles()
         bFrmHdl = true;
     }
 
-	if(bFrmHdl) 
-	{
-		const basegfx::B2DRange& rSnapRange(getMarkedObjectSnapRange());
-		const bool bHideHandlesWhenInTextEdit(getAsSdrView()->IsTextEdit() && pSingleTextObj && pSingleTextObj->IsInEditMode());
+    if(bFrmHdl) 
+    {
+        const basegfx::B2DRange& rSnapRange(getMarkedObjectSnapRange());
+        const bool bHideHandlesWhenInTextEdit(getAsSdrView()->IsTextEdit() && pSingleTextObj && pSingleTextObj->IsInEditMode());
 
         // #i118524# if inplace activated OLE is selected,
         // suppress handles
@@ -691,16 +762,16 @@ void SdrMarkView::SetMarkHandles()
         }
 
         if(!rSnapRange.isEmpty() && !bHideHandlesWhenInTextEdit && !bHideHandlesWhenOleActive) 
-		{
+        {
             if(bSingleTextObjMark)
             {
-                const sal_uInt32 nSiz0(maViewHandleList.GetHdlCount());
-                pSingleTextObj->AddToHdlList(maViewHandleList);
-                const sal_uInt32 nSiz1(maViewHandleList.GetHdlCount());
-		
-				for(sal_uInt32 i(nSiz0); i < nSiz1; i++) 
+                const sal_uInt32 nSiz0(rTarget.GetHdlCount());
+                pSingleTextObj->AddToHdlList(rTarget);
+                const sal_uInt32 nSiz1(rTarget.GetHdlCount());
+        
+                for(sal_uInt32 i(nSiz0); i < nSiz1; i++) 
                 {
-                    SdrHdl* pHdl = maViewHandleList.GetHdlByIndex(i);
+                    SdrHdl* pHdl = rTarget.GetHdlByIndex(i);
                     pHdl->SetObjHdlNum(i - nSiz0);
                 }
             }
@@ -740,7 +811,7 @@ void SdrMarkView::SetMarkHandles()
                             const double fCropBottom(rCrop.GetBottom() * aCropScaleFactor.getY());
 
                             new SdrCropViewHdl(
-                                maViewHandleList,
+                                rTarget,
                                 *pSingleSelected,
                                 aMatrix,
                                 pSdrGrafObj->GetGraphicObject().GetGraphic(),
@@ -754,177 +825,157 @@ void SdrMarkView::SetMarkHandles()
 
                 const basegfx::B2DPoint aCenter(rSnapRange.getCenter());
 
-                new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum());
-                new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_UPPER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMinY()));
-                new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_UPRGT, basegfx::B2DTuple(rSnapRange.getMaxX(), rSnapRange.getMinY()));
-                new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_LEFT, basegfx::B2DTuple(rSnapRange.getMinX(), aCenter.getY()));
-                new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_RIGHT, basegfx::B2DTuple(rSnapRange.getMaxX(), aCenter.getY()));
-                new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_LWLFT, basegfx::B2DTuple(rSnapRange.getMinX(), rSnapRange.getMaxY()));
-                new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_LOWER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMaxY()));
-                new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_LWRGT, rSnapRange.getMaximum());
+                new SdrCropHdl(rTarget, *pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum());
+                new SdrCropHdl(rTarget, *pSingleSelected, HDL_UPPER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMinY()));
+                new SdrCropHdl(rTarget, *pSingleSelected, HDL_UPRGT, basegfx::B2DTuple(rSnapRange.getMaxX(), rSnapRange.getMinY()));
+                new SdrCropHdl(rTarget, *pSingleSelected, HDL_LEFT, basegfx::B2DTuple(rSnapRange.getMinX(), aCenter.getY()));
+                new SdrCropHdl(rTarget, *pSingleSelected, HDL_RIGHT, basegfx::B2DTuple(rSnapRange.getMaxX(), aCenter.getY()));
+                new SdrCropHdl(rTarget, *pSingleSelected, HDL_LWLFT, basegfx::B2DTuple(rSnapRange.getMinX(), rSnapRange.getMaxY()));
+                new SdrCropHdl(rTarget, *pSingleSelected, HDL_LOWER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMaxY()));
+                new SdrCropHdl(rTarget, *pSingleSelected, HDL_LWRGT, rSnapRange.getMaximum());
 
             }
-			else
-			{
-				const bool bNoWidth(basegfx::fTools::equalZero(rSnapRange.getWidth()));
-				const bool bNoHeight(basegfx::fTools::equalZero(rSnapRange.getHeight()));
-			
-				if (bNoWidth && bNoHeight) 
-				{
-					new SdrHdl(maViewHandleList, pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum(), true);
-				}
-				else if (!bStdDrag && (bNoWidth || bNoHeight)) 
-				{
-					new SdrHdl(maViewHandleList, pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum(), true);
-					new SdrHdl(maViewHandleList, pSingleSelected, HDL_LWRGT, rSnapRange.getMaximum(), true);
-	    		}
-				else 
-				{
-					const basegfx::B2DPoint aCenter(rSnapRange.getCenter());
-
-					if(!bNoWidth && !bNoHeight) 
-					{
-						new SdrHdl(maViewHandleList, pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum(), true);
-		            }
-
-					if(!bNoHeight) 
-            		{
-						new SdrHdl(maViewHandleList, pSingleSelected, HDL_UPPER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMinY()), true);
-					}
+            else
+            {
+                const bool bNoWidth(basegfx::fTools::equalZero(rSnapRange.getWidth()));
+                const bool bNoHeight(basegfx::fTools::equalZero(rSnapRange.getHeight()));
+            
+                if (bNoWidth && bNoHeight) 
+                {
+                    new SdrHdl(rTarget, pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum(), true);
+                }
+                else if (!bStdDrag && (bNoWidth || bNoHeight)) 
+                {
+                    new SdrHdl(rTarget, pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum(), true);
+                    new SdrHdl(rTarget, pSingleSelected, HDL_LWRGT, rSnapRange.getMaximum(), true);
+                }
+                else 
+                {
+                    const basegfx::B2DPoint aCenter(rSnapRange.getCenter());
 
-					if(!bNoWidth && !bNoHeight) 
-					{
-						new SdrHdl(maViewHandleList, pSingleSelected, HDL_UPRGT, basegfx::B2DTuple(rSnapRange.getMaxX(), rSnapRange.getMinY()), true);
-					}
-			
-					if(!bNoWidth) 
+                    if(!bNoWidth && !bNoHeight) 
                     {
-						new SdrHdl(maViewHandleList, pSingleSelected, HDL_LEFT, basegfx::B2DTuple(rSnapRange.getMinX(), aCenter.getY()), true);
-	    			}
-
-					if(!bNoWidth) 
-		    		{
-						new SdrHdl(maViewHandleList, pSingleSelected, HDL_RIGHT, basegfx::B2DTuple(rSnapRange.getMaxX(), aCenter.getY()), true);
-					}
+                        new SdrHdl(rTarget, pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum(), true);
+                    }
 
-					if(!bNoWidth && !bNoHeight) 
-					{
-						new SdrHdl(maViewHandleList, pSingleSelected, HDL_LWLFT, basegfx::B2DTuple(rSnapRange.getMinX(), rSnapRange.getMaxY()), true);
-					} 
+                    if(!bNoHeight) 
+                    {
+                        new SdrHdl(rTarget, pSingleSelected, HDL_UPPER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMinY()), true);
+                    }
 
-					if(!bNoHeight) 
-					{
-						new SdrHdl(maViewHandleList, pSingleSelected, HDL_LOWER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMaxY()), true);
-					} 
+                    if(!bNoWidth && !bNoHeight) 
+                    {
+                        new SdrHdl(rTarget, pSingleSelected, HDL_UPRGT, basegfx::B2DTuple(rSnapRange.getMaxX(), rSnapRange.getMinY()), true);
+                    }
+            
+                    if(!bNoWidth) 
+                    {
+                        new SdrHdl(rTarget, pSingleSelected, HDL_LEFT, basegfx::B2DTuple(rSnapRange.getMinX(), aCenter.getY()), true);
+                    }
 
-					if(!bNoWidth && !bNoHeight) 
-					{
-						new SdrHdl(maViewHandleList, pSingleSelected, HDL_LWRGT, rSnapRange.getMaximum(), true);
-					}
-				}
-			}
-		}
-	} 
-	else 
-	{
-		for (sal_uInt32 nMarkNum(0); nMarkNum < aSelection.size(); nMarkNum++) 
-		{
-			SdrObject* pObj = aSelection[nMarkNum];
-			const sal_uInt32 nSiz0(maViewHandleList.GetHdlCount());
-			pObj->AddToHdlList(maViewHandleList);
-			const sal_uInt32 nSiz1(maViewHandleList.GetHdlCount());
-			const bool bPoly(pObj->IsPolygonObject());
-			const sdr::selection::Indices aMarkedPoints(bPoly ? getSelectedPointsForSelectedSdrObject(*pObj) : sdr::selection::Indices());
+                    if(!bNoWidth) 
+                    {
+                        new SdrHdl(rTarget, pSingleSelected, HDL_RIGHT, basegfx::B2DTuple(rSnapRange.getMaxX(), aCenter.getY()), true);
+                    }
 
-			for(sal_uInt32 i(nSiz0); i < nSiz1; i++) 
-			{
-				SdrHdl* pHdl = maViewHandleList.GetHdlByIndex(i);
-				pHdl->SetObjHdlNum(i - nSiz0);
-					
-				if (bPoly) 
-				{
-					const bool bSelected(0 != aMarkedPoints.count(i - nSiz0));
+                    if(!bNoWidth && !bNoHeight) 
+                    {
+                        new SdrHdl(rTarget, pSingleSelected, HDL_LWLFT, basegfx::B2DTuple(rSnapRange.getMinX(), rSnapRange.getMaxY()), true);
+                    } 
 
-					pHdl->SetSelected(bSelected);
+                    if(!bNoHeight) 
+                    {
+                        new SdrHdl(rTarget, pSingleSelected, HDL_LOWER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMaxY()), true);
+                    } 
 
-					if(IsPlusHandlesAlwaysVisible() || bSelected) 
-					{
-						const sal_uInt32 nPlusAnz(pObj->GetPlusHdlCount(*pHdl));
-							
-						for(sal_uInt32 nPlusNum(0); nPlusNum < nPlusAnz; nPlusNum++) 
-						{
-							pObj->GetPlusHdl(maViewHandleList, *pObj, *pHdl, nPlusNum);
-						}
-					}
-				}
-			}
-		}
-	}
+                    if(!bNoWidth && !bNoHeight) 
+                    {
+                        new SdrHdl(rTarget, pSingleSelected, HDL_LWRGT, rSnapRange.getMaximum(), true);
+                    }
+                }
+            }
+        }
+    } 
+    else 
+    {
+        for (sal_uInt32 nMarkNum(0); nMarkNum < aSelection.size(); nMarkNum++) 
+        {
+            SdrObject* pObj = aSelection[nMarkNum];
+            const sal_uInt32 nSiz0(rTarget.GetHdlCount());
+            pObj->AddToHdlList(rTarget);
+            const sal_uInt32 nSiz1(rTarget.GetHdlCount());
+            const bool bPoly(pObj->IsPolygonObject());
+            const sdr::selection::Indices aMarkedPoints(bPoly ? getSelectedPointsForSelectedSdrObject(*pObj) : sdr::selection::Indices());
 
-	// GluePoint-Handles
-	for(sal_uInt32 nMarkNum(0); nMarkNum < aSelection.size(); nMarkNum++) 
-	{
-		SdrObject* pObj = aSelection[nMarkNum];
-		const sdr::selection::Indices aMarkedGluePoints(getSelectedGluesForSelectedSdrObject(*pObj));
+            for(sal_uInt32 i(nSiz0); i < nSiz1; i++) 
+            {
+                SdrHdl* pHdl = rTarget.GetHdlByIndex(i);
+                pHdl->SetObjHdlNum(i - nSiz0);
+                    
+                if (bPoly) 
+                {
+                    const bool bSelected(0 != aMarkedPoints.count(i - nSiz0));
 
-		if(!aMarkedGluePoints.empty()) 
-		{
-			const SdrGluePointList* pGPL=pObj->GetGluePointList();
+                    pHdl->SetSelected(bSelected);
 
-			if(pGPL) 
-			{
-				const basegfx::B2DRange aObjSnapRange(sdr::legacy::GetSnapRange(*pObj));
+                    if(IsPlusHandlesAlwaysVisible() || bSelected) 
+                    {
+                        const sal_uInt32 nPlusAnz(pObj->GetPlusHdlCount(*pHdl));
+                            
+                        for(sal_uInt32 nPlusNum(0); nPlusNum < nPlusAnz; nPlusNum++) 
+                        {
+                            pObj->GetPlusHdl(rTarget, *pObj, *pHdl, nPlusNum);
+                        }
+                    }
+                }
+            }
+        }
+    }
 
-				for(sdr::selection::Indices::const_iterator aCurrent(aMarkedGluePoints.begin());
-					aCurrent != aMarkedGluePoints.end(); aCurrent++)
-				{
-					const sal_uInt32 nId(*aCurrent);
-					const sal_uInt32 nNumGP(pGPL->FindGluePoint(nId));
-						
-					if(SDRGLUEPOINT_NOTFOUND != nNumGP) 
-					{
-						const SdrGluePoint& rGP=(*pGPL)[nNumGP];
-						basegfx::B2DPoint aPos(rGP.GetAbsolutePos(aObjSnapRange));
-						SdrHdl* pGlueHdl = new SdrHdl(maViewHandleList, pObj, HDL_GLUE, aPos);
-						pGlueHdl->SetObjHdlNum(nId);
-					}
-				}
-			}
-		}
-	}
+    // GluePoint-Handles
+    for(sal_uInt32 nMarkNum(0); nMarkNum < aSelection.size(); nMarkNum++) 
+    {
+        SdrObject* pObj = aSelection[nMarkNum];
+        const sdr::selection::Indices aMarkedGluePoints(getSelectedGluesForSelectedSdrObject(*pObj));
 
-	// Drehpunkt/Spiegelachse
-	AddDragModeHdl(GetDragMode());
+        if(!aMarkedGluePoints.empty()) 
+        {
+            const SdrGluePointList* pGPL=pObj->GetGluePointList();
 
-	// add custom handles (used by other apps, e.g. AnchorPos)
-	AddCustomHdl(maViewHandleList);
+            if(pGPL) 
+            {
+                const basegfx::B2DRange aObjSnapRange(sdr::legacy::GetSnapRange(*pObj));
 
-	// sort handles
-	maViewHandleList.Sort();
+                for(sdr::selection::Indices::const_iterator aCurrent(aMarkedGluePoints.begin());
+                    aCurrent != aMarkedGluePoints.end(); aCurrent++)
+                {
+                    const sal_uInt32 nId(*aCurrent);
+                    const sal_uInt32 nNumGP(pGPL->FindGluePoint(nId));
+                        
+                    if(SDRGLUEPOINT_NOTFOUND != nNumGP) 
+                    {
+                        const SdrGluePoint& rGP=(*pGPL)[nNumGP];
+                        basegfx::B2DPoint aPos(rGP.GetAbsolutePos(aObjSnapRange));
+                        SdrHdl* pGlueHdl = new SdrHdl(rTarget, pObj, HDL_GLUE, aPos);
+                        pGlueHdl->SetObjHdlNum(nId);
+                    }
+                }
+            }
+        }
+    }
 
-	// #105722# try to restore focus handle index from remembered values
-	if(bSaveOldFocus)
-	{
-		for(sal_uInt32 a(0); a < maViewHandleList.GetHdlCount(); a++)
-		{
-			SdrHdl* pCandidate = maViewHandleList.GetHdlByIndex(a);
+    // Drehpunkt/Spiegelachse
+    AddDragModeHdl(rTarget, GetDragMode());
 
-			if(pCandidate->GetObj()
-				&& pCandidate->GetObj() == pSaveObj
-				&& pCandidate->GetKind() == eSaveKind
-				&& pCandidate->GetPolyNum() == nSavePolyNum
-				&& pCandidate->GetPointNum() == nSavePointNum)
-			{
-    			maViewHandleList.SetFocusHdl(pCandidate);
-				break;
-			}
-		}
-	}
+    // add custom handles (used by other apps, e.g. AnchorPos)
+    AddCustomHdl(rTarget);
 
-    // create overlay objects
-    maViewHandleList.CreateVisualizations();
+    // sort handles
+    rTarget.Sort();
 }
 
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
 void SdrMarkView::AddCustomHdl(SdrHdlList& /*rTarget*/)
 {
 	// add custom handles (used by other apps, e.g. AnchorPos)
@@ -945,22 +996,22 @@ void SdrMarkView::SetDragMode(SdrDragMod
 	}
 }
 
-void SdrMarkView::AddDragModeHdl(SdrDragMode eMode)
+void SdrMarkView::AddDragModeHdl(SdrHdlList& rTarget, SdrDragMode eMode)
 {
 	switch(eMode)
 	{
 		case SDRDRAG_ROTATE:
 		{
 			// add rotation center
-			new SdrHdl(maViewHandleList, 0, HDL_REF1, GetRef1());
+			new SdrHdl(rTarget, 0, HDL_REF1, GetRef1());
 			break;
 		}
 		case SDRDRAG_MIRROR:
 		{
 			// add mirror axis
-			SdrHdlLine* pHdl1 = new SdrHdlLine(maViewHandleList, HDL_MIRX);
-			SdrHdl* pHdl2 = new SdrHdl(maViewHandleList, 0, HDL_REF1, GetRef1());
-			SdrHdl* pHdl3 = new SdrHdl(maViewHandleList, 0, HDL_REF2, GetRef2());
+			SdrHdlLine* pHdl1 = new SdrHdlLine(rTarget, HDL_MIRX);
+			SdrHdl* pHdl2 = new SdrHdl(rTarget, 0, HDL_REF1, GetRef1());
+			SdrHdl* pHdl3 = new SdrHdl(rTarget, 0, HDL_REF2, GetRef2());
 
 			pHdl1->SetHandles(pHdl2, pHdl3);
 			pHdl1->SetObjHdlNum(1);
@@ -1012,9 +1063,9 @@ void SdrMarkView::AddDragModeHdl(SdrDrag
 				aGradTransformer.GradToVec(aGradTransGradient, aGradTransVector, pSingleSelected);
 
 				// build handles
-				SdrHdlColor* pColHdl1 = new SdrHdlColor(maViewHandleList, *pSingleSelected, aGradTransVector.maPositionA, aGradTransVector.aCol1, SDR_HANDLE_COLOR_SIZE_NORMAL, true);
-				SdrHdlColor* pColHdl2 = new SdrHdlColor(maViewHandleList, *pSingleSelected, aGradTransVector.maPositionB, aGradTransVector.aCol2, SDR_HANDLE_COLOR_SIZE_NORMAL, true);
-				SdrHdlGradient* pGradHdl = new SdrHdlGradient(maViewHandleList, *pSingleSelected, *pColHdl1, *pColHdl2, false);
+				SdrHdlColor* pColHdl1 = new SdrHdlColor(rTarget, *pSingleSelected, aGradTransVector.maPositionA, aGradTransVector.aCol1, SDR_HANDLE_COLOR_SIZE_NORMAL, true);
+				SdrHdlColor* pColHdl2 = new SdrHdlColor(rTarget, *pSingleSelected, aGradTransVector.maPositionB, aGradTransVector.aCol2, SDR_HANDLE_COLOR_SIZE_NORMAL, true);
+				SdrHdlGradient* pGradHdl = new SdrHdlGradient(rTarget, *pSingleSelected, *pColHdl1, *pColHdl2, false);
 
 				// link them
 				pColHdl1->SetColorChangeHdl(LINK(pGradHdl, SdrHdlGradient, ColorChangeHdl));
@@ -1044,9 +1095,9 @@ void SdrMarkView::AddDragModeHdl(SdrDrag
 					aGradTransformer.GradToVec(aGradTransGradient, aGradTransVector, pSingleSelected);
 
 					// build handles
-					SdrHdlColor* pColHdl1 = new SdrHdlColor(maViewHandleList, *pSingleSelected, aGradTransVector.maPositionA, aGradTransVector.aCol1, aHdlSize, false);
-					SdrHdlColor* pColHdl2 = new SdrHdlColor(maViewHandleList, *pSingleSelected, aGradTransVector.maPositionB, aGradTransVector.aCol2, aHdlSize, false);
-					SdrHdlGradient* pGradHdl = new SdrHdlGradient(maViewHandleList, *pSingleSelected, *pColHdl1, *pColHdl2, true);
+					SdrHdlColor* pColHdl1 = new SdrHdlColor(rTarget, *pSingleSelected, aGradTransVector.maPositionA, aGradTransVector.aCol1, aHdlSize, false);
+					SdrHdlColor* pColHdl2 = new SdrHdlColor(rTarget, *pSingleSelected, aGradTransVector.maPositionB, aGradTransVector.aCol2, aHdlSize, false);
+					SdrHdlGradient* pGradHdl = new SdrHdlGradient(rTarget, *pSingleSelected, *pColHdl1, *pColHdl2, true);
 
 					// link them
 					pColHdl1->SetColorChangeHdl(LINK(pGradHdl, SdrHdlGradient, ColorChangeHdl));
@@ -1229,7 +1280,7 @@ void SdrMarkView::ForceRefToMarked()
 	}
 
 	// force recreation of SdrHdls TTTT needed?
-	SetMarkHandles();
+	RecreateAllMarkHandles();
 }
 
 void SdrMarkView::SetRef1(const basegfx::B2DPoint& rPt)
@@ -1271,7 +1322,7 @@ void SdrMarkView::SetFrameHandles(bool b
 		if(bNew != bOld) 
 		{
 			// force recreation of SdrHdls
-			SetMarkHandles();
+			RecreateAllMarkHandles();
 		}
 	}
 }
@@ -1628,20 +1679,20 @@ bool SdrMarkView::IsObjMarked(const SdrO
 
 sal_uInt16 SdrMarkView::GetMarkHdlSizePixel() const
 {
-	return maViewHandleList.GetHdlSize()*2+1;
+	return maViewSdrHandleList.GetHdlSize()*2+1;
 }
 
 bool SdrMarkView::IsSolidMarkHdl() const 
 { 
-    return maViewHandleList.IsFineHdl(); 
+    return maViewSdrHandleList.IsFineHdl(); 
 }
 
 void SdrMarkView::SetSolidMarkHdl(bool bOn)
 {
-	if(bOn != maViewHandleList.IsFineHdl()) 
+	if(bOn != maViewSdrHandleList.IsFineHdl()) 
 	{
-		maViewHandleList.SetFineHdl(bOn);
-        SetMarkHandles();
+		maViewSdrHandleList.SetFineHdl(bOn);
+        RecreateAllMarkHandles();
 	}
 }
 
@@ -1649,10 +1700,10 @@ void SdrMarkView::SetMarkHdlSizePixel(sa
 {
 	if (nSiz<3) nSiz=3;
 	nSiz/=2;
-	if (nSiz!=maViewHandleList.GetHdlSize()) 
+	if (nSiz!=maViewSdrHandleList.GetHdlSize()) 
     {
-		maViewHandleList.SetHdlSize(nSiz);
-        SetMarkHandles();
+		maViewSdrHandleList.SetHdlSize(nSiz);
+        RecreateAllMarkHandles();
 	}
 }
 
@@ -2176,18 +2227,18 @@ void SdrMarkView::handleSelectionChange(
 	ImpSetGlueVisible4(0 != dynamic_cast< SdrEdgeObj* >(getSelectedIfSingle()));
 
 	// visualize new selection
-	SetMarkHandles();
+	RecreateAllMarkHandles();
 }
 
 void SdrMarkView::SetMoveOutside(bool bOn)
 {
-	maViewHandleList.SetMoveOutside(bOn);
-    SetMarkHandles();
+	maViewSdrHandleList.SetMoveOutside(bOn);
+    RecreateAllMarkHandles();
 }
 
 bool SdrMarkView::IsMoveOutside() const                     
 { 
-	return maViewHandleList.IsMoveOutside(); 
+	return maViewSdrHandleList.IsMoveOutside(); 
 }
 
 void SdrMarkView::SetDesignMode( bool _bOn )

Modified: openoffice/branches/alg/aw080/main/svx/source/svdraw/svdmrkv1.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/source/svdraw/svdmrkv1.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/source/svdraw/svdmrkv1.cxx (original)
+++ openoffice/branches/alg/aw080/main/svx/source/svdraw/svdmrkv1.cxx Fri Sep 13 12:52:57 2013
@@ -120,96 +120,149 @@ bool SdrMarkView::IsPointMarkable(const 
 
 bool SdrMarkView::MarkPointHelper(SdrHdl* pHdl, bool bUnmark)
 {
-	return ImpMarkPoint(pHdl, bUnmark);
+    SdrHdlContainerType aHdl;
+
+    if(pHdl)
+    {
+        aHdl.push_back(pHdl);
+    }
+
+    return ImpMarkPoints(aHdl, bUnmark);
 }
 
-bool SdrMarkView::ImpMarkPoint(SdrHdl* pHdl, bool bUnmark)
+bool SdrMarkView::ImpMarkPoints(const SdrHdlContainerType& rHdls, bool bUnmark)
 {
-	if(!pHdl || pHdl->IsPlusHdl() || HDL_GLUE == pHdl->GetKind())
-	{
-		return false;
-	}
-	
-	if(pHdl->IsSelected() != bUnmark)
-	{
-		return false;
-	}
+    sdr::selection::Indices aMarkedPoints;
+    bool bRetval(true);
+    bool bChanged(false);
+    const SdrObject* pLastObj = 0;
 
-	const SdrObject* pObj = pHdl->GetObj();
+    for(sal_uInt32 a(0); a < rHdls.size(); a++)
+    {
+        const SdrHdl* pCandidate = rHdls[a];
 
-	if(!pObj || !pObj->IsPolygonObject())
-	{
-		return false;
-	}
+        if(!pCandidate)
+        {
+            OSL_ENSURE(false, "OOps, null-ptr in SdhHdl list (!)");
+            continue;
+        }
 
-	sdr::selection::Indices aMarkedPoints(getSelectedPointsForSelectedSdrObject(*pObj));
-	const sal_uInt32 nHdlNum(pHdl->GetObjHdlNum());
+        if(!pCandidate || pCandidate->IsPlusHdl() || HDL_GLUE == pCandidate->GetKind())
+        {
+            continue;
+        }
 
-	if (!bUnmark) 
-	{
-    	aMarkedPoints.insert(nHdlNum);
-	} 
-	else
-	{
-	    if(!aMarkedPoints.erase(nHdlNum))
-		{
-		    return false;
-		}
-	}
+        if(pCandidate->IsSelected() != bUnmark)
+        {
+            continue;
+        }
+
+        const SdrObject* pObj = pCandidate->GetObj();
+
+        if(!pObj || !pObj->IsPolygonObject())
+        {
+            continue;
+        }
+
+        if(!pLastObj || pLastObj != pObj)
+        {
+            if(pLastObj && bChanged)
+            {
+                setSelectedPointsForSelectedSdrObject(*pLastObj, aMarkedPoints);
+            }
+
+            bChanged = false;
+            pLastObj = pObj;
+            aMarkedPoints = getSelectedPointsForSelectedSdrObject(*pObj);
+        }
+
+        const sal_uInt32 nHdlNum(pCandidate->GetObjHdlNum());
+
+        if (!bUnmark) 
+        {
+            aMarkedPoints.insert(nHdlNum);
+            bChanged = true;
+        } 
+        else
+        {
+            if(aMarkedPoints.erase(nHdlNum))
+            {
+                bChanged = true;
+            }
+            else
+            {
+                bRetval = false;
+            }
+        }
+
+        // TTTT: should not be needed, setSelectedPointsForSelectedSdrObject already triggers selection change and starts recreation
+        // pCandidate->SetSelected(!bUnmark); 
+    }
 
-	setSelectedPointsForSelectedSdrObject(*pObj, aMarkedPoints);
-	// pHdl->SetSelected(!bUnmark); TTTT: not needed, setSelectedPointsForSelectedSdrObject already triggers selection change and starts recreation
+    if(pLastObj && bChanged)
+    {
+        setSelectedPointsForSelectedSdrObject(*pLastObj, aMarkedPoints);
+    }
 
-	return true;
+    return bRetval;
 }
 
 
 bool SdrMarkView::MarkPoint(SdrHdl& rHdl, bool bUnmark)
 {
-	if(!(&rHdl)) 
-	{
-		return false;
+    if(!(&rHdl)) 
+    {
+        OSL_ENSURE(false, "OOps, a null-pointer to a SdrHdl as reference was handed over (!)");
+        return false;
     }
 
-	bool bRet(false);
+    bool bRet(false);
 
-	if(IsPointMarkable(rHdl) && rHdl.IsSelected() == bUnmark) 
+    if(IsPointMarkable(rHdl) && rHdl.IsSelected() == bUnmark) 
     {
         const SdrObject* pObj = rHdl.GetObj();
 
-		if(isSdrObjectSelected(*pObj))
-		{
-			if(ImpMarkPoint(&rHdl, bUnmark)) 
-			{
-				bRet = true;
-			}
-		}
-	}
+        if(isSdrObjectSelected(*pObj))
+        {
+            SdrHdlContainerType aHdl;
 
-	return bRet;
+            aHdl.push_back(&rHdl);
+
+            if(ImpMarkPoints(aHdl, bUnmark)) 
+            {
+                bRet = true;
+            }
+        }
+    }
+
+    return bRet;
 }
 
 void SdrMarkView::MarkPoints(const basegfx::B2DRange* pRange, bool bUnmark)
 {
-	const SdrObject* pObj0 = 0;
+    const SdrObject* pObj0 = 0;
     const SdrHdlList& rHdlList = GetHdlList();
-	const sal_uInt32 nHdlAnz(rHdlList.GetHdlCount());
+    const sal_uInt32 nHdlAnz(rHdlList.GetHdlCount());
+    SdrHdlContainerType aHdl;
 
-	maViewHandleList.Sort();
-
-	for(sal_uInt32 nHdlNum(nHdlAnz); nHdlNum > 0;) 
+    for(sal_uInt32 nHdlNum(nHdlAnz); nHdlNum > 0;) 
     {
-		nHdlNum--;
-		SdrHdl* pHdl = rHdlList.GetHdlByIndex(nHdlNum);
+        nHdlNum--;
+        SdrHdl* pHdl = rHdlList.GetHdlByIndex(nHdlNum);
 
-		if(IsPointMarkable(*pHdl) && pHdl->IsSelected() == bUnmark) 
+        if(pHdl && IsPointMarkable(*pHdl) && pHdl->IsSelected() == bUnmark) 
         {
-			if(!pRange || pRange->isInside(pHdl->getPosition())) 
-			{
-				ImpMarkPoint(pHdl, bUnmark);
-			}
-		}
-	}
+            if(!pRange || pRange->isInside(pHdl->getPosition())) 
+            {
+                aHdl.push_back(pHdl);
+            }
+        }
+    }
+
+    if(aHdl.size())
+    {
+        ImpMarkPoints(aHdl, bUnmark);
+    }
 }
 
 const basegfx::B2DRange& SdrMarkView::getMarkedPointRange() const
@@ -227,7 +280,7 @@ void SdrMarkView::SetPlusHandlesAlwaysVi
 	if(bOn != IsPlusHandlesAlwaysVisible()) 
 	{
 		mbPlusHdlAlways = bOn;
-		SetMarkHandles();
+		RecreateAllMarkHandles();
 	}
 }
 

Modified: openoffice/branches/alg/aw080/main/svx/source/svdraw/svdpagv.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/source/svdraw/svdpagv.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/source/svdraw/svdpagv.cxx (original)
+++ openoffice/branches/alg/aw080/main/svx/source/svdraw/svdpagv.cxx Fri Sep 13 12:52:57 2013
@@ -680,7 +680,7 @@ void SdrPageView::DrawPageViewGrid(Outpu
 
 void SdrPageView::AdjHdl()
 {
-	GetView().SetMarkHandles();
+	GetView().RecreateAllMarkHandles();
 }
 
 void SdrPageView::SetLayer(const XubString& rName, SetOfByte& rBS, bool bJa)
@@ -959,7 +959,7 @@ bool SdrPageView::EnterGroup(SdrObject* 
 		}
 
 		// build new handles
-		GetView().SetMarkHandles();
+		GetView().RecreateAllMarkHandles();
 
 		// invalidate only when view wants to visualize group entering
 		if(GetView().DoVisualizeEnteredGroup())
@@ -1013,7 +1013,7 @@ void SdrPageView::LeaveOneGroup()
 			}
 		}
 
-		GetView().SetMarkHandles();
+		GetView().RecreateAllMarkHandles();
 
 		// invalidate only when view wants to visualize group entering
 		if(GetView().DoVisualizeEnteredGroup())
@@ -1061,7 +1061,7 @@ void SdrPageView::LeaveAllGroup()
 			}
 		}
 
-		GetView().SetMarkHandles();
+		GetView().RecreateAllMarkHandles();
 
 		// invalidate only when view wants to visualize group entering
 		if(GetView().DoVisualizeEnteredGroup())

Modified: openoffice/branches/alg/aw080/main/svx/source/svdraw/svdpoev.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/source/svdraw/svdpoev.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/source/svdraw/svdpoev.cxx (original)
+++ openoffice/branches/alg/aw080/main/svx/source/svdraw/svdpoev.cxx Fri Sep 13 12:52:57 2013
@@ -757,7 +757,7 @@ void SdrPolyEditView::TransformMarkedPoi
         	EndUndo();
         }
 
-		SetMarkHandles();
+		RecreateAllMarkHandles();
     }
 }
 

Modified: openoffice/branches/alg/aw080/main/svx/source/toolbars/fontworkbar.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/source/toolbars/fontworkbar.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/source/toolbars/fontworkbar.cxx (original)
+++ openoffice/branches/alg/aw080/main/svx/source/toolbars/fontworkbar.cxx Fri Sep 13 12:52:57 2013
@@ -540,7 +540,7 @@ void FontworkBar::execute( SdrView* pSdr
 						    if( bUndo )
 							    pSdrView->EndUndo();
 							
-							pSdrView->SetMarkHandles();
+							pSdrView->RecreateAllMarkHandles();
 						    rBindings.Invalidate( SID_FONTWORK_SHAPE_TYPE );
 					    }
 				    }

Modified: openoffice/branches/alg/aw080/main/svx/source/unodraw/unopage.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/svx/source/unodraw/unopage.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/svx/source/unodraw/unopage.cxx (original)
+++ openoffice/branches/alg/aw080/main/svx/source/unodraw/unopage.cxx Fri Sep 13 12:52:57 2013
@@ -495,7 +495,7 @@ Reference< drawing::XShapeGroup > SAL_CA
 	mpView->ShowSdrPage( *mpPage );
 	_SelectObjectsInView( xShapes );
 	mpView->GroupMarked();
-	mpView->SetMarkHandles();
+	mpView->RecreateAllMarkHandles();
 
 	SdrObject* pObj = mpView->getSelectedIfSingle();
 		if( pObj )

Modified: openoffice/branches/alg/aw080/main/sw/inc/dcontact.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sw/inc/dcontact.hxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sw/inc/dcontact.hxx (original)
+++ openoffice/branches/alg/aw080/main/sw/inc/dcontact.hxx Fri Sep 13 12:52:57 2013
@@ -329,7 +329,7 @@ public:
 	// All overloaded methods which need to use the offset
 	virtual ::basegfx::B2DPolyPolygon TakeXorPoly() const;
 	virtual void AddToHdlList(SdrHdlList& rHdlList) const;
-	virtual void GetPlusHdl(SdrHdlList& rHdlList, SdrObject& rSdrObject, const SdrHdl& rHdl, sal_uInt32 nPlNum) const;
+	virtual void GetPlusHdl(SdrHdlList& rHdlList, const SdrObject& rSdrObject, const SdrHdl& rHdl, sal_uInt32 nPlNum) const;
 	virtual basegfx::B2DPoint GetSnapPoint(sal_uInt32 i) const;
 	virtual basegfx::B2DPoint GetObjectPoint(sal_uInt32 i) const;
     virtual void SetObjectPoint(const basegfx::B2DPoint& rPnt, sal_uInt32 i);

Modified: openoffice/branches/alg/aw080/main/sw/source/core/draw/dcontact.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sw/source/core/draw/dcontact.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sw/source/core/draw/dcontact.cxx (original)
+++ openoffice/branches/alg/aw080/main/sw/source/core/draw/dcontact.cxx Fri Sep 13 12:52:57 2013
@@ -2585,7 +2585,7 @@ basegfx::B2DPolyPolygon SwDrawVirtObj::T
 	return aRetval;
 }
 
-void SwDrawVirtObj::GetPlusHdl(SdrHdlList& rHdlList, SdrObject& rSdrObject, const SdrHdl& rHdl, sal_uInt32 nPlNum) const
+void SwDrawVirtObj::GetPlusHdl(SdrHdlList& rHdlList, const SdrObject& rSdrObject, const SdrHdl& rHdl, sal_uInt32 nPlNum) const
     {
 	rRefObj.GetPlusHdl(rHdlList, rSdrObject, rHdl, nPlNum);
     OSL_ENSURE(rHdlList.GetHdlCount(), "No PlusHdl added (!)");

Modified: openoffice/branches/alg/aw080/main/sw/source/core/draw/dflyobj.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg/aw080/main/sw/source/core/draw/dflyobj.cxx?rev=1522906&r1=1522905&r2=1522906&view=diff
==============================================================================
--- openoffice/branches/alg/aw080/main/sw/source/core/draw/dflyobj.cxx (original)
+++ openoffice/branches/alg/aw080/main/sw/source/core/draw/dflyobj.cxx Fri Sep 13 12:52:57 2013
@@ -971,7 +971,7 @@ sal_uInt32 SwVirtFlyDrawObj::GetPlusHdlC
 	return rRefObj.GetPlusHdlCount(rHdl);
 }
 
-void SwVirtFlyDrawObj::GetPlusHdl(SdrHdlList& rHdlList, SdrObject& rSdrObject, const SdrHdl& rHdl, sal_uInt32 nPlNum) const
+void SwVirtFlyDrawObj::GetPlusHdl(SdrHdlList& rHdlList, const SdrObject& rSdrObject, const SdrHdl& rHdl, sal_uInt32 nPlNum) const
 {
 	rRefObj.GetPlusHdl(rHdlList, rSdrObject, rHdl, nPlNum);
     OSL_ENSURE(rHdlList.GetHdlCount(), "No PlusHdl added (!)");



Mime
View raw message