From 36b9ef0dc99b8f5b6674a70dd21df257e2970851 Mon Sep 17 00:00:00 2001 From: jean-pierre charras <jp.charras@wanadoo.fr> Date: Sat, 9 Mar 2024 17:36:28 +0100 Subject: [PATCH] Gerbview: update view items after reordering/modifying view layers. Previously, after updating the gerber layer order, displayed D_codes where not always those corresponding to the active layer. --- gerbview/files.cpp | 7 ++++++- gerbview/gerbview_frame.cpp | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gerbview/files.cpp b/gerbview/files.cpp index 533068d420..a9be129e15 100644 --- a/gerbview/files.cpp +++ b/gerbview/files.cpp @@ -2,7 +2,7 @@ * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2017 Jean-Pierre Charras, jp.charras at wanadoo.fr - * Copyright (C) 2004-2019 KiCad Developers, see AUTHORS.txt for contributors. + * Copyright (C) 2004-2024 KiCad Developers, see AUTHORS.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -168,8 +168,13 @@ bool GERBVIEW_FRAME::LoadFileOrShowDialog( const wxString& aFileName, // Auto zoom / sort is only applied when no other files have been loaded if( isFirstFile ) { + int ly = GetActiveLayer(); + SortLayersByFileExtension(); Zoom_Automatique( false ); + + // Ensure the initial active graphic layer is updated after sorting. + SetActiveLayer( ly, true ); } return success; diff --git a/gerbview/gerbview_frame.cpp b/gerbview/gerbview_frame.cpp index d241007d51..4f2a052e94 100644 --- a/gerbview/gerbview_frame.cpp +++ b/gerbview/gerbview_frame.cpp @@ -600,6 +600,12 @@ void GERBVIEW_FRAME::RemapLayers( const std::unordered_map<int, int>& remapping ReFillLayerWidget(); syncLayerBox( true ); + + // Reordering draw layers need updating the view items + GetCanvas()->GetView()->RecacheAllItems(); + GetCanvas()->GetView()->MarkDirty(); + GetCanvas()->GetView()->UpdateAllItems( KIGFX::ALL ); + GetCanvas()->Refresh(); }