From c9b17619ef8cdb46173557f3ea0010b518e5dcbf Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Sun, 5 Apr 2026 22:41:03 -0400 Subject: [PATCH] fix: intercept arrow keys in CadConverterForm for file list navigation FileListControl loses focus when interacting with other controls on the form, making arrow key navigation stop working. Intercept Up/Down at the form level via ProcessCmdKey and forward to the file list. Co-Authored-By: Claude Opus 4.6 (1M context) --- OpenNest/Controls/FileListControl.cs | 32 +++++++++++++++++----------- OpenNest/Forms/CadConverterForm.cs | 11 ++++++++++ 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/OpenNest/Controls/FileListControl.cs b/OpenNest/Controls/FileListControl.cs index 8908bbe..e41daec 100644 --- a/OpenNest/Controls/FileListControl.cs +++ b/OpenNest/Controls/FileListControl.cs @@ -152,22 +152,14 @@ namespace OpenNest.Controls UpdateScrollBar(); } - protected override bool IsInputKey(Keys keyData) + public void ProcessArrowKey(Keys keyData) { - if (keyData == Keys.Up || keyData == Keys.Down) - return true; - return base.IsInputKey(keyData); - } - - protected override void OnKeyDown(KeyEventArgs e) - { - base.OnKeyDown(e); if (items.Count == 0) return; var newIndex = selectedIndex; - if (e.KeyCode == Keys.Down) + if (keyData == Keys.Down) newIndex = System.Math.Min(selectedIndex + 1, items.Count - 1); - else if (e.KeyCode == Keys.Up) + else if (keyData == Keys.Up) newIndex = System.Math.Max(selectedIndex - 1, 0); else return; @@ -179,7 +171,23 @@ namespace OpenNest.Controls Invalidate(); SelectedIndexChanged?.Invoke(this, selectedIndex); } - e.Handled = true; + } + + protected override bool IsInputKey(Keys keyData) + { + if (keyData == Keys.Up || keyData == Keys.Down) + return true; + return base.IsInputKey(keyData); + } + + protected override void OnKeyDown(KeyEventArgs e) + { + base.OnKeyDown(e); + if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down) + { + ProcessArrowKey(e.KeyCode); + e.Handled = true; + } } protected override void OnPaint(PaintEventArgs e) diff --git a/OpenNest/Forms/CadConverterForm.cs b/OpenNest/Forms/CadConverterForm.cs index 1adbcf5..4e61ddc 100644 --- a/OpenNest/Forms/CadConverterForm.cs +++ b/OpenNest/Forms/CadConverterForm.cs @@ -23,6 +23,17 @@ namespace OpenNest.Forms private SimplifierViewerForm simplifierViewer; private bool staleProgram = true; + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) + { + if ((keyData == Keys.Up || keyData == Keys.Down) && !fileList.Focused) + { + fileList.ProcessArrowKey(keyData); + return true; + } + + return base.ProcessCmdKey(ref msg, keyData); + } + public CadConverterForm() { InitializeComponent();