From 4e39c6d272914ae6860e6becbbcfaf7cd5124b7d Mon Sep 17 00:00:00 2001 From: Date: Mon, 16 Nov 2009 06:20:28 +0000 Subject: [PATCH] OpenMetaverse.GUI: Fixed some problems caused by rapidly clicking Login/Logout in a LoginPanel git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@3227 52acb1d6-8a22-11de-b505-999d5b087335 --- OpenMetaverse.GUI/LoginPanel.cs | 63 +++++++++++++++++++-------------- OpenMetaverse.GUI/MiniMap.cs | 2 ++ 2 files changed, 38 insertions(+), 27 deletions(-) diff --git a/OpenMetaverse.GUI/LoginPanel.cs b/OpenMetaverse.GUI/LoginPanel.cs index 69e927fc..5ac2715b 100644 --- a/OpenMetaverse.GUI/LoginPanel.cs +++ b/OpenMetaverse.GUI/LoginPanel.cs @@ -182,10 +182,37 @@ namespace OpenMetaverse.GUI /// public void Login() { + if (_Client == null) return; + + if (_LoginParams.MethodName == null) + _LoginParams = Client.Network.DefaultLoginParams("", "", "", "", ""); + + SetText(btnLogin, "Logout"); + SetText(listNames, _LoginParams.FirstName + " " + _LoginParams.LastName); + SetText(txtPass, _LoginParams.Password); + + if (LoginThread != null) + { + LoginThread.Abort(); + LoginThread = null; + } LoginThread = new Thread(new ThreadStart(delegate() { _Client.Network.Login(_LoginParams); })); LoginThread.Start(); } + + private void SetText(object control, string text) + { + if (this.InvokeRequired) + this.BeginInvoke(new MethodInvoker(delegate() { SetText(control, text); })); + else + { + if (control is Button) ((Button)control).Text = text; + else if (control is ComboBox) ((ComboBox)control).Text = text; + else if (control is TextBox) ((TextBox)control).Text = text; + } + } + private void InitializeClient(GridClient client) { _Client = client; @@ -204,15 +231,12 @@ namespace OpenMetaverse.GUI return; } - btnLogin.Text = "Logout"; - _LoginParams.FirstName = FirstName; _LoginParams.LastName = LastName; _LoginParams.Password = Password; _LoginParams.Start = StartURI; - LoginThread = new Thread(new ThreadStart(delegate() { _Client.Network.Login(_LoginParams); })); - LoginThread.Start(); + Login(); } else if (btnLogin.Text == "Logout") { @@ -225,10 +249,7 @@ namespace OpenMetaverse.GUI } if (_Client != null) - { - if (_Client.Network.Connected) - _Client.Network.Logout(); - } + _Client.Network.Logout(); btnLogin.Text = "Login"; } @@ -251,21 +272,15 @@ namespace OpenMetaverse.GUI private void Network_OnDisconnected(object sender, DisconnectedEventArgs e) { if (!this.IsHandleCreated) return; - - this.BeginInvoke((MethodInvoker)delegate - { - btnLogin.Text = "Login"; - }); + + SetText(btnLogin, "Login"); } private void Network_OnLogin(object sender, LoginProgressEventArgs e) { - if (!this.IsHandleCreated) return; + if (!this.IsHandleCreated) return; - this.BeginInvoke((MethodInvoker)delegate - { - btnLogin.Text = "Logout"; - }); + SetText(btnLogin, "Logout"); if (e.Status == LoginStatus.Success) { @@ -285,18 +300,12 @@ namespace OpenMetaverse.GUI } else if (e.Status == LoginStatus.Failed) { - this.BeginInvoke((MethodInvoker)delegate - { - btnLogin.Text = "Login"; - }); + SetText(btnLogin, "Login"); } else { - this.BeginInvoke((MethodInvoker)delegate - { - listNames.Text = _LoginParams.FirstName + " " + _LoginParams.LastName; - txtPass.Text = _LoginParams.Password; - }); + SetText(listNames, _LoginParams.FirstName + " " + _LoginParams.LastName); + SetText(txtPass, _LoginParams.Password); } } diff --git a/OpenMetaverse.GUI/MiniMap.cs b/OpenMetaverse.GUI/MiniMap.cs index d014ecad..9402a083 100644 --- a/OpenMetaverse.GUI/MiniMap.cs +++ b/OpenMetaverse.GUI/MiniMap.cs @@ -203,6 +203,8 @@ namespace OpenMetaverse.GUI void Network_OnCurrentSimChanged(object sender, SimChangedEventArgs e) { + if (_Client.Network.Connected) return; + GridRegion region; if (Client.Grid.GetGridRegion(Client.Network.CurrentSim.Name, GridLayerType.Objects, out region)) {