diff --git a/CreamInstaller/Forms/MainForm.Designer.cs b/CreamInstaller/Forms/MainForm.Designer.cs index 4af2aee..18c4447 100644 --- a/CreamInstaller/Forms/MainForm.Designer.cs +++ b/CreamInstaller/Forms/MainForm.Designer.cs @@ -37,7 +37,7 @@ namespace CreamInstaller this.updateButton = new System.Windows.Forms.Button(); this.ignoreButton = new System.Windows.Forms.Button(); this.progressBar1 = new System.Windows.Forms.ProgressBar(); - this.changelogTreeView = new System.Windows.Forms.TreeView(); + this.changelogTreeView = new ProgramSelectionTreeView(); this.SuspendLayout(); // // label1 @@ -118,7 +118,7 @@ namespace CreamInstaller private Button updateButton; private Button ignoreButton; private ProgressBar progressBar1; - private TreeView changelogTreeView; + private ProgramSelectionTreeView changelogTreeView; } } diff --git a/CreamInstaller/Forms/SelectForm.Designer.cs b/CreamInstaller/Forms/SelectForm.Designer.cs index d0e6859..7ea0ec8 100644 --- a/CreamInstaller/Forms/SelectForm.Designer.cs +++ b/CreamInstaller/Forms/SelectForm.Designer.cs @@ -37,7 +37,7 @@ namespace CreamInstaller this.label1 = new System.Windows.Forms.Label(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.noneFoundLabel = new System.Windows.Forms.Label(); - this.treeView1 = new System.Windows.Forms.TreeView(); + this.treeView1 = new ProgramSelectionTreeView(); this.allCheckBox = new System.Windows.Forms.CheckBox(); this.progressBar1 = new System.Windows.Forms.ProgressBar(); this.label2 = new System.Windows.Forms.Label(); diff --git a/CreamInstaller/Forms/SelectForm.cs b/CreamInstaller/Forms/SelectForm.cs index ae180fb..d7a38f4 100644 --- a/CreamInstaller/Forms/SelectForm.cs +++ b/CreamInstaller/Forms/SelectForm.cs @@ -121,7 +121,6 @@ namespace CreamInstaller private void GetCreamApiApplicablePrograms(IProgress progress) { - treeView1.AfterCheck -= OnTreeViewNodeCheckedChanged; int cur = 0; if (Program.Canceled) return; List> applicablePrograms = new(); @@ -234,7 +233,6 @@ namespace CreamInstaller task.Wait(); } progress.Report(RunningTasks.Count); - treeView1.AfterCheck += OnTreeViewNodeCheckedChanged; } private bool validated = false; @@ -314,22 +312,19 @@ namespace CreamInstaller private void OnTreeViewNodeCheckedChanged(object sender, TreeViewEventArgs e) { + if (e.Action == TreeViewAction.Unknown) return; ProgramSelection selection = ProgramSelection.FromName(e.Node.Text); if (selection is null) { ProgramSelection.FromName(e.Node.Parent.Text).ToggleDlc(e.Node.Text, e.Node.Checked); - treeView1.AfterCheck -= OnTreeViewNodeCheckedChanged; e.Node.Parent.Checked = e.Node.Parent.Nodes.Cast().ToList().Any(treeNode => treeNode.Checked); - treeView1.AfterCheck += OnTreeViewNodeCheckedChanged; } else { if (selection.AllSteamDlc.Any()) { selection.ToggleAllDlc(e.Node.Checked); - treeView1.AfterCheck -= OnTreeViewNodeCheckedChanged; e.Node.Nodes.Cast().ToList().ForEach(treeNode => treeNode.Checked = e.Node.Checked); - treeView1.AfterCheck += OnTreeViewNodeCheckedChanged; } else { @@ -467,11 +462,14 @@ namespace CreamInstaller { bool shouldCheck = false; foreach (TreeNode treeNode in treeNodes) - if (treeNode.Parent is null && !treeNode.Checked) - shouldCheck = true; - foreach (TreeNode treeNode in treeNodes) + { if (treeNode.Parent is null) + { + if (!treeNode.Checked) shouldCheck = true; treeNode.Checked = shouldCheck; + OnTreeViewNodeCheckedChanged(null, new(treeNode, TreeViewAction.ByMouse)); + } + } allCheckBox.Checked = shouldCheck; } } diff --git a/CreamInstaller/ProgramSelectionTreeView.cs b/CreamInstaller/ProgramSelectionTreeView.cs new file mode 100644 index 0000000..40d080f --- /dev/null +++ b/CreamInstaller/ProgramSelectionTreeView.cs @@ -0,0 +1,14 @@ +using System; +using System.Windows.Forms; + +namespace CreamInstaller +{ + public class ProgramSelectionTreeView : TreeView + { + protected override void WndProc(ref Message m) + { + if (m.Msg == 0x203) m.Result = IntPtr.Zero; + else base.WndProc(ref m); + } + } +} \ No newline at end of file