From ca47896204482bf4a6979e3838bf7f09f61cebeb Mon Sep 17 00:00:00 2001 From: giy <giy@omp-system.ru> Date: Fri, 02 Sep 2022 14:16:56 +0300 Subject: [PATCH] Обновление до версии 2.9.0 --- QtVsTools.Package/Editors/Editor.cs | 100 +++++++++++++++++++++++++++++--------------------- 1 files changed, 58 insertions(+), 42 deletions(-) diff --git a/QtVsTools.Package/Editors/Editor.cs b/QtVsTools.Package/Editors/Editor.cs index 754f4ba..58db95a 100644 --- a/QtVsTools.Package/Editors/Editor.cs +++ b/QtVsTools.Package/Editors/Editor.cs @@ -40,11 +40,12 @@ using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; using Microsoft.VisualStudio.VCProjectEngine; -using QtVsTools.Core; -using QtVsTools.VisualStudio; namespace QtVsTools.Editors { + using Core; + using VisualStudio; + using static Core.HelperFunctions; public abstract class Editor : IVsEditorFactory @@ -61,6 +62,7 @@ protected virtual string GetToolsPath() { + ThreadHelper.ThrowIfNotOnUIThread(); return GetQtToolsPath() ?? GetDefaultQtToolsPath(); } @@ -69,33 +71,37 @@ string GetQtToolsPath() { - var project = VsShell.GetProject(Context); - if (project == null) - return null; + return ThreadHelper.JoinableTaskFactory.Run(async () => + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + var project = VsShell.GetProject(Context); + if (project == null) + return null; - var vcProject = project.Object as VCProject; - if (vcProject == null) - return null; + var vcProject = project.Object as VCProject; + if (vcProject == null) + return null; - var vcConfigs = vcProject.Configurations as IVCCollection; - if (vcConfigs == null) - return null; + var vcConfigs = vcProject.Configurations as IVCCollection; + if (vcConfigs == null) + return null; - var activeConfig = project.ConfigurationManager?.ActiveConfiguration; - if (activeConfig == null) - return null; + var activeConfig = project.ConfigurationManager?.ActiveConfiguration; + if (activeConfig == null) + return null; - var activeConfigId = string.Format("{0}|{1}", - activeConfig.ConfigurationName, activeConfig.PlatformName); - var vcConfig = vcConfigs.Item(activeConfigId) as VCConfiguration; - if (vcConfig == null) - return null; + var activeConfigId = string.Format("{0}|{1}", + activeConfig.ConfigurationName, activeConfig.PlatformName); + var vcConfig = vcConfigs.Item(activeConfigId) as VCConfiguration; + if (vcConfig == null) + return null; - var qtToolsPath = vcConfig.GetEvaluatedPropertyValue("QtToolsPath"); - if (string.IsNullOrEmpty(qtToolsPath)) - return null; + var qtToolsPath = vcConfig.GetEvaluatedPropertyValue("QtToolsPath"); + if (string.IsNullOrEmpty(qtToolsPath)) + return null; - return qtToolsPath; + return qtToolsPath; + }); } string GetDefaultQtToolsPath() @@ -126,6 +132,8 @@ out Guid pguidCmdUI, out int pgrfCDW) { + ThreadHelper.ThrowIfNotOnUIThread(); + // Initialize to null ppunkDocView = IntPtr.Zero; ppunkDocData = IntPtr.Zero; @@ -202,11 +210,15 @@ { if (string.IsNullOrEmpty(qtToolsPath)) qtToolsPath = GetDefaultQtToolsPath(); + var st = GetStartInfo(filePath, qtToolsPath, hideWindow); try { - return Process.Start(GetStartInfo(filePath, qtToolsPath, hideWindow)); - } catch (Exception e) { - Messages.Print( - e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace); + return Process.Start(st); + } catch (Exception exception) { + exception.Log(); + if (!File.Exists(st.Arguments)) + Messages.Print("The system cannot find the file: " + st.Arguments); + if (!File.Exists(st.FileName)) + Messages.Print("The system cannot find the file: " + st.FileName); return null; } } @@ -223,20 +235,20 @@ private class EditorPane : WindowPane, IVsPersistDocData { - public Editor Editor { get; private set; } - public string QtToolsPath { get; private set; } + private Editor Editor { get; } + private string QtToolsPath { get; } - public TableLayoutPanel EditorContainer { get; private set; } - public Label EditorTitle { get; private set; } - public LinkLabel EditorDetachButton { get; private set; } - public Panel EditorControl { get; private set; } + private TableLayoutPanel EditorContainer { get; set; } + private Label EditorTitle { get; } + private LinkLabel EditorDetachButton { get; } + private Panel EditorControl { get; } public override IWin32Window Window => EditorContainer; - public Process EditorProcess { get; private set; } - public IntPtr EditorWindow { get; private set; } - public int EditorWindowStyle { get; private set; } - public int EditorWindowStyleExt { get; private set; } - public IntPtr EditorIcon { get; private set; } + private Process EditorProcess { get; set; } + private IntPtr EditorWindow { get; set; } + private int EditorWindowStyle { get; set; } + private int EditorWindowStyleExt { get; set; } + private IntPtr EditorIcon { get; set; } public EditorPane(Editor editor, string qtToolsPath) { @@ -306,11 +318,11 @@ int IVsPersistDocData.LoadDocData(string pszMkDocument) { - var solution = GetService(typeof(SVsSolution)) as IVsSolution; EditorProcess = Editor.Start(pszMkDocument, QtToolsPath, hideWindow: !Editor.Detached); if (EditorProcess == null) return VSConstants.E_FAIL; + if (Editor.Detached) { Editor.OnStart(EditorProcess); CloseParentFrame(); @@ -395,8 +407,12 @@ { EditorProcess = null; EditorWindow = IntPtr.Zero; - var parentFrame = GetService(typeof(SVsWindowFrame)) as IVsWindowFrame; - parentFrame?.CloseFrame((uint)__FRAMECLOSE.FRAMECLOSE_NoSave); + ThreadHelper.JoinableTaskFactory.Run(async () => + { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + var parentFrame = GetService(typeof(SVsWindowFrame)) as IVsWindowFrame; + parentFrame?.CloseFrame((uint)__FRAMECLOSE.FRAMECLOSE_NoSave); + }); } private void EditorProcess_Exited(object sender, EventArgs e) @@ -452,7 +468,7 @@ EditorWindow = IntPtr.Zero; // Close editor window - System.Threading.Tasks.Task.Run(() => + _ = System.Threading.Tasks.Task.Run(() => { NativeAPI.SendMessage(editorWindow, NativeAPI.WM_CLOSE, 0, 0); if (!editorProcess.WaitForExit(500)) { -- Gitblit v1.9.1