Disposed += new EventHandler(frmMap_Disposed);\r
\r
instance = i;\r
+ instance.ClientChanged += new EventHandler<ClientChangedEventArgs>(instance_ClientChanged);\r
+\r
try\r
{\r
map = new WebBrowser();\r
}\r
\r
// Register callbacks\r
+ RegisterClientEvents(client);\r
+ }\r
+\r
+ private void RegisterClientEvents(GridClient client)\r
+ {\r
client.Grid.GridRegion += new EventHandler<GridRegionEventArgs>(Grid_GridRegion);\r
client.Self.TeleportProgress += new EventHandler<TeleportEventArgs>(Self_TeleportProgress);\r
client.Network.OnCurrentSimChanged += new NetworkManager.CurrentSimChangedCallback(Network_OnCurrentSimChanged);\r
}\r
\r
- void frmMap_Disposed(object sender, EventArgs e)\r
+ private void UnregisterClientEvents(GridClient client)\r
{\r
- // Unregister callbacks\r
client.Grid.GridRegion -= new EventHandler<GridRegionEventArgs>(Grid_GridRegion);\r
client.Self.TeleportProgress -= new EventHandler<TeleportEventArgs>(Self_TeleportProgress);\r
client.Network.OnCurrentSimChanged -= new NetworkManager.CurrentSimChangedCallback(Network_OnCurrentSimChanged);\r
+ }\r
+\r
+ void instance_ClientChanged(object sender, ClientChangedEventArgs e)\r
+ {\r
+ UnregisterClientEvents(e.OldClient);\r
+ RegisterClientEvents(client);\r
+ }\r
+\r
+\r
+ void frmMap_Disposed(object sender, EventArgs e)\r
+ {\r
+ // Unregister callbacks\r
+ UnregisterClientEvents(client);\r
\r
- if (map != null)\r
+ if (map != null && !instance.MonoRuntime)\r
{\r
map.Dispose();\r
map = null;\r
tab.AllowDetach = true;\r
tab.Visible = false;\r
\r
- tab = AddTab("map", "Map", new MapConsole(instance));\r
- tab.AllowClose = false;\r
- tab.AllowDetach = true;\r
- tab.Visible = false;\r
+ if (!TabExists("map"))\r
+ {\r
+ tab = AddTab("map", "Map", new MapConsole(instance));\r
+ tab.AllowClose = false;\r
+ tab.AllowDetach = true;\r
+ tab.Visible = false;\r
+ }\r
\r
}\r
\r
/// </summary>\r
private void DisposeOnlineTabs()\r
{\r
- ForceCloseTab("map");\r
+ // Mono crashes if we try to open map for the second time\r
+ if (!instance.MonoRuntime)\r
+ ForceCloseTab("map");\r
+ else\r
+ tabs["map"].Hide();\r
+\r
ForceCloseTab("search");\r
ForceCloseTab("inventory");\r
ForceCloseTab("groups");\r
\r
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)\r
{\r
+ if (statusTimer != null)\r
+ {\r
+ statusTimer.Stop();\r
+ statusTimer.Dispose();\r
+ statusTimer = null;\r
+ }\r
+\r
if (mediaConsole != null)\r
{\r
if (tabsConsole.TabExists("media"))\r
\r
private void statusTimer_Elapsed(object sender, ElapsedEventArgs e)\r
{\r
- RefreshWindowTitle();\r
- RefreshStatusBar();\r
+ // Mono sometimes fires timer after is's disposed\r
+ try\r
+ {\r
+ RefreshWindowTitle();\r
+ RefreshStatusBar();\r
+ }\r
+ catch { }\r
}\r
#endregion\r
\r