Blame SOURCES/0001-time-stamp-object-selections-and-use-newest-as-ref-f.patch

a9add1
From aff2d164a982917c57be5e8a18c6c1366b836c09 Mon Sep 17 00:00:00 2001
a9add1
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
a9add1
Date: Fri, 28 Aug 2015 15:13:41 +0100
a9add1
Subject: [PATCH] time stamp object selections and use newest as ref for
a9add1
 equalization
a9add1
a9add1
Change-Id: I1bf22ddbaf263b240288f70d03d6949611f86b69
a9add1
---
a9add1
 include/svx/svdmark.hxx        |  8 ++++++++
a9add1
 svx/source/svdraw/svdedtv2.cxx | 18 ++++++++++++++++--
a9add1
 svx/source/svdraw/svdmark.cxx  | 12 +++++++++---
a9add1
 3 files changed, 33 insertions(+), 5 deletions(-)
a9add1
a9add1
diff --git a/include/svx/svdmark.hxx b/include/svx/svdmark.hxx
a9add1
index cba0a75..aee9dd7 100644
a9add1
--- a/include/svx/svdmark.hxx
a9add1
+++ b/include/svx/svdmark.hxx
a9add1
@@ -42,7 +42,10 @@ typedef std::set<sal_uInt16> SdrUShortCont;
a9add1
 // Everything a View needs to know about a selected object
a9add1
 class SVX_DLLPUBLIC SdrMark : public sdr::ObjectUser
a9add1
 {
a9add1
+private:
a9add1
+    void setTime();
a9add1
 protected:
a9add1
+    sal_Int64                                           mnTimeStamp;
a9add1
     SdrObject*                                          mpSelectedSdrObject; // the selected object
a9add1
     SdrPageView*                                        mpPageView;
a9add1
     SdrUShortCont*                                      mpPoints;     // Selected Points
a9add1
@@ -145,6 +148,11 @@ public:
a9add1
 
a9add1
         return mpGluePoints;
a9add1
     }
a9add1
+
a9add1
+    sal_Int64 getTimeStamp() const
a9add1
+    {
a9add1
+        return mnTimeStamp;
a9add1
+    }
a9add1
 };
a9add1
 
a9add1
 class SVX_DLLPUBLIC SdrMarkList
a9add1
diff --git a/svx/source/svdraw/svdedtv2.cxx b/svx/source/svdraw/svdedtv2.cxx
a9add1
index 719355d..090efa7 100644
a9add1
--- a/svx/source/svdraw/svdedtv2.cxx
a9add1
+++ b/svx/source/svdraw/svdedtv2.cxx
a9add1
@@ -1181,7 +1181,19 @@ void SdrEditView::EqualizeMarkedObjects(bool bWidth)
a9add1
     if (nMarked < 2)
a9add1
         return;
a9add1
 
a9add1
-    SdrObject* pLastSelectedObj = rMarkList.GetMark(nMarked-1)->GetMarkedSdrObj();
a9add1
+    size_t nLastSelected = 0;
a9add1
+    sal_Int64 nLastSelectedTime = rMarkList.GetMark(0)->getTimeStamp();
a9add1
+    for (size_t a = 1; a < nMarked; ++a)
a9add1
+    {
a9add1
+        sal_Int64 nCandidateTime = rMarkList.GetMark(a)->getTimeStamp();
a9add1
+        if (nCandidateTime > nLastSelectedTime)
a9add1
+        {
a9add1
+            nLastSelectedTime = nCandidateTime;
a9add1
+            nLastSelected = a;
a9add1
+        }
a9add1
+    }
a9add1
+
a9add1
+    SdrObject* pLastSelectedObj = rMarkList.GetMark(nLastSelected)->GetMarkedSdrObj();
a9add1
     Size aLastRectSize(pLastSelectedObj->GetLogicRect().GetSize());
a9add1
 
a9add1
     const bool bUndo = IsUndoEnabled();
a9add1
@@ -1189,8 +1201,10 @@ void SdrEditView::EqualizeMarkedObjects(bool bWidth)
a9add1
     if (bUndo)
a9add1
         BegUndo();
a9add1
 
a9add1
-    for (size_t a = 0; a < nMarked-1; ++a)
a9add1
+    for (size_t a = 0; a < nMarked; ++a)
a9add1
     {
a9add1
+        if (a == nLastSelected)
a9add1
+            continue;
a9add1
         SdrMark* pM = rMarkList.GetMark(a);
a9add1
         SdrObject* pObj = pM->GetMarkedSdrObj();
a9add1
         Rectangle aLogicRect(pObj->GetLogicRect());
a9add1
diff --git a/svx/source/svdraw/svdmark.cxx b/svx/source/svdraw/svdmark.cxx
a9add1
index 7ddde61..8b7f3e09c 100644
a9add1
--- a/svx/source/svdraw/svdmark.cxx
a9add1
+++ b/svx/source/svdraw/svdmark.cxx
a9add1
@@ -38,8 +38,12 @@
a9add1
 #include <svl/SfxBroadcaster.hxx>
a9add1
 #include <svx/svdoedge.hxx>
a9add1
 
a9add1
-
a9add1
-
a9add1
+void SdrMark::setTime()
a9add1
+{
a9add1
+    TimeValue aNow;
a9add1
+    osl_getSystemTime(&aNow);
a9add1
+    mnTimeStamp = sal_Int64(aNow.Seconds) * 1000000000L + aNow.Nanosec;
a9add1
+}
a9add1
 
a9add1
 SdrMark::SdrMark(SdrObject* pNewObj, SdrPageView* pNewPageView)
a9add1
 :   mpSelectedSdrObject(pNewObj),
a9add1
@@ -55,10 +59,12 @@ SdrMark::SdrMark(SdrObject* pNewObj, SdrPageView* pNewPageView)
a9add1
     {
a9add1
         mpSelectedSdrObject->AddObjectUser( *this );
a9add1
     }
a9add1
+    setTime();
a9add1
 }
a9add1
 
a9add1
 SdrMark::SdrMark(const SdrMark& rMark)
a9add1
 :   ObjectUser(),
a9add1
+    mnTimeStamp(0),
a9add1
     mpSelectedSdrObject(0L),
a9add1
     mpPageView(0L),
a9add1
     mpPoints(0L),
a9add1
@@ -117,10 +123,10 @@ void SdrMark::SetMarkedSdrObj(SdrObject* pNewObj)
a9add1
     }
a9add1
 }
a9add1
 
a9add1
-
a9add1
 SdrMark& SdrMark::operator=(const SdrMark& rMark)
a9add1
 {
a9add1
     SetMarkedSdrObj(rMark.mpSelectedSdrObject);
a9add1
+    mnTimeStamp = rMark.mnTimeStamp;
a9add1
     mpPageView = rMark.mpPageView;
a9add1
     mbCon1 = rMark.mbCon1;
a9add1
     mbCon2 = rMark.mbCon2;
a9add1
-- 
a9add1
2.4.0
a9add1