diff --git a/OpenSim/Region/Framework/Interfaces/IDynamicFloaterModule.cs b/OpenSim/Region/Framework/Interfaces/IDynamicFloaterModule.cs index 65c42ff4ac..7684ce30ad 100644 --- a/OpenSim/Region/Framework/Interfaces/IDynamicFloaterModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IDynamicFloaterModule.cs @@ -37,7 +37,7 @@ namespace OpenSim.Region.Framework.Interfaces public abstract class FloaterData { public abstract int Channel { get; } - public abstract string FloaterName { get; } + public abstract string FloaterName { get; set; } public virtual string XmlName { get; set; } public virtual string XmlText { get; set; } public virtual HandlerDelegate Handler { get; set; } diff --git a/OpenSim/Region/OptionalModules/ViewerSupport/DynamicFloaterModule.cs b/OpenSim/Region/OptionalModules/ViewerSupport/DynamicFloaterModule.cs index 4524a05093..e76e8f28fb 100644 --- a/OpenSim/Region/OptionalModules/ViewerSupport/DynamicFloaterModule.cs +++ b/OpenSim/Region/OptionalModules/ViewerSupport/DynamicFloaterModule.cs @@ -122,6 +122,9 @@ namespace OpenSim.Region.OptionalModules.ViewerSupport if (!m_floaters.ContainsKey(agentID)) m_floaters[agentID] = new Dictionary(); + if (m_floaters[agentID].ContainsKey(dialogData.Channel)) + return; + m_floaters[agentID].Add(dialogData.Channel, dialogData); string xml; @@ -218,7 +221,7 @@ namespace OpenSim.Region.OptionalModules.ViewerSupport } } - if (data.Handler(client, data, parts)) + if (data.Handler != null && data.Handler(client, data, parts)) { m_floaters[client.AgentId].Remove(data.Channel); SendToClient(sp, String.Format("># floater {0} destroy", data.FloaterName));