Browse Source

Make sure exclusion hotkey works when dialog has focus.

(Potentially only required on MSW.  Not required
on MacOS, unknown on GTK.)

Fixes https://gitlab.com/kicad/code/kicad/-/issues/21761
master
Jeff Young 2 weeks ago
parent
commit
7003c0639e
  1. 22
      eeschema/dialogs/dialog_erc.cpp
  2. 9
      eeschema/dialogs/dialog_erc.h
  3. 52
      pcbnew/dialogs/dialog_drc.cpp
  4. 1
      pcbnew/dialogs/dialog_drc.h

22
eeschema/dialogs/dialog_erc.cpp

@ -242,6 +242,28 @@ void DIALOG_ERC::OnMenu( wxCommandEvent& event )
}
void DIALOG_ERC::OnCharHook( wxKeyEvent& aEvt )
{
if( int hotkey = aEvt.GetKeyCode() )
{
if( aEvt.ControlDown() )
hotkey |= MD_CTRL;
if( aEvt.ShiftDown() )
hotkey |= MD_SHIFT;
if( aEvt.AltDown() )
hotkey |= MD_ALT;
if( hotkey == ACTIONS::excludeMarker.GetHotKey() )
{
ExcludeMarker();
return;
}
}
DIALOG_SHIM::OnCharHook( aEvt );
}
bool DIALOG_ERC::TransferDataToWindow()
{
UpdateData();

9
eeschema/dialogs/dialog_erc.h

@ -22,8 +22,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef _DIALOG_ERC_H_
#define _DIALOG_ERC_H_
#pragma once
#include <wx/htmllbox.h>
@ -76,6 +75,7 @@ private:
// from DIALOG_ERC_BASE:
void OnMenu( wxCommandEvent& aEvent ) override;
void OnCharHook( wxKeyEvent& aEvt ) override;
void OnCloseErcDialog( wxCloseEvent& event ) override;
void OnRunERCClick( wxCommandEvent& event ) override;
void OnDeleteOneClick( wxCommandEvent& event ) override;
@ -121,8 +121,3 @@ private:
bool m_crossprobe;
bool m_scroll_on_crossprobe;
};
#endif
// _DIALOG_ERC_H_

52
pcbnew/dialogs/dialog_drc.cpp

@ -307,6 +307,28 @@ void DIALOG_DRC::OnErrorLinkClicked( wxHtmlLinkEvent& event )
}
void DIALOG_DRC::OnCharHook( wxKeyEvent& aEvt )
{
if( int hotkey = aEvt.GetKeyCode() )
{
if( aEvt.ControlDown() )
hotkey |= MD_CTRL;
if( aEvt.ShiftDown() )
hotkey |= MD_SHIFT;
if( aEvt.AltDown() )
hotkey |= MD_ALT;
if( hotkey == ACTIONS::excludeMarker.GetHotKey() )
{
ExcludeMarker();
return;
}
}
DIALOG_SHIM::OnCharHook( aEvt );
}
void DIALOG_DRC::OnRunDRCClick( wxCommandEvent& aEvent )
{
TOOL_MANAGER* toolMgr = m_frame->GetToolManager();
@ -1192,23 +1214,27 @@ void DIALOG_DRC::ExcludeMarker()
return;
RC_TREE_NODE* node = RC_TREE_MODEL::ToNode( m_markerDataView->GetCurrentItem() );
PCB_MARKER* marker = dynamic_cast<PCB_MARKER*>( node->m_RcItem->GetParent() );
if( marker && marker->GetSeverity() != RPT_SEVERITY_EXCLUSION )
if( node && node->m_RcItem )
{
marker->SetExcluded( true );
bds().m_DrcExclusions.insert( marker->SerializeToString() );
m_frame->GetCanvas()->GetView()->Update( marker );
PCB_MARKER* marker = dynamic_cast<PCB_MARKER*>( node->m_RcItem->GetParent() );
// Update view
if( m_showExclusions->GetValue() )
m_markersTreeModel->ValueChanged( node );
else
m_markersTreeModel->DeleteCurrentItem( false );
if( marker && marker->GetSeverity() != RPT_SEVERITY_EXCLUSION )
{
marker->SetExcluded( true );
bds().m_DrcExclusions.insert( marker->SerializeToString() );
m_frame->GetCanvas()->GetView()->Update( marker );
updateDisplayedCounts();
refreshEditor();
m_frame->OnModify();
// Update view
if( m_showExclusions->GetValue() )
m_markersTreeModel->ValueChanged( node );
else
m_markersTreeModel->DeleteCurrentItem( false );
updateDisplayedCounts();
refreshEditor();
m_frame->OnModify();
}
}
}

1
pcbnew/dialogs/dialog_drc.h

@ -78,6 +78,7 @@ private:
bool TransferDataToWindow() override;
void OnMenu( wxCommandEvent& aEvent ) override;
void OnCharHook( wxKeyEvent& aEvt ) override;
void OnDRCItemSelected( wxDataViewEvent& aEvent ) override;
void OnDRCItemDClick( wxDataViewEvent& aEvent ) override;
void OnDRCItemRClick( wxDataViewEvent& aEvent ) override;

Loading…
Cancel
Save