aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2011-07-19 03:01:54 +0100
committerJustin Clark-Casey (justincc)2011-07-19 03:01:54 +0100
commit430a4aeba8e98b8285ea3ebdf264baf429a55e22 (patch)
tree68ca3695b7422f0d73aaa45555a77f2babae51d7 /OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
parentremove undo state storage in a few places where it's pointless (diff)
downloadopensim-SC_OLD-430a4aeba8e98b8285ea3ebdf264baf429a55e22.zip
opensim-SC_OLD-430a4aeba8e98b8285ea3ebdf264baf429a55e22.tar.gz
opensim-SC_OLD-430a4aeba8e98b8285ea3ebdf264baf429a55e22.tar.bz2
opensim-SC_OLD-430a4aeba8e98b8285ea3ebdf264baf429a55e22.tar.xz
Fix undo for resizing linksets
This involves implementing a boolean in UndoState to signal whether the undo needs to be done for an entire group/linkset or just a single prim Resizing individual components of linksets is still dodgy. Resizing still has to be down twice, since for some reason the client is sending two multiobjectupdate packets on every resize except the very first. This applies to single prims and linksets. Need to look into this.
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs42
1 files changed, 25 insertions, 17 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 44d7ce3..5414cf2 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -3665,6 +3665,11 @@ namespace OpenSim.Region.Framework.Scenes
3665 3665
3666 public void StoreUndoState() 3666 public void StoreUndoState()
3667 { 3667 {
3668 StoreUndoState(false);
3669 }
3670
3671 public void StoreUndoState(bool forGroup)
3672 {
3668 if (!Undoing) 3673 if (!Undoing)
3669 { 3674 {
3670 if (!IgnoreUndoUpdate) 3675 if (!IgnoreUndoUpdate)
@@ -3678,6 +3683,7 @@ namespace OpenSim.Region.Framework.Scenes
3678 UndoState last = m_undo.Peek(); 3683 UndoState last = m_undo.Peek();
3679 if (last != null) 3684 if (last != null)
3680 { 3685 {
3686 // TODO: May need to fix for group comparison
3681 if (last.Compare(this)) 3687 if (last.Compare(this))
3682 { 3688 {
3683// m_log.DebugFormat( 3689// m_log.DebugFormat(
@@ -3690,12 +3696,12 @@ namespace OpenSim.Region.Framework.Scenes
3690 } 3696 }
3691 3697
3692// m_log.DebugFormat( 3698// m_log.DebugFormat(
3693// "[SCENE OBJECT PART]: Storing undo state for {0} {1}, initial stack size {2}", 3699// "[SCENE OBJECT PART]: Storing undo state for {0} {1}, forGroup {2}, initial stack size {3}",
3694// Name, LocalId, m_undo.Count); 3700// Name, LocalId, forGroup, m_undo.Count);
3695 3701
3696 if (m_parentGroup.GetSceneMaxUndo() > 0) 3702 if (m_parentGroup.GetSceneMaxUndo() > 0)
3697 { 3703 {
3698 UndoState nUndo = new UndoState(this); 3704 UndoState nUndo = new UndoState(this, forGroup);
3699 3705
3700 m_undo.Push(nUndo); 3706 m_undo.Push(nUndo);
3701 3707
@@ -3740,17 +3746,17 @@ namespace OpenSim.Region.Framework.Scenes
3740 3746
3741 if (m_undo.Count > 0) 3747 if (m_undo.Count > 0)
3742 { 3748 {
3743 UndoState nUndo = null;
3744
3745 if (m_parentGroup.GetSceneMaxUndo() > 0)
3746 {
3747 nUndo = new UndoState(this);
3748 }
3749
3750 UndoState goback = m_undo.Pop(); 3749 UndoState goback = m_undo.Pop();
3751 3750
3752 if (goback != null) 3751 if (goback != null)
3753 { 3752 {
3753 UndoState nUndo = null;
3754
3755 if (m_parentGroup.GetSceneMaxUndo() > 0)
3756 {
3757 nUndo = new UndoState(this, goback.ForGroup);
3758 }
3759
3754 goback.PlaybackState(this); 3760 goback.PlaybackState(this);
3755 3761
3756 if (nUndo != null) 3762 if (nUndo != null)
@@ -3772,17 +3778,19 @@ namespace OpenSim.Region.Framework.Scenes
3772// "[SCENE OBJECT PART]: Handling redo request for {0} {1}, stack size {2}", 3778// "[SCENE OBJECT PART]: Handling redo request for {0} {1}, stack size {2}",
3773// Name, LocalId, m_redo.Count); 3779// Name, LocalId, m_redo.Count);
3774 3780
3775 if (m_parentGroup.GetSceneMaxUndo() > 0)
3776 {
3777 UndoState nUndo = new UndoState(this);
3778
3779 m_undo.Push(nUndo);
3780 }
3781
3782 UndoState gofwd = m_redo.Pop(); 3781 UndoState gofwd = m_redo.Pop();
3783 3782
3784 if (gofwd != null) 3783 if (gofwd != null)
3784 {
3785 if (m_parentGroup.GetSceneMaxUndo() > 0)
3786 {
3787 UndoState nUndo = new UndoState(this, gofwd.ForGroup);
3788
3789 m_undo.Push(nUndo);
3790 }
3791
3785 gofwd.PlayfwdState(this); 3792 gofwd.PlayfwdState(this);
3793 }
3786 3794
3787// m_log.DebugFormat( 3795// m_log.DebugFormat(
3788// "[SCENE OBJECT PART]: Handled redo request for {0} {1}, stack size now {2}", 3796// "[SCENE OBJECT PART]: Handled redo request for {0} {1}, stack size now {2}",