diff options
author | Aaron Bockover <abock@microsoft.com> | 2019-09-13 03:50:34 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-13 03:50:34 +0300 |
commit | f0e4a6b105b736e8f51ccfeb22dfb0f715e9938a (patch) | |
tree | 06f47d618038c19901d9b9aa1252a371c8773549 /main/src/core/MonoDevelop.Ide | |
parent | 84a14aa0e1adc9b79f1acee2cf9dff11d89fe01b (diff) | |
parent | c77f33f754666a08a97d456cca74d70a7cb9349c (diff) |
Merge pull request #8708 from mono/pr-anvod-nexterror
Fixes 946718: Next Error keybinding not working
Diffstat (limited to 'main/src/core/MonoDevelop.Ide')
3 files changed, 16 insertions, 21 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Navigation/TextFileNavigationPoint.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Navigation/TextFileNavigationPoint.cs index 29838a4e3f..65d8e21269 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Navigation/TextFileNavigationPoint.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Navigation/TextFileNavigationPoint.cs @@ -128,19 +128,7 @@ namespace MonoDevelop.Ide.Navigation protected void JumpToCurrentLocation (ITextView textView) { - var editorOperationsFactoryService = CompositionManager.Instance.GetExportedValue<IEditorOperationsFactoryService> (); - var editorOperations = editorOperationsFactoryService.GetEditorOperations (textView); - VirtualSnapshotPoint point; - if (offset is SnapshotPoint sp1 && sp1.Snapshot.TextBuffer == textView.TextBuffer) { - var currentSnapshot = textView.TextBuffer.CurrentSnapshot; - var sp = sp1.TranslateTo (currentSnapshot, PointTrackingMode.Positive); - point = new VirtualSnapshotPoint (currentSnapshot, sp); - } else { - var snapshotLine = textView.TextSnapshot.GetLineFromLineNumber (Math.Min (textView.TextSnapshot.LineCount - 1, this.line)); - point = new VirtualSnapshotPoint (textView.TextSnapshot, Math.Min (textView.TextSnapshot.Length - 1, snapshotLine.Start.Position + column)); - offset = point.Position; - } - editorOperations.SelectAndMoveCaret (point, point, TextSelectionMode.Stream, EnsureSpanVisibleOptions.AlwaysCenter); + textView.NavigateToLineAndColumn (Math.Max (0, Line - 1), Math.Max (0, Column - 1)); } public override bool Equals (object o) diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Tasks/TaskStore.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Tasks/TaskStore.cs index 7025fb7abd..1347e3d21c 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Tasks/TaskStore.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Tasks/TaskStore.cs @@ -44,6 +44,7 @@ using MonoDevelop.Ide.Navigation; using MonoDevelop.Ide.TextEditing; using MonoDevelop.Ide.Desktop; using System.Threading.Tasks; +using System.Linq; namespace MonoDevelop.Ide.Tasks { @@ -448,7 +449,7 @@ namespace MonoDevelop.Ide.Tasks // Jump over tasks with different severity or with no file name while (n != -1 && n < tasks.Count && - (iteratingSeverity != tasks [n].Severity || !IsProjectTaskFile (tasks [n]))) + (iteratingSeverity != tasks [n].Severity || !IsProjectTaskFileInternal (tasks [n]))) n++; TaskListEntry ct = n != -1 && n < tasks.Count ? tasks [n] : null; @@ -477,8 +478,14 @@ namespace MonoDevelop.Ide.Tasks /// <summary> /// Determines whether the task's file should be opened automatically when jumping to the next error. /// </summary> + [Obsolete("This will be removed in a future release", error: true)] public static bool IsProjectTaskFile (TaskListEntry t) { + return IsProjectTaskFileInternal (t); + } + + internal static bool IsProjectTaskFileInternal (TaskListEntry t) + { if (t.FileName.IsNullOrEmpty) return false; @@ -494,12 +501,12 @@ namespace MonoDevelop.Ide.Tasks if (!IdeServices.DesktopService.GetMimeTypeIsText (mimeType)) return false; - //only files for which we have a default internal display binding - var binding = IdeServices.DisplayBindingService.GetDefaultBinding (t.FileName, mimeType, p); - if (binding == null || !binding.CanUseAsDefault || binding is IExternalDisplayBinding) - return false; + // only valid files are those that have a way to view them + // .Result here is currently safe because none of the actual calls to OnGetSupportedControllers(Async) + // is actually requesting the UI thread scheduler. + var fileViewers = IdeServices.DisplayBindingService.GetFileViewers (t.FileName, p).Result; - return true; + return fileViewers.Any (viewer => viewer.CanUseAsDefault && !viewer.IsExternal); } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs index 830bb22d92..45574f79ed 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs @@ -1842,10 +1842,10 @@ namespace MonoDevelop.Ide TaskListEntry jumpTask = null; switch (IdeApp.Preferences.JumpToFirstErrorOrWarning.Value) { case JumpToFirst.Error: - jumpTask = tasks.FirstOrDefault (t => t.Severity == TaskSeverity.Error && TaskStore.IsProjectTaskFile (t)); + jumpTask = tasks.FirstOrDefault (t => t.Severity == TaskSeverity.Error && TaskStore.IsProjectTaskFileInternal (t)); break; case JumpToFirst.ErrorOrWarning: - jumpTask = tasks.FirstOrDefault (t => (t.Severity == TaskSeverity.Error || t.Severity == TaskSeverity.Warning) && TaskStore.IsProjectTaskFile (t)); + jumpTask = tasks.FirstOrDefault (t => (t.Severity == TaskSeverity.Error || t.Severity == TaskSeverity.Warning) && TaskStore.IsProjectTaskFileInternal (t)); break; } if (jumpTask != null) { |