From 9c3f2a20ecf3f7f5501906b5a5fa6754b5b584f4 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Fri, 11 Jul 2025 20:49:31 +0100 Subject: [PATCH] Don't presume a selection (potentially KICAD-8VP). (cherry picked from commit 34367020c4af7f78c4e0208f19eb9fee4d27e882) --- common/dialogs/panel_color_settings.cpp | 73 +++++++++++++------------ 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/common/dialogs/panel_color_settings.cpp b/common/dialogs/panel_color_settings.cpp index a0c0f29c66..e52cd61b2f 100644 --- a/common/dialogs/panel_color_settings.cpp +++ b/common/dialogs/panel_color_settings.cpp @@ -282,49 +282,52 @@ void PANEL_COLOR_SETTINGS::createSwatch( int aLayer, const wxString& aName ) void PANEL_COLOR_SETTINGS::ShowColorContextMenu( wxMouseEvent& aEvent, int aLayer ) { - auto selected = - static_cast( m_cbTheme->GetClientData( m_cbTheme->GetSelection() ) ); + int themeSel = m_cbTheme->GetSelection(); - wxCHECK_RET( selected, wxT( "Invalid color theme selected" ) ); - - COLOR4D current = m_currentSettings->GetColor( aLayer ); - COLOR4D saved = selected->GetColor( aLayer ); - bool readOnly = m_currentSettings->IsReadOnly(); - - wxMenu menu; + if( themeSel >= 0 ) + { + COLOR_SETTINGS* selected = static_cast( m_cbTheme->GetClientData( themeSel ) ); - KIUI::AddMenuItem( &menu, ID_COPY, _( "Copy color" ), KiBitmap( BITMAPS::copy ) ); + wxCHECK_RET( selected, wxT( "Invalid color theme selected" ) ); - if( !readOnly && m_copied != COLOR4D::UNSPECIFIED ) - KIUI::AddMenuItem( &menu, ID_PASTE, _( "Paste color" ), KiBitmap( BITMAPS::paste ) ); + COLOR4D current = m_currentSettings->GetColor( aLayer ); + COLOR4D saved = selected->GetColor( aLayer ); + bool readOnly = m_currentSettings->IsReadOnly(); - if( !readOnly && current != saved ) - KIUI::AddMenuItem( &menu, ID_REVERT, _( "Revert to saved color" ), - KiBitmap( BITMAPS::undo ) ); + wxMenu menu; - menu.Bind( wxEVT_COMMAND_MENU_SELECTED, - [&]( wxCommandEvent& aCmd ) - { - switch( aCmd.GetId() ) - { - case ID_COPY: - m_copied = current; - break; + KIUI::AddMenuItem( &menu, ID_COPY, _( "Copy color" ), KiBitmap( BITMAPS::copy ) ); - case ID_PASTE: - updateColor( aLayer, m_copied ); - break; + if( !readOnly && m_copied != COLOR4D::UNSPECIFIED ) + KIUI::AddMenuItem( &menu, ID_PASTE, _( "Paste color" ), KiBitmap( BITMAPS::paste ) ); - case ID_REVERT: - updateColor( aLayer, saved ); - break; + if( !readOnly && current != saved ) + KIUI::AddMenuItem( &menu, ID_REVERT, _( "Revert to saved color" ), KiBitmap( BITMAPS::undo ) ); - default: - aCmd.Skip(); - } - } ); - - PopupMenu( &menu ); + menu.Bind( wxEVT_COMMAND_MENU_SELECTED, + [&]( wxCommandEvent& aCmd ) + { + switch( aCmd.GetId() ) + { + case ID_COPY: + m_copied = current; + break; + + case ID_PASTE: + updateColor( aLayer, m_copied ); + break; + + case ID_REVERT: + updateColor( aLayer, saved ); + break; + + default: + aCmd.Skip(); + } + } ); + + PopupMenu( &menu ); + } }