From 4aeb2c58fb6948ff36f3464751c2ed5a4e425176 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Sun, 30 Mar 2025 21:54:52 +0100 Subject: [PATCH] Don't assume a hypertext link is a cross-sheet reference. Fixes https://gitlab.com/kicad/code/kicad/-/issues/20511 (cherry picked from commit 582aef0220ad20a1f249dcc9da13d1bf4c373feb) --- eeschema/sch_field.cpp | 52 ++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/eeschema/sch_field.cpp b/eeschema/sch_field.cpp index 45382a096b..434b2394d7 100644 --- a/eeschema/sch_field.cpp +++ b/eeschema/sch_field.cpp @@ -1251,31 +1251,39 @@ void SCH_FIELD::DoHypertextAction( EDA_DRAW_FRAME* aFrame ) const if( IsHypertext() ) { - SCH_LABEL_BASE* label = static_cast( m_parent ); - SCH_SHEET_PATH* sheet = &label->Schematic()->CurrentSheet(); - wxMenu menu; - wxString href; + wxString href; + SCH_GLOBALLABEL* global = dynamic_cast( m_parent ); - std::vector> pages; - - label->GetIntersheetRefs( sheet, &pages ); - - for( int i = 0; i < (int) pages.size(); ++i ) + if( global && m_id == INTERSHEET_REFS ) { - menu.Append( i + START_ID, wxString::Format( _( "Go to Page %s (%s)" ), - pages[i].first, - pages[i].second ) ); + SCH_SHEET_PATH* sheet = &global->Schematic()->CurrentSheet(); + wxMenu menu; + + std::vector> pages; + + global->GetIntersheetRefs( sheet, &pages ); + + for( int i = 0; i < (int) pages.size(); ++i ) + { + menu.Append( i + START_ID, wxString::Format( _( "Go to Page %s (%s)" ), + pages[i].first, + pages[i].second ) ); + } + + menu.AppendSeparator(); + menu.Append( 999 + START_ID, _( "Back to Previous Selected Sheet" ) ); + + int sel = aFrame->GetPopupMenuSelectionFromUser( menu ) - START_ID; + + if( sel >= 0 && sel < (int) pages.size() ) + href = wxT( "#" ) + pages[ sel ].first; + else if( sel == 999 ) + href = SCH_NAVIGATE_TOOL::g_BackLink; + } + else if( IsURL( GetShownText( false ) ) ) + { + href = GetShownText( false ); } - - menu.AppendSeparator(); - menu.Append( 999 + START_ID, _( "Back to Previous Selected Sheet" ) ); - - int sel = aFrame->GetPopupMenuSelectionFromUser( menu ) - START_ID; - - if( sel >= 0 && sel < (int) pages.size() ) - href = wxT( "#" ) + pages[ sel ].first; - else if( sel == 999 ) - href = SCH_NAVIGATE_TOOL::g_BackLink; if( !href.IsEmpty() ) {