OSDN Git Service

Cleanup of event handlers.
authorLatif Khalifa <latifer@streamgrid.net>
Tue, 2 Jun 2009 15:54:00 +0000 (15:54 +0000)
committerLatif Khalifa <latifer@streamgrid.net>
Tue, 2 Jun 2009 15:54:00 +0000 (15:54 +0000)
Mono compability improvements.
Tabs improvements.

git-svn-id: https://radegast.googlecode.com/svn/trunk@11 f7a694da-4d33-11de-9ad6-1127a62b9fcd

17 files changed:
Radegast/Core/IMTextManager.cs
Radegast/Core/RadegastInstance.cs
Radegast/Core/Tabs/SleekTab.cs
Radegast/GUI/Consoles/FriendsConsole.cs
Radegast/GUI/Consoles/GroupIMTabWindow.cs
Radegast/GUI/Consoles/IMTabWindow.cs
Radegast/GUI/Consoles/MainConsole.cs
Radegast/GUI/Consoles/MasterTab.cs
Radegast/GUI/Consoles/OutfitTextures.cs
Radegast/GUI/Consoles/SLImageHandler.cs
Radegast/GUI/Consoles/SearchConsole.cs
Radegast/GUI/Consoles/TPTabWindow.cs
Radegast/GUI/Consoles/TabsConsole.Designer.cs
Radegast/GUI/Consoles/TabsConsole.cs
Radegast/GUI/Consoles/TabsConsole.resx
Radegast/GUI/Dialogs/MainForm.Designer.cs
Radegast/GUI/Dialogs/MainForm.cs

index 30d5527..4cfcf2e 100644 (file)
@@ -133,6 +133,7 @@ namespace Radegast
         public void CleanUp()\r
         {\r
             RemoveNetcomEvents();\r
+            instance.Config.ConfigApplied -= new EventHandler<ConfigAppliedEventArgs>(Config_ConfigApplied);\r
 \r
             textBuffer.Clear();\r
             textBuffer = null;\r
index 67009ee..d2cce31 100644 (file)
@@ -88,14 +88,21 @@ namespace Radegast
 \r
         public void CleanUp()\r
         {\r
-            client.Groups.OnCurrentGroups -= new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);\r
-            client.Groups.OnGroupLeft -= new GroupManager.GroupLeftCallback(Groups_OnGroupLeft);\r
-            client.Groups.OnGroupJoined -= new GroupManager.GroupJoinedCallback(Groups_OnGroupJoined);\r
-            client.Groups.OnGroupProfile -= new GroupManager.GroupProfileCallback(Groups_OnGroupProfile);\r
-            client.Avatars.OnAvatarNames -= new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);\r
-\r
-            client = null;\r
-            netcom = null;\r
+            if (client != null)\r
+            {\r
+                client.Groups.OnCurrentGroups -= new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);\r
+                client.Groups.OnGroupLeft -= new GroupManager.GroupLeftCallback(Groups_OnGroupLeft);\r
+                client.Groups.OnGroupJoined -= new GroupManager.GroupJoinedCallback(Groups_OnGroupJoined);\r
+                client.Groups.OnGroupProfile -= new GroupManager.GroupProfileCallback(Groups_OnGroupProfile);\r
+                client.Avatars.OnAvatarNames -= new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);\r
+\r
+                client = null;\r
+            }\r
+\r
+            if (netcom != null)\r
+            {\r
+                netcom = null;\r
+            }\r
         }\r
 \r
         void Avatars_OnAvatarNames(Dictionary<UUID, string> names)\r
