diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | 70 |
1 files changed, 54 insertions, 16 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index 2701d6e..cf68ff4 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | |||
@@ -149,27 +149,47 @@ namespace OpenSim.Region.Framework.Scenes | |||
149 | /// <param name="remoteClient"></param> | 149 | /// <param name="remoteClient"></param> |
150 | public void SelectPrim(uint primLocalID, IClientAPI remoteClient) | 150 | public void SelectPrim(uint primLocalID, IClientAPI remoteClient) |
151 | { | 151 | { |
152 | /* | ||
153 | SceneObjectPart part = GetSceneObjectPart(primLocalID); | ||
154 | |||
155 | if (null == part) | ||
156 | return; | ||
157 | |||
158 | if (part.IsRoot) | ||
159 | { | ||
160 | SceneObjectGroup sog = part.ParentGroup; | ||
161 | sog.SendPropertiesToClient(remoteClient); | ||
162 | |||
163 | // A prim is only tainted if it's allowed to be edited by the person clicking it. | ||
164 | if (Permissions.CanEditObject(sog.UUID, remoteClient.AgentId) | ||
165 | || Permissions.CanMoveObject(sog.UUID, remoteClient.AgentId)) | ||
166 | { | ||
167 | sog.IsSelected = true; | ||
168 | EventManager.TriggerParcelPrimCountTainted(); | ||
169 | } | ||
170 | } | ||
171 | else | ||
172 | { | ||
173 | part.SendPropertiesToClient(remoteClient); | ||
174 | } | ||
175 | */ | ||
152 | SceneObjectPart part = GetSceneObjectPart(primLocalID); | 176 | SceneObjectPart part = GetSceneObjectPart(primLocalID); |
153 | 177 | ||
154 | if (null == part) | 178 | if (null == part) |
155 | return; | 179 | return; |
156 | 180 | ||
157 | if (part.IsRoot) | 181 | SceneObjectGroup sog = part.ParentGroup; |
158 | { | 182 | if (sog == null) |
159 | SceneObjectGroup sog = part.ParentGroup; | 183 | return; |
160 | sog.SendPropertiesToClient(remoteClient); | ||
161 | sog.IsSelected = true; | ||
162 | 184 | ||
163 | // A prim is only tainted if it's allowed to be edited by the person clicking it. | 185 | part.SendPropertiesToClient(remoteClient); |
164 | if (Permissions.CanEditObject(sog.UUID, remoteClient.AgentId) | 186 | |
165 | || Permissions.CanMoveObject(sog.UUID, remoteClient.AgentId)) | 187 | // A prim is only tainted if it's allowed to be edited by the person clicking it. |
166 | { | 188 | if (Permissions.CanEditObject(sog.UUID, remoteClient.AgentId) |
167 | EventManager.TriggerParcelPrimCountTainted(); | 189 | || Permissions.CanMoveObject(sog.UUID, remoteClient.AgentId)) |
168 | } | ||
169 | } | ||
170 | else | ||
171 | { | 190 | { |
172 | part.SendPropertiesToClient(remoteClient); | 191 | part.IsSelected = true; |
192 | EventManager.TriggerParcelPrimCountTainted(); | ||
173 | } | 193 | } |
174 | } | 194 | } |
175 | 195 | ||
@@ -222,7 +242,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
222 | SceneObjectPart part = GetSceneObjectPart(primLocalID); | 242 | SceneObjectPart part = GetSceneObjectPart(primLocalID); |
223 | if (part == null) | 243 | if (part == null) |
224 | return; | 244 | return; |
225 | 245 | /* | |
226 | // A deselect packet contains all the local prims being deselected. However, since selection is still | 246 | // A deselect packet contains all the local prims being deselected. However, since selection is still |
227 | // group based we only want the root prim to trigger a full update - otherwise on objects with many prims | 247 | // group based we only want the root prim to trigger a full update - otherwise on objects with many prims |
228 | // we end up sending many duplicate ObjectUpdates | 248 | // we end up sending many duplicate ObjectUpdates |
@@ -235,7 +255,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
235 | // handled by group, but by prim. Legacy cruft. | 255 | // handled by group, but by prim. Legacy cruft. |
236 | // TODO: Make selection flagging per prim! | 256 | // TODO: Make selection flagging per prim! |
237 | // | 257 | // |
238 | part.ParentGroup.IsSelected = false; | 258 | if (Permissions.CanEditObject(part.ParentGroup.UUID, remoteClient.AgentId) |
259 | || Permissions.CanMoveObject(part.ParentGroup.UUID, remoteClient.AgentId)) | ||
260 | part.ParentGroup.IsSelected = false; | ||
239 | 261 | ||
240 | if (part.ParentGroup.IsAttachment) | 262 | if (part.ParentGroup.IsAttachment) |
241 | isAttachment = true; | 263 | isAttachment = true; |
@@ -255,6 +277,22 @@ namespace OpenSim.Region.Framework.Scenes | |||
255 | part.UUID, remoteClient.AgentId)) | 277 | part.UUID, remoteClient.AgentId)) |
256 | EventManager.TriggerParcelPrimCountTainted(); | 278 | EventManager.TriggerParcelPrimCountTainted(); |
257 | } | 279 | } |
280 | */ | ||
281 | |||
282 | bool oldgprSelect = part.ParentGroup.IsSelected; | ||
283 | |||
284 | // This is wrong, wrong, wrong. Selection should not be | ||
285 | // handled by group, but by prim. Legacy cruft. | ||
286 | // TODO: Make selection flagging per prim! | ||
287 | // | ||
288 | if (Permissions.CanEditObject(part.ParentGroup.UUID, remoteClient.AgentId) | ||
289 | || Permissions.CanMoveObject(part.ParentGroup.UUID, remoteClient.AgentId)) | ||
290 | { | ||
291 | part.IsSelected = false; | ||
292 | if (!part.ParentGroup.IsAttachment && oldgprSelect != part.ParentGroup.IsSelected) | ||
293 | EventManager.TriggerParcelPrimCountTainted(); | ||
294 | } | ||
295 | |||
258 | } | 296 | } |
259 | 297 | ||
260 | public virtual void ProcessMoneyTransferRequest(UUID source, UUID destination, int amount, | 298 | public virtual void ProcessMoneyTransferRequest(UUID source, UUID destination, int amount, |