From 67f66eefa3f49c1b9ac7a24efec3647e30de9794 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Wed, 7 Aug 2019 20:21:14 +0200 Subject: Fixes VSTS Bug 961599: [Feedback] Visual Studio crashes/exists when attempting to commit to Git https://devdiv.visualstudio.com/DevDiv/_workitems/edit/961599 MessageService was causing a stack Overflow it could add a dialog as child to itself. However teh git commit dialog should set itself as parent for the git config dialog. --- .../Gui/MonoDevelop.VersionControl.Git.UserGitConfigDialog.cs | 1 - .../MonoDevelop.VersionControl.Git/GitCommitDialogExtension.cs | 2 +- .../MonoDevelop.VersionControl.Git/GitRepository.cs | 6 +++--- .../MonoDevelop.VersionControl.Dialogs/CommitDialog.cs | 1 + .../MonoDevelop.VersionControl/MonoDevelop.VersionControl.csproj | 1 + .../MonoDevelop.VersionControl/CommitDialogExtension.cs | 3 ++- main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/MessageService.cs | 2 ++ 7 files changed, 10 insertions(+), 6 deletions(-) (limited to 'main') diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/Gui/MonoDevelop.VersionControl.Git.UserGitConfigDialog.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/Gui/MonoDevelop.VersionControl.Git.UserGitConfigDialog.cs index 9b0e3d85e3..6bbc421a54 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/Gui/MonoDevelop.VersionControl.Git.UserGitConfigDialog.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/Gui/MonoDevelop.VersionControl.Git.UserGitConfigDialog.cs @@ -143,7 +143,6 @@ namespace MonoDevelop.VersionControl.Git } this.DefaultWidth = 332; this.DefaultHeight = 184; - this.Show (); this.usernameEntry.Changed += new global::System.EventHandler (this.OnChanged); this.emailEntry.Changed += new global::System.EventHandler (this.OnChanged); } diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/GitCommitDialogExtension.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/GitCommitDialogExtension.cs index 55278dbfa6..9ed5f6cec4 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/GitCommitDialogExtension.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/GitCommitDialogExtension.cs @@ -95,7 +95,7 @@ namespace MonoDevelop.VersionControl.Git string user; string email; - repo.GetUserInfo (out user, out email); + repo.GetUserInfo (out user, out email, CommitDialog); string val = sol.UserProperties.GetValue ("GitUserInfo"); if (val == "UsingMD") { diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/GitRepository.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/GitRepository.cs index 5530af3948..ad31ccf21e 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/GitRepository.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/GitRepository.cs @@ -903,7 +903,7 @@ namespace MonoDevelop.VersionControl.Git } } - protected override VersionControlOperation GetSupportedOperations (VersionInfo vinfo) + protected internal override VersionControlOperation GetSupportedOperations (VersionInfo vinfo) { VersionControlOperation ops = base.GetSupportedOperations (vinfo); if (GetCurrentRemote () == null) @@ -1353,7 +1353,7 @@ namespace MonoDevelop.VersionControl.Git return name == null && email == null; } - public void GetUserInfo (out string name, out string email) + public void GetUserInfo (out string name, out string email, Components.Window parent = null) { try { string lname = null, lemail = null; @@ -1369,7 +1369,7 @@ namespace MonoDevelop.VersionControl.Git Runtime.RunInMainThread (() => { var dlg = new UserGitConfigDialog (); try { - if ((Gtk.ResponseType)MessageService.RunCustomDialog (dlg) == Gtk.ResponseType.Ok) { + if ((Gtk.ResponseType)MessageService.RunCustomDialog (dlg, parent) == Gtk.ResponseType.Ok) { dlgName = dlg.UserText; dlgEmail = dlg.EmailText; SetUserInfo (dlgName, dlgEmail); diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Dialogs/CommitDialog.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Dialogs/CommitDialog.cs index c639251548..bc56415478 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Dialogs/CommitDialog.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Dialogs/CommitDialog.cs @@ -89,6 +89,7 @@ namespace MonoDevelop.VersionControl.Dialogs continue; } if (ext.Initialize (changeSet)) { + ext.CommitDialog = this; var newTitle = ext.FormatDialogTitle (changeSet, Title); if (newTitle != null) Title = newTitle; diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.csproj b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.csproj index edc0664983..fa094de8ec 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.csproj +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.csproj @@ -525,6 +525,7 @@ + diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/CommitDialogExtension.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/CommitDialogExtension.cs index 59f9fe1025..75a3d1fd34 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/CommitDialogExtension.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/CommitDialogExtension.cs @@ -6,8 +6,9 @@ namespace MonoDevelop.VersionControl /// /// Base class for commit dialog extensions. /// - public class CommitDialogExtension: Gtk.EventBox + public class CommitDialogExtension : Gtk.EventBox { + internal VersionControl.Dialogs.CommitDialog CommitDialog { get; set; } /// /// Initialize the extension. /// diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/MessageService.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/MessageService.cs index dd6b82f1fc..0fea13b651 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/MessageService.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/MessageService.cs @@ -395,6 +395,8 @@ namespace MonoDevelop.Ide NSWindow nativeParent = null; try { nativeParent = parent; + if (nativeParent.Handle == nsdialog.Handle) + throw new InvalidOperationException ("Can't add dialog as child to itself."); nativeParent.AddChildWindow (nsdialog, NSWindowOrderingMode.Above); } catch (Exception ex) { LoggingService.LogInternalError ("Failed to get the native parent window", ex); -- cgit v1.2.3