From 21ee64d8f02839e09d82a5898879584092a4a33d Mon Sep 17 00:00:00 2001
From: Jeff Young <jeff@rokeby.ie>
Date: Fri, 3 Jan 2025 18:31:34 +0000
Subject: [PATCH] (Slightly) better de-bouncing of grid cell editing.

---
 eeschema/eeschema_jobs_handler.cpp |  2 +-
 kicad/dialogs/panel_jobs.cpp       | 18 ++++++++++++++++--
 kicad/dialogs/panel_jobs.h         |  1 +
 pcbnew/pcbnew_jobs_handler.cpp     |  2 +-
 4 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/eeschema/eeschema_jobs_handler.cpp b/eeschema/eeschema_jobs_handler.cpp
index 4aec776c16..fc79489686 100644
--- a/eeschema/eeschema_jobs_handler.cpp
+++ b/eeschema/eeschema_jobs_handler.cpp
@@ -152,7 +152,7 @@ EESCHEMA_JOBS_HANDLER::EESCHEMA_JOBS_HANDLER( KIWAY* aKiway ) :
                   JOB_SCH_ERC* ercJob = dynamic_cast<JOB_SCH_ERC*>( job );
                   DIALOG_ERC_JOB_CONFIG dlg( aParent, ercJob );
 
-                  return dlg.ShowModal() == wxID_SAVE;
+                  return dlg.ShowModal() == wxID_OK;
               } );
 }
 
diff --git a/kicad/dialogs/panel_jobs.cpp b/kicad/dialogs/panel_jobs.cpp
index 336ec8f9bf..dd6e15fe10 100644
--- a/kicad/dialogs/panel_jobs.cpp
+++ b/kicad/dialogs/panel_jobs.cpp
@@ -575,7 +575,22 @@ bool JOBS_GRID_TRICKS::handleDoubleClick( wxGridEvent& aEvent )
 
     if( col == 1 && row >= 0 && row < (int) m_parent->GetJobsFile()->GetJobs().size() )
     {
-        m_parent->OpenJobOptionsForListItem( row );
+        m_doubleClickRow = row;
+        m_grid->CancelPendingChanges();
+
+        CallAfter(
+                [this]()
+                {
+                    // Yes, again.  CancelShowEditorOnMouseUp() doesn't appear to be 100%
+                    // reliable.
+                    m_grid->CancelPendingChanges();
+                    int row = m_doubleClickRow;
+                    m_doubleClickRow = -1;
+
+                    if( row >= 0 && row < (int) m_parent->GetJobsFile()->GetJobs().size() )
+                        m_parent->OpenJobOptionsForListItem( row );
+                } );
+
         return true;
     }
 
@@ -594,7 +609,6 @@ PANEL_JOBS::PANEL_JOBS( wxAuiNotebook* aParent, KICAD_MANAGER_FRAME* aFrame,
 
     m_jobsGrid->SetDefaultRowSize( m_jobsGrid->GetDefaultRowSize() + 4 );
     m_jobsGrid->OverrideMinSize( 0.6, 0.3 );
-    m_jobsGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
 
     // 'm' for margins
     m_jobsGrid->SetColSize( 0, GetTextExtent( wxT( "99m" ) ).x );
diff --git a/kicad/dialogs/panel_jobs.h b/kicad/dialogs/panel_jobs.h
index 26fad3604b..b7aa332fbd 100644
--- a/kicad/dialogs/panel_jobs.h
+++ b/kicad/dialogs/panel_jobs.h
@@ -52,6 +52,7 @@ protected:
 
 protected:
     PANEL_JOBS* m_parent;
+    int         m_doubleClickRow;
 };
 
 
diff --git a/pcbnew/pcbnew_jobs_handler.cpp b/pcbnew/pcbnew_jobs_handler.cpp
index 439a63dc91..fb35256791 100644
--- a/pcbnew/pcbnew_jobs_handler.cpp
+++ b/pcbnew/pcbnew_jobs_handler.cpp
@@ -235,7 +235,7 @@ PCBNEW_JOBS_HANDLER::PCBNEW_JOBS_HANDLER( KIWAY* aKiway ) :
               {
                   DIALOG_DRC_JOB_CONFIG dlg( aParent, dynamic_cast<JOB_PCB_DRC*>( job ) );
 
-                  return dlg.ShowModal() == wxID_SAVE;
+                  return dlg.ShowModal() == wxID_OK;
               } );
     Register( "ipc2581",
               std::bind( &PCBNEW_JOBS_HANDLER::JobExportIpc2581, this, std::placeholders::_1 ),