index cec20cf..c4215bf 100644 (file)
@@ -8,6 +8,7 @@ namespace Radegast
 {\r
     public partial class SleekTab\r
     {\r
+        private RadegastInstance instance;\r
         private ToolStripButton button;\r
         private Control control;\r
         private Button defaultControlButton;\r
@@ -27,8 +28,9 @@ namespace Radegast
         private bool detached = false;\r
         private bool merged = false;\r
 \r
-        public SleekTab(ToolStripButton button, Control control, string name, string label)\r
+        public SleekTab(RadegastInstance instance, ToolStripButton button, Control control, string name, string label)\r
         {\r
+            this.instance = instance;\r
             this.button = button;\r
             this.control = control;\r
             this.name = name;\r
@@ -39,17 +41,26 @@ namespace Radegast
         {\r
             if (!allowClose) return;\r
 \r
+            if (control != null)\r
+            {\r
+                if (instance.TabConsole.toolStripContainer1.ContentPanel.Contains(control))\r
+                {\r
+                    instance.TabConsole.toolStripContainer1.ContentPanel.Controls.Remove(control);\r
+                }\r
+                control.Dispose();\r
+                control = null;\r
+            }\r
+\r
             if (button != null)\r
             {\r
+                if (instance.TabConsole.tstTabs.Items.Contains(button))\r
+                {\r
+                    instance.TabConsole.tstTabs.Items.Remove(button);\r
+                }\r
                 button.Dispose();\r
                 button = null;\r
             }\r
 \r
-            if (control != null)\r
-            {\r
-                control.Dispose();\r
-                control = null;\r
-            }\r
 \r
             OnTabClosed(EventArgs.Empty);\r
         }\r
index aca6e21..a12b29a 100644 (file)
@@ -13,7 +13,7 @@ namespace Radegast
     public partial class FriendsConsole : UserControl\r
     {\r
         private RadegastInstance instance;\r
-        private GridClient client;\r
+        private GridClient client { get { return instance.Client; } }\r
         private FriendInfo selectedFriend;\r
 \r
         private bool settingFriend = false;\r
@@ -22,8 +22,8 @@ namespace Radegast
         {\r
             InitializeComponent();\r
             Disposed += new EventHandler(FriendsConsole_Disposed);\r
+\r
             this.instance = instance;\r
-            client = this.instance.Client;\r
 \r
             // Callbacks\r
             client.Friends.OnFriendOffline += new FriendsManager.FriendOfflineEvent(Friends_OnFriendOffline);\r
index 65c0f6f..2b1ad79 100644 (file)
@@ -14,34 +14,39 @@ namespace Radegast
     public partial class GroupIMTabWindow : UserControl\r
     {\r
         private RadegastInstance instance;\r
-        private RadegastNetcom netcom;\r
+        private GridClient client { get { return instance.Client; } }\r
+        private RadegastNetcom netcom { get { return instance.Netcom; } }\r
         private UUID session;\r
         private IMTextManager textManager;\r
-        private GridClient client;\r
-        private AgentManager.GroupChatJoinedCallback grpJoinCallback;\r
 \r
         ManualResetEvent WaitForSessionStart = new ManualResetEvent(false);\r
 \r
         public GroupIMTabWindow(RadegastInstance instance, UUID session)\r
         {\r
             InitializeComponent();\r
+            Disposed += new EventHandler(IMTabWindow_Disposed);\r
 \r
             this.instance = instance;\r
-            this.client = instance.Client;\r
-            netcom = this.instance.Netcom;\r
-\r
             this.session = session;\r
 \r
             textManager = new IMTextManager(this.instance, new RichTextBoxPrinter(rtbIMText), this.session);\r
-            this.Disposed += new EventHandler(IMTabWindow_Disposed);\r
             ApplyConfig(this.instance.Config.CurrentConfig);\r
+            \r
+            // Callbacks\r
             this.instance.Config.ConfigApplied += new EventHandler<ConfigAppliedEventArgs>(Config_ConfigApplied);\r
+            client.Self.OnGroupChatJoin += new AgentManager.GroupChatJoinedCallback(Self_OnGroupChatJoin);\r
+\r
             client.Self.RequestJoinGroupChat(session);\r
-            grpJoinCallback = new AgentManager.GroupChatJoinedCallback(Self_OnGroupChatJoin);\r
-            client.Self.OnGroupChatJoin += grpJoinCallback;\r
+        }\r
 \r
+        private void IMTabWindow_Disposed(object sender, EventArgs e)\r
+        {\r
+            this.instance.Config.ConfigApplied -= new EventHandler<ConfigAppliedEventArgs>(Config_ConfigApplied);\r
+            client.Self.OnGroupChatJoin -= new AgentManager.GroupChatJoinedCallback(Self_OnGroupChatJoin);\r
+            CleanUp();\r
         }\r
 \r
+\r
         void Self_OnGroupChatJoin(UUID groupChatSessionID, string sessionName, UUID tmpSessionID, bool success)\r
         {\r
             if (groupChatSessionID != session && tmpSessionID != session) {\r
@@ -99,16 +104,8 @@ namespace Radegast
             RefreshControls();\r
         }\r
 \r
-        private void IMTabWindow_Disposed(object sender, EventArgs e)\r
-        {\r
-            CleanUp();\r
-        }\r
-\r
         public void CleanUp()\r
         {\r
-            if (grpJoinCallback != null) {\r
-                client.Self.OnGroupChatJoin -= grpJoinCallback;\r
-            }\r
             textManager.CleanUp();\r
             textManager = null;\r
         }\r
index fe8d4cf..a963841 100644 (file)
@@ -13,7 +13,7 @@ namespace Radegast
     public partial class IMTabWindow : UserControl\r
     {\r
         private RadegastInstance instance;\r
-        private RadegastNetcom netcom;\r
+        private RadegastNetcom netcom { get { return instance.Netcom; } }\r
         private UUID target;\r
         private UUID session;\r
         private string toName;\r
@@ -23,21 +23,25 @@ namespace Radegast
         public IMTabWindow(RadegastInstance instance, UUID target, UUID session, string toName)\r
         {\r
             InitializeComponent();\r
+            Disposed += new EventHandler(IMTabWindow_Disposed);\r
 \r
             this.instance = instance;\r
-            netcom = this.instance.Netcom;\r
 \r
             this.target = target;\r
             this.session = session;\r
             this.toName = toName;\r
 \r
             textManager = new IMTextManager(this.instance, new RichTextBoxPrinter(rtbIMText), this.session);\r
-            this.Disposed += new EventHandler(IMTabWindow_Disposed);\r
-\r
             ApplyConfig(this.instance.Config.CurrentConfig);\r
             this.instance.Config.ConfigApplied += new EventHandler<ConfigAppliedEventArgs>(Config_ConfigApplied);\r
         }\r
 \r
+        private void IMTabWindow_Disposed(object sender, EventArgs e)\r
+        {\r
+            this.instance.Config.ConfigApplied -= new EventHandler<ConfigAppliedEventArgs>(Config_ConfigApplied);\r
+            CleanUp();\r
+        }\r
+\r
         private void Config_ConfigApplied(object sender, ConfigAppliedEventArgs e)\r
         {\r
             ApplyConfig(e.AppliedConfig);\r
@@ -57,6 +61,12 @@ namespace Radegast
             netcom.ClientDisconnected += new EventHandler<ClientDisconnectEventArgs>(netcom_ClientDisconnected);\r
         }\r
 \r
+        private void RemoveNetcomEvents()\r
+        {\r
+            netcom.ClientLoginStatus -= new EventHandler<ClientLoginEventArgs>(netcom_ClientLoginStatus);\r
+            netcom.ClientDisconnected -= new EventHandler<ClientDisconnectEventArgs>(netcom_ClientDisconnected);\r
+        }\r
+\r
         private void netcom_ClientLoginStatus(object sender, ClientLoginEventArgs e)\r
         {\r
             if (e.Status != LoginStatus.Success) return;\r
@@ -69,11 +79,6 @@ namespace Radegast
             RefreshControls();\r
         }\r
 \r
-        private void IMTabWindow_Disposed(object sender, EventArgs e)\r
-        {\r
-            CleanUp();\r
-        }\r
-\r
         public void CleanUp()\r
         {\r
             instance.TabConsole.RemoveTab(SessionId.ToString());\r
index f29378e..9578a6f 100644 (file)
@@ -13,23 +13,43 @@ namespace Radegast
     public partial class MainConsole : UserControl, ISleekTabControl\r
     {\r
         private RadegastInstance instance;\r
-        private RadegastNetcom netcom;\r
+        private RadegastNetcom netcom { get { return instance.Netcom; } }\r
 \r
         public MainConsole(RadegastInstance instance)\r
         {\r
             InitializeComponent();\r
+            Disposed += new EventHandler(MainConsole_Disposed);\r
 \r
             this.instance = instance;\r
-            netcom = this.instance.Netcom;\r
             AddNetcomEvents();\r
 \r
             cbxLocation.SelectedIndex = 0;\r
             InitializeConfig();\r
+        }\r
+\r
+        void MainConsole_Disposed(object sender, EventArgs e)\r
+        {\r
+            RemoveNetcomEvents();\r
+        }\r
+\r
+\r
+        private void AddNetcomEvents()\r
+        {\r
+            netcom.ClientLoggingIn += new EventHandler<OverrideEventArgs>(netcom_ClientLoggingIn);\r
+            netcom.ClientLoginStatus += new EventHandler<ClientLoginEventArgs>(netcom_ClientLoginStatus);\r
+            netcom.ClientLoggingOut += new EventHandler<OverrideEventArgs>(netcom_ClientLoggingOut);\r
+            netcom.ClientLoggedOut += new EventHandler(netcom_ClientLoggedOut);\r
+        }\r
 \r
-            this.instance.MainForm.FormClosing += new FormClosingEventHandler(MainForm_FormClosing);\r
+        private void RemoveNetcomEvents()\r
+        {\r
+            netcom.ClientLoggingIn -= new EventHandler<OverrideEventArgs>(netcom_ClientLoggingIn);\r
+            netcom.ClientLoginStatus -= new EventHandler<ClientLoginEventArgs>(netcom_ClientLoginStatus);\r
+            netcom.ClientLoggingOut -= new EventHandler<OverrideEventArgs>(netcom_ClientLoggingOut);\r
+            netcom.ClientLoggedOut -= new EventHandler(netcom_ClientLoggedOut);\r
         }\r
 \r
-        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)\r
+        private void SaveConfig()\r
         {\r
             instance.Config.CurrentConfig.FirstName = txtFirstName.Text;\r
             instance.Config.CurrentConfig.LastName = txtLastName.Text;\r
@@ -44,14 +64,7 @@ namespace Radegast
 \r
             instance.Config.CurrentConfig.LoginGrid = cbxGrid.SelectedIndex;\r
             instance.Config.CurrentConfig.LoginUri = txtCustomLoginUri.Text;\r
-        }\r
-\r
-        private void AddNetcomEvents()\r
-        {\r
-            netcom.ClientLoggingIn += new EventHandler<OverrideEventArgs>(netcom_ClientLoggingIn);\r
-            netcom.ClientLoginStatus += new EventHandler<ClientLoginEventArgs>(netcom_ClientLoginStatus);\r
-            netcom.ClientLoggingOut += new EventHandler<OverrideEventArgs>(netcom_ClientLoggingOut);\r
-            netcom.ClientLoggedOut += new EventHandler(netcom_ClientLoggedOut);\r
+            instance.Config.SaveCurrentConfig();\r
         }\r
 \r
         private void InitializeConfig()\r
@@ -197,6 +210,7 @@ namespace Radegast
 \r
         private void btnLogin_Click(object sender, EventArgs e)\r
         {\r
+            SaveConfig();\r
             switch (btnLogin.Text)\r
             {\r
                 case "Login": BeginLogin(); break;\r
index 2c8093a..a22b85d 100644 (file)
@@ -12,18 +12,17 @@ namespace Radegast
 {\r
     public partial class MasterTab : UserControl\r
     {\r
-        private GridClient client;\r
-        private RadegastNetcom netcom;\r
         private RadegastInstance instance;\r
+        private GridClient client { get { return instance.Client; } }\r
+        private RadegastNetcom netcom { get { return instance.Netcom; } }\r
         private Avatar avatar;\r
-        private AvatarManager.PointAtCallback callback;\r
-        private ObjectManager.ObjectPropertiesCallback objectCallback;\r
         private UUID selectedID;\r
         private Primitive selectedPrim;\r
 \r
         public MasterTab(RadegastInstance instance, Avatar avatar)\r
         {\r
             InitializeComponent();\r
+            Disposed += new EventHandler(MasterTab_Disposed);\r
 \r
             if (!instance.advancedDebugging)\r
             {\r
@@ -32,26 +31,18 @@ namespace Radegast
             }\r
 \r
             this.instance = instance;\r
-            this.netcom = this.instance.Netcom;\r
-            this.client = this.instance.Client;\r
             this.avatar = avatar;\r
-\r
-            callback = new AvatarManager.PointAtCallback(Avatars_OnPointAt);\r
-            client.Avatars.OnPointAt += callback;\r
-\r
-            objectCallback = new ObjectManager.ObjectPropertiesCallback(Objects_OnObjectProperties);\r
-            client.Objects.OnObjectProperties += objectCallback;\r
+            \r
+            // Callbacks\r
+            client.Avatars.OnPointAt += new AvatarManager.PointAtCallback(Avatars_OnPointAt);\r
+            client.Objects.OnObjectProperties += new ObjectManager.ObjectPropertiesCallback(Objects_OnObjectProperties);\r
 \r
         }\r
 \r
-        ~MasterTab()\r
+        void MasterTab_Disposed(object sender, EventArgs e)\r
         {\r
-            if (callback != null) {\r
-                client.Avatars.OnPointAt -= callback;\r
-            }\r
-            if (objectCallback != null) {\r
-                client.Objects.OnObjectProperties -= objectCallback;\r
-            }\r
+            client.Avatars.OnPointAt -= new AvatarManager.PointAtCallback(Avatars_OnPointAt);\r
+            client.Objects.OnObjectProperties -= new ObjectManager.ObjectPropertiesCallback(Objects_OnObjectProperties);\r
         }\r
 \r
         void Objects_OnObjectProperties(Simulator simulator, Primitive.ObjectProperties properties)\r
index 375bc3b..bcbc2db 100644 (file)
@@ -12,8 +12,6 @@ namespace Radegast
 {\r
     public partial class OutfitTextures : UserControl\r
     {\r
-        private GridClient client;\r
-        private RadegastNetcom netcom;\r
         private RadegastInstance instance;\r
         private Avatar avatar;\r
 \r
@@ -22,8 +20,6 @@ namespace Radegast
             InitializeComponent();\r
 \r
             this.instance = instance;\r
-            this.netcom = this.instance.Netcom;\r
-            this.client = this.instance.Client;\r
             this.avatar = avatar;\r
         }\r
 \r
@@ -50,7 +46,7 @@ namespace Radegast
                             break;\r
                     }\r
 \r
-                    if (true ||type != ImageType.Baked) {\r
+                    if (type != ImageType.Baked && face.TextureID != AppearanceManager.DEFAULT_AVATAR_TEXTURE) {\r
                         SLImageHandler img = new SLImageHandler(instance, face.TextureID, ((AppearanceManager.TextureIndex)j).ToString());\r
                         img.Location = new Point(0, nTextures++ * img.Height);\r
                         img.Dock = DockStyle.Top;\r
index 78e88fc..dda4d69 100644 (file)
@@ -15,9 +15,8 @@ namespace Radegast
 {\r
     public partial class SLImageHandler : UserControl\r
     {\r
-        private GridClient client;\r
-        private RadegastNetcom netcom;\r
         private RadegastInstance instance;\r
+        private GridClient client { get { return instance.Client; } }\r
         private UUID imageID;\r
         private ImageCache cache;\r
 \r
@@ -34,8 +33,6 @@ namespace Radegast
             }\r
 \r
             this.instance = instance;\r
-            this.netcom = this.instance.Netcom;\r
-            this.client = this.instance.Client;\r
             this.imageID = image;\r
             this.cache = this.instance.ImageCache;\r
             tboxImageId.Text = image.ToString();\r
index f01f0d2..19fb96d 100644 (file)
@@ -19,10 +19,8 @@ namespace Radegast
     public partial class SearchConsole : UserControl\r
     {\r
         private RadegastInstance instance;\r
-        private RadegastNetcom netcom;\r
-        private GridClient client;\r
+        private GridClient client { get { return instance.Client; } }\r
 \r
-        private TabsConsole tabConsole;\r
         private FindPeopleConsole console;\r
 \r
         private string lastQuery = string.Empty;\r
@@ -33,13 +31,12 @@ namespace Radegast
         public SearchConsole(RadegastInstance instance)\r
         {\r
             InitializeComponent();\r
+            Disposed += new EventHandler(SearchConsole_Disposed);\r
 \r
             this.instance = instance;\r
-            netcom = this.instance.Netcom;\r
-            client = this.instance.Client;\r
-            AddClientEvents();\r
 \r
-            tabConsole = this.instance.TabConsole;\r
+            // Callbacks\r
+            client.Directory.OnDirPeopleReply += new DirectoryManager.DirPeopleReplyCallback(Directory_OnDirPeopleReply);\r
 \r
             console = new FindPeopleConsole(instance, UUID.Random());\r
             console.Dock = DockStyle.Fill;\r
@@ -47,16 +44,17 @@ namespace Radegast
             pnlFindPeople.Controls.Add(console);\r
         }\r
 \r
-        private void console_SelectedIndexChanged(object sender, EventArgs e)\r
+        void SearchConsole_Disposed(object sender, EventArgs e)\r
         {\r
-            btnNewIM.Enabled = btnProfile.Enabled = (console.SelectedName != null);\r
+            client.Directory.OnDirPeopleReply -= new DirectoryManager.DirPeopleReplyCallback(Directory_OnDirPeopleReply);\r
         }\r
 \r
-        private void AddClientEvents()\r
+        private void console_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
-            client.Directory.OnDirPeopleReply += new DirectoryManager.DirPeopleReplyCallback(Directory_OnDirPeopleReply);\r
+            btnNewIM.Enabled = btnProfile.Enabled = (console.SelectedName != null);\r
         }\r
 \r
+\r
         //Separate thread\r
         private void Directory_OnDirPeopleReply(UUID queryID, List<DirectoryManager.AgentSearchData> matchedPeople)\r
         {\r
@@ -85,13 +83,13 @@ namespace Radegast
 \r
         private void btnNewIM_Click(object sender, EventArgs e)\r
         {\r
-            if (tabConsole.TabExists((client.Self.AgentID ^ console.SelectedAgentUUID).ToString()))\r
+            if (instance.TabConsole.TabExists((client.Self.AgentID ^ console.SelectedAgentUUID).ToString()))\r
             {\r
-                tabConsole.SelectTab((client.Self.AgentID ^ console.SelectedAgentUUID).ToString());\r
+                instance.TabConsole.SelectTab((client.Self.AgentID ^ console.SelectedAgentUUID).ToString());\r
                 return;\r
             }\r
 \r
-            tabConsole.AddIMTab(console.SelectedAgentUUID, client.Self.AgentID ^ console.SelectedAgentUUID, console.SelectedName);\r
+            instance.TabConsole.AddIMTab(console.SelectedAgentUUID, client.Self.AgentID ^ console.SelectedAgentUUID, console.SelectedName);\r
         }\r
 \r
         private void btnFind_Click(object sender, EventArgs e)\r
index e860a08..b00da26 100644 (file)
@@ -13,8 +13,7 @@ namespace Radegast
     public partial class TPTabWindow : UserControl\r
     {\r
         private RadegastInstance instance;\r
-        private RadegastNetcom netcom;\r
-        private GridClient client;\r
+        private GridClient client { get { return instance.Client; } }\r
         private string targetName;\r
         private UUID targetUUID;\r
 \r
@@ -23,8 +22,6 @@ namespace Radegast
             InitializeComponent();\r
 \r
             this.instance = instance;\r
-            netcom = this.instance.Netcom;\r
-            client = this.instance.Client;\r
             ProcessEventArgs(e);\r
         }\r
 \r
index 9a3e620..4f20469 100644 (file)
@@ -28,17 +28,22 @@ namespace Radegast
         /// </summary>\r
         private void InitializeComponent()\r
         {\r
+            this.components = new System.ComponentModel.Container();\r
             this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();\r
             this.tstTabs = new System.Windows.Forms.ToolStrip();\r
             this.tbtnCloseTab = new System.Windows.Forms.ToolStripButton();\r
-            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\r
             this.tbtnTabOptions = new System.Windows.Forms.ToolStripDropDownButton();\r
             this.tmnuMergeWith = new System.Windows.Forms.ToolStripMenuItem();\r
             this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();\r
             this.tmnuDetachTab = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.ctxTabs = new System.Windows.Forms.ContextMenuStrip(this.components);\r
+            this.ctxBtnDetach = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.ctxBtnClose = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.ctxBtnMerge = new System.Windows.Forms.ToolStripMenuItem();\r
             this.toolStripContainer1.TopToolStripPanel.SuspendLayout();\r
             this.toolStripContainer1.SuspendLayout();\r
             this.tstTabs.SuspendLayout();\r
+            this.ctxTabs.SuspendLayout();\r
             this.SuspendLayout();\r
             // \r
             // toolStripContainer1\r
@@ -73,14 +78,14 @@ namespace Radegast
             // \r
             // tstTabs\r
             // \r
+            this.tstTabs.ContextMenuStrip = this.ctxTabs;\r
             this.tstTabs.Dock = System.Windows.Forms.DockStyle.None;\r
+            this.tstTabs.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\r
             this.tstTabs.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
             this.tbtnCloseTab,\r
-            this.toolStripSeparator1,\r
             this.tbtnTabOptions});\r
             this.tstTabs.Location = new System.Drawing.Point(0, 0);\r
             this.tstTabs.Name = "tstTabs";\r
-            this.tstTabs.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;\r
             this.tstTabs.Size = new System.Drawing.Size(623, 25);\r
             this.tstTabs.Stretch = true;\r
             this.tstTabs.TabIndex = 0;\r
@@ -97,14 +102,9 @@ namespace Radegast
             this.tbtnCloseTab.Name = "tbtnCloseTab";\r
             this.tbtnCloseTab.Size = new System.Drawing.Size(23, 22);\r
             this.tbtnCloseTab.ToolTipText = "Close Tab";\r
+            this.tbtnCloseTab.Visible = false;\r
             this.tbtnCloseTab.Click += new System.EventHandler(this.tbtnCloseTab_Click);\r
             // \r
-            // toolStripSeparator1\r
-            // \r
-            this.toolStripSeparator1.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;\r
-            this.toolStripSeparator1.Name = "toolStripSeparator1";\r
-            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);\r
-            // \r
             // tbtnTabOptions\r
             // \r
             this.tbtnTabOptions.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;\r
@@ -118,27 +118,58 @@ namespace Radegast
             this.tbtnTabOptions.ImageTransparentColor = System.Drawing.Color.Magenta;\r
             this.tbtnTabOptions.Name = "tbtnTabOptions";\r
             this.tbtnTabOptions.Size = new System.Drawing.Size(29, 22);\r
+            this.tbtnTabOptions.Visible = false;\r
             this.tbtnTabOptions.Click += new System.EventHandler(this.tbtnTabOptions_Click);\r
             // \r
             // tmnuMergeWith\r
             // \r
             this.tmnuMergeWith.Name = "tmnuMergeWith";\r
-            this.tmnuMergeWith.Size = new System.Drawing.Size(140, 22);\r
+            this.tmnuMergeWith.Size = new System.Drawing.Size(152, 22);\r
             this.tmnuMergeWith.Text = "Merge With";\r
             // \r
             // toolStripMenuItem1\r
             // \r
             this.toolStripMenuItem1.Name = "toolStripMenuItem1";\r
-            this.toolStripMenuItem1.Size = new System.Drawing.Size(137, 6);\r
+            this.toolStripMenuItem1.Size = new System.Drawing.Size(149, 6);\r
             // \r
             // tmnuDetachTab\r
             // \r
             this.tmnuDetachTab.Image = global::Radegast.Properties.Resources.copy_16;\r
             this.tmnuDetachTab.Name = "tmnuDetachTab";\r
-            this.tmnuDetachTab.Size = new System.Drawing.Size(140, 22);\r
+            this.tmnuDetachTab.Size = new System.Drawing.Size(152, 22);\r
             this.tmnuDetachTab.Text = "Detach Tab";\r
             this.tmnuDetachTab.Click += new System.EventHandler(this.tmnuDetachTab_Click);\r
             // \r
+            // ctxTabs\r
+            // \r
+            this.ctxTabs.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
+            this.ctxBtnDetach,\r
+            this.ctxBtnMerge,\r
+            this.ctxBtnClose});\r
+            this.ctxTabs.Name = "ctxTabs";\r
+            this.ctxTabs.Size = new System.Drawing.Size(135, 70);\r
+            this.ctxTabs.Opening += new System.ComponentModel.CancelEventHandler(this.ctxTabs_Opening);\r
+            // \r
+            // ctxBtnDetach\r
+            // \r
+            this.ctxBtnDetach.Name = "ctxBtnDetach";\r
+            this.ctxBtnDetach.Size = new System.Drawing.Size(152, 22);\r
+            this.ctxBtnDetach.Text = "Detach";\r
+            this.ctxBtnDetach.Click += new System.EventHandler(this.tmnuDetachTab_Click);\r
+            // \r
+            // ctxBtnClose\r
+            // \r
+            this.ctxBtnClose.Name = "ctxBtnClose";\r
+            this.ctxBtnClose.Size = new System.Drawing.Size(152, 22);\r
+            this.ctxBtnClose.Text = "Close";\r
+            this.ctxBtnClose.Click += new System.EventHandler(this.tbtnCloseTab_Click);\r
+            // \r
+            // ctxBtnMerge\r
+            // \r
+            this.ctxBtnMerge.Name = "ctxBtnMerge";\r
+            this.ctxBtnMerge.Size = new System.Drawing.Size(152, 22);\r
+            this.ctxBtnMerge.Text = "Merge with";\r
+            // \r
             // TabsConsole\r
             // \r
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
@@ -154,19 +185,23 @@ namespace Radegast
             this.toolStripContainer1.PerformLayout();\r
             this.tstTabs.ResumeLayout(false);\r
             this.tstTabs.PerformLayout();\r
+            this.ctxTabs.ResumeLayout(false);\r
             this.ResumeLayout(false);\r
 \r
         }\r
 \r
         #endregion\r
 \r
-        private System.Windows.Forms.ToolStripContainer toolStripContainer1;\r
-        private System.Windows.Forms.ToolStrip tstTabs;\r
+        public System.Windows.Forms.ToolStripContainer toolStripContainer1;\r
+        public System.Windows.Forms.ToolStrip tstTabs;\r
         private System.Windows.Forms.ToolStripDropDownButton tbtnTabOptions;\r
         private System.Windows.Forms.ToolStripMenuItem tmnuMergeWith;\r
         private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;\r
         private System.Windows.Forms.ToolStripMenuItem tmnuDetachTab;\r
         private System.Windows.Forms.ToolStripButton tbtnCloseTab;\r
-        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;\r
+        private System.Windows.Forms.ContextMenuStrip ctxTabs;\r
+        private System.Windows.Forms.ToolStripMenuItem ctxBtnDetach;\r
+        private System.Windows.Forms.ToolStripMenuItem ctxBtnClose;\r
+        private System.Windows.Forms.ToolStripMenuItem ctxBtnMerge;\r
     }\r
 }\r
index 1ba450a..368061d 100644 (file)
@@ -14,8 +14,8 @@ namespace Radegast
     public partial class TabsConsole : UserControl\r
     {\r
         private RadegastInstance instance;\r
-        private RadegastNetcom netcom;\r
-        private GridClient client;\r
+        private GridClient client { get { return instance.Client; } }\r
+        private RadegastNetcom netcom { get { return instance.Netcom; } }\r
         private ChatTextManager mainChatManger;\r
 \r
         public Dictionary<string, SleekTab> tabs = new Dictionary<string, SleekTab>();\r
@@ -27,22 +27,55 @@ namespace Radegast
         public TabsConsole(RadegastInstance instance)\r
         {\r
             InitializeComponent();\r
+            Disposed += new EventHandler(TabsConsole_Disposed);\r
 \r
             this.instance = instance;\r
-            netcom = this.instance.Netcom;\r
-            client = this.instance.Client;\r
+\r
             AddNetcomEvents();\r
 \r
             InitializeMainTab();\r
             InitializeChatTab();\r
 \r
             ApplyConfig(this.instance.Config.CurrentConfig);\r
-            this.instance.Config.ConfigApplied += new EventHandler<ConfigAppliedEventArgs>(Config_ConfigApplied);\r
-            this.client.Self.OnScriptQuestion += new AgentManager.ScriptQuestionCallback(Self_OnScriptQuestion);\r
-            this.client.Self.OnScriptDialog += new AgentManager.ScriptDialogCallback(Self_OnScriptDialog);\r
+\r
+            // Callbacks\r
+            instance.Config.ConfigApplied += new EventHandler<ConfigAppliedEventArgs>(Config_ConfigApplied);\r
+            client.Self.OnScriptQuestion += new AgentManager.ScriptQuestionCallback(Self_OnScriptQuestion);\r
+            client.Self.OnScriptDialog += new AgentManager.ScriptDialogCallback(Self_OnScriptDialog);\r
             client.Inventory.OnObjectOffered += new InventoryManager.ObjectOfferedCallback(Inventory_OnObjectOffered);\r
         }\r
 \r
+        void TabsConsole_Disposed(object sender, EventArgs e)\r
+        {\r
+            RemoveNetcomEvents();\r
+            instance.Config.ConfigApplied -= new EventHandler<ConfigAppliedEventArgs>(Config_ConfigApplied);\r
+            client.Self.OnScriptQuestion -= new AgentManager.ScriptQuestionCallback(Self_OnScriptQuestion);\r
+            client.Self.OnScriptDialog -= new AgentManager.ScriptDialogCallback(Self_OnScriptDialog);\r
+            client.Inventory.OnObjectOffered -= new InventoryManager.ObjectOfferedCallback(Inventory_OnObjectOffered);\r
+        }\r
+\r
+        private void AddNetcomEvents()\r
+        {\r
+            netcom.ClientLoginStatus += new EventHandler<ClientLoginEventArgs>(netcom_ClientLoginStatus);\r
+            netcom.ClientLoggedOut += new EventHandler(netcom_ClientLoggedOut);\r
+            netcom.ClientDisconnected += new EventHandler<ClientDisconnectEventArgs>(netcom_ClientDisconnected);\r
+            netcom.ChatReceived += new EventHandler<ChatEventArgs>(netcom_ChatReceived);\r
+            netcom.ChatSent += new EventHandler<ChatSentEventArgs>(netcom_ChatSent);\r
+            netcom.AlertMessageReceived += new EventHandler<AlertMessageEventArgs>(netcom_AlertMessageReceived);\r
+            netcom.InstantMessageReceived += new EventHandler<InstantMessageEventArgs>(netcom_InstantMessageReceived);\r
+        }\r
+\r
+        private void RemoveNetcomEvents()\r
+        {\r
+            netcom.ClientLoginStatus -= new EventHandler<ClientLoginEventArgs>(netcom_ClientLoginStatus);\r
+            netcom.ClientLoggedOut -= new EventHandler(netcom_ClientLoggedOut);\r
+            netcom.ClientDisconnected -= new EventHandler<ClientDisconnectEventArgs>(netcom_ClientDisconnected);\r
+            netcom.ChatReceived -= new EventHandler<ChatEventArgs>(netcom_ChatReceived);\r
+            netcom.ChatSent -= new EventHandler<ChatSentEventArgs>(netcom_ChatSent);\r
+            netcom.AlertMessageReceived -= new EventHandler<AlertMessageEventArgs>(netcom_AlertMessageReceived);\r
+            netcom.InstantMessageReceived -= new EventHandler<InstantMessageEventArgs>(netcom_InstantMessageReceived);\r
+        }\r
+\r
         bool Inventory_OnObjectOffered(InstantMessage offerDetails, AssetType type, UUID objectID, bool fromTask)\r
         {\r
             DisplayNotificationInChat(offerDetails.FromAgentName + " gave you " + offerDetails.Message);\r
@@ -72,17 +105,6 @@ namespace Radegast
                 tstTabs.RenderMode = ToolStripRenderMode.ManagerRenderMode;\r
         }\r
 \r
-        private void AddNetcomEvents()\r
-        {\r
-            netcom.ClientLoginStatus += new EventHandler<ClientLoginEventArgs>(netcom_ClientLoginStatus);\r
-            netcom.ClientLoggedOut += new EventHandler(netcom_ClientLoggedOut);\r
-            netcom.ClientDisconnected += new EventHandler<ClientDisconnectEventArgs>(netcom_ClientDisconnected);\r
-            netcom.ChatReceived += new EventHandler<ChatEventArgs>(netcom_ChatReceived);\r
-            netcom.ChatSent += new EventHandler<ChatSentEventArgs>(netcom_ChatSent);\r
-            netcom.AlertMessageReceived += new EventHandler<AlertMessageEventArgs>(netcom_AlertMessageReceived);\r
-            netcom.InstantMessageReceived += new EventHandler<InstantMessageEventArgs>(netcom_InstantMessageReceived);\r
-        }\r
-\r
         private void netcom_ClientLoginStatus(object sender, ClientLoginEventArgs e)\r
         {\r
             if (e.Status != LoginStatus.Success) return;\r
@@ -94,6 +116,9 @@ namespace Radegast
             if (selectedTab.Name == "main")\r
                 tabs["chat"].Select();\r
 \r
+            tabs["main"].AllowClose = true;\r
+            tabs["main"].Close();\r
+\r
             client.Self.RetrieveInstantMessages();\r
         }\r
 \r
@@ -103,7 +128,9 @@ namespace Radegast
             DisposeInventoryTab();\r
             DisposeFriendsTab();\r
 \r
-            tabs["main"].Select();\r
+            tabs["chat"].Select();\r
+            DisplayNotificationInChat("Logged out.");\r
+            \r
         }\r
 \r
         private void netcom_ClientDisconnected(object sender, ClientDisconnectEventArgs e)\r
@@ -114,7 +141,8 @@ namespace Radegast
             DisposeInventoryTab();\r
             DisposeFriendsTab();\r
 \r
-            tabs["main"].Select();\r
+            tabs["chat"].Select();\r
+            DisplayNotificationInChat("Disconnected.");\r
         }\r
 \r
         private void netcom_AlertMessageReceived(object sender, AlertMessageEventArgs e)\r
@@ -392,7 +420,6 @@ namespace Radegast
             button.AutoToolTip = false;\r
             button.Tag = tab.Name;\r
             button.Click += new EventHandler(TabButtonClick);\r
-\r
             tab.Button = button;\r
             tabs.Add(tab.Name, tab);\r
         }\r
@@ -406,7 +433,7 @@ namespace Radegast
             button.Tag = name.ToLower();\r
             button.Click += new EventHandler(TabButtonClick);\r
 \r
-            SleekTab tab = new SleekTab(button, control, name.ToLower(), label);\r
+            SleekTab tab = new SleekTab(instance, button, control, name.ToLower(), label);\r
             tab.TabAttached += new EventHandler(tab_TabAttached);\r
             tab.TabDetached += new EventHandler(tab_TabDetached);\r
             tab.TabSelected += new EventHandler(tab_TabSelected);\r
@@ -463,6 +490,11 @@ namespace Radegast
 \r
         public void RemoveTabEntry(SleekTab tab)\r
         {\r
+            if (tstTabs.Items.Contains(tab.Button))\r
+            {\r
+                tstTabs.Items.Remove(tab.Button);\r
+            }\r
+\r
             tab.Button.Dispose();\r
             tabs.Remove(tab.Name);\r
         }\r
@@ -708,5 +740,55 @@ namespace Radegast
         {\r
             owner = this.FindForm();\r
         }\r
+\r
+        private void ctxTabs_Opening(object sender, CancelEventArgs e)\r
+        {\r
+            Point pt = this.PointToClient(Cursor.Position);\r
+            ToolStripItem stripItem = tstTabs.GetItemAt(pt);\r
+\r
+            if (stripItem == null)\r
+            {\r
+                e.Cancel = true;\r
+            }\r
+            else\r
+            {\r
+                tabs[stripItem.Tag.ToString()].Select();\r
+\r
+                ctxBtnClose.Enabled = selectedTab.AllowClose;\r
+                ctxBtnDetach.Enabled = selectedTab.AllowDetach;\r
+                ctxBtnMerge.Enabled = selectedTab.AllowMerge;\r
+                ctxBtnMerge.DropDown.Items.Clear();\r
+\r
+                if (!ctxBtnClose.Enabled && !ctxBtnDetach.Enabled && !ctxBtnMerge.Enabled)\r
+                {\r
+                    e.Cancel = true;\r
+                    return;\r
+                }\r
+\r
+                if (!selectedTab.AllowMerge) return;\r
+                if (!selectedTab.Merged)\r
+                {\r
+                    ctxBtnMerge.Text = "Merge With";\r
+\r
+                    List<SleekTab> otherTabs = GetOtherTabs();\r
+\r
+                    ctxBtnMerge.Enabled = (otherTabs.Count > 0);\r
+                    if (!ctxBtnMerge.Enabled) return;\r
+\r
+                    foreach (SleekTab tab in otherTabs)\r
+                    {\r
+                        ToolStripItem item = ctxBtnMerge.DropDown.Items.Add(tab.Label);\r
+                        item.Tag = tab.Name;\r
+                        item.Click += new EventHandler(MergeItemClick);\r
+                    }\r
+                }\r
+                else\r
+                {\r
+                    ctxBtnMerge.Text = "Split";\r
+                    ctxBtnMerge.Click += new EventHandler(SplitClick);\r
+                }\r
+\r
+            }\r
+        }\r
     }\r
 }\r
index 08ef8e3..0cbedc1 100644 (file)
   <metadata name="tstTabs.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
     <value>17, 17</value>\r
   </metadata>\r
+  <metadata name="ctxTabs.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+    <value>107, 17</value>\r
+  </metadata>\r
 </root>
\ No newline at end of file
index eb55790..72a7b8e 100644 (file)
@@ -52,6 +52,8 @@ namespace Radegast
             this.tbtnControl = new System.Windows.Forms.ToolStripDropDownButton();\r
             this.tmnuControlFly = new System.Windows.Forms.ToolStripMenuItem();\r
             this.tmnuControlAlwaysRun = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.groundSitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
+            this.standToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
             this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\r
             this.tbnTeleprotMulti = new System.Windows.Forms.ToolStripDropDownButton();\r
             this.mapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
@@ -72,8 +74,6 @@ namespace Radegast
             this.tlblParcel = new System.Windows.Forms.ToolStripStatusLabel();\r
             this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();\r
             this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);\r
-            this.standToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
-            this.groundSitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
             this.toolStrip1.SuspendLayout();\r
             this.statusStrip1.SuspendLayout();\r
             this.toolStripContainer1.TopToolStripPanel.SuspendLayout();\r
@@ -83,6 +83,7 @@ namespace Radegast
             // toolStrip1\r
             // \r
             this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None;\r
+            this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\r
             this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
             this.tbtnSLeek,\r
             this.toolStripSeparator1,\r
@@ -93,7 +94,6 @@ namespace Radegast
             this.tbnTeleprotMulti});\r
             this.toolStrip1.Location = new System.Drawing.Point(0, 0);\r
             this.toolStrip1.Name = "toolStrip1";\r
-            this.toolStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;\r
             this.toolStrip1.Size = new System.Drawing.Size(738, 25);\r
             this.toolStrip1.Stretch = true;\r
             this.toolStrip1.TabIndex = 8;\r
@@ -224,7 +224,7 @@ namespace Radegast
             // \r
             this.tmnuControlFly.CheckOnClick = true;\r
             this.tmnuControlFly.Name = "tmnuControlFly";\r
-            this.tmnuControlFly.Size = new System.Drawing.Size(152, 22);\r
+            this.tmnuControlFly.Size = new System.Drawing.Size(146, 22);\r
             this.tmnuControlFly.Text = "Fly";\r
             this.tmnuControlFly.Click += new System.EventHandler(this.tmnuControlFly_Click);\r
             // \r
@@ -232,10 +232,24 @@ namespace Radegast
             // \r
             this.tmnuControlAlwaysRun.CheckOnClick = true;\r
             this.tmnuControlAlwaysRun.Name = "tmnuControlAlwaysRun";\r
-            this.tmnuControlAlwaysRun.Size = new System.Drawing.Size(152, 22);\r
+            this.tmnuControlAlwaysRun.Size = new System.Drawing.Size(146, 22);\r
             this.tmnuControlAlwaysRun.Text = "Always Run";\r
             this.tmnuControlAlwaysRun.Click += new System.EventHandler(this.tmnuControlAlwaysRun_Click);\r
             // \r
+            // groundSitToolStripMenuItem\r
+            // \r
+            this.groundSitToolStripMenuItem.Name = "groundSitToolStripMenuItem";\r
+            this.groundSitToolStripMenuItem.Size = new System.Drawing.Size(146, 22);\r
+            this.groundSitToolStripMenuItem.Text = "Sit on ground";\r
+            this.groundSitToolStripMenuItem.Click += new System.EventHandler(this.groundSitToolStripMenuItem_Click);\r
+            // \r
+            // standToolStripMenuItem\r
+            // \r
+            this.standToolStripMenuItem.Name = "standToolStripMenuItem";\r
+            this.standToolStripMenuItem.Size = new System.Drawing.Size(146, 22);\r
+            this.standToolStripMenuItem.Text = "Stand";\r
+            this.standToolStripMenuItem.Click += new System.EventHandler(this.standToolStripMenuItem_Click);\r
+            // \r
             // toolStripSeparator2\r
             // \r
             this.toolStripSeparator2.Name = "toolStripSeparator2";\r
@@ -425,20 +439,6 @@ namespace Radegast
             this.toolTip1.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info;\r
             this.toolTip1.ToolTipTitle = "Detailed Info";\r
             // \r
-            // standToolStripMenuItem\r
-            // \r
-            this.standToolStripMenuItem.Name = "standToolStripMenuItem";\r
-            this.standToolStripMenuItem.Size = new System.Drawing.Size(152, 22);\r
-            this.standToolStripMenuItem.Text = "Stand";\r
-            this.standToolStripMenuItem.Click += new System.EventHandler(this.standToolStripMenuItem_Click);\r
-            // \r
-            // groundSitToolStripMenuItem\r
-            // \r
-            this.groundSitToolStripMenuItem.Name = "groundSitToolStripMenuItem";\r
-            this.groundSitToolStripMenuItem.Size = new System.Drawing.Size(152, 22);\r
-            this.groundSitToolStripMenuItem.Text = "Sit on ground";\r
-            this.groundSitToolStripMenuItem.Click += new System.EventHandler(this.groundSitToolStripMenuItem_Click);\r
-            // \r
             // frmMain\r
             // \r
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
@@ -469,7 +469,6 @@ namespace Radegast
 \r
         #endregion\r
 \r
-        private System.Windows.Forms.ToolStrip toolStrip1;\r
         private System.Windows.Forms.ToolStripDropDownButton tbtnSLeek;\r
         private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;\r
         private System.Windows.Forms.ToolStripMenuItem tmnuExit;\r
@@ -481,7 +480,6 @@ namespace Radegast
         private System.Windows.Forms.ToolStripDropDownButton tbtnDebug;\r
         private System.Windows.Forms.ToolStripMenuItem tmnuPrefs;\r
         private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;\r
-        private System.Windows.Forms.ToolStripContainer toolStripContainer1;\r
         private System.Windows.Forms.ToolStripMenuItem tmnuDebugLog;\r
         private System.Windows.Forms.ToolStripDropDownButton tbtnStatus;\r
         private System.Windows.Forms.ToolStripMenuItem tmnuStatusAway;\r
@@ -507,6 +505,8 @@ namespace Radegast
         private System.Windows.Forms.ToolStripMenuItem groupsToolStripMenuItem;\r
         private System.Windows.Forms.ToolStripMenuItem standToolStripMenuItem;\r
         private System.Windows.Forms.ToolStripMenuItem groundSitToolStripMenuItem;\r
+        public System.Windows.Forms.ToolStrip toolStrip1;\r
+        public System.Windows.Forms.ToolStripContainer toolStripContainer1;\r
     }\r
 }\r
 \r
index 488ca27..bc250c1 100644 (file)
@@ -168,10 +168,16 @@ namespace Radegast
         private void frmMain_FormClosing(object sender, FormClosingEventArgs e)\r
         {\r
             if (debugLogForm != null) {\r
-                debugLogForm.Dispose();\r
                 debugLogForm.Close();\r
                 debugLogForm = null;\r
             };\r
+\r
+            if (worldMap != null)\r
+            {\r
+                worldMap.Close();\r
+                worldMap = null;\r
+            }\r
+\r
             if (netcom.IsLoggedIn) netcom.Logout();\r
 \r
             instance.Config.CurrentConfig.MainWindowState = (int)this.WindowState;\r