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