VIA and ARC lock not reset when copying to clipboard
View options
- Truncate descriptions
Description
When copying board items to the clipboard, the copied items are unlocked before being written, but the list of items unlocked is not exhaustive. As a result, VIA and ARC elements keep their (locked)
flag when copied to the clipboard.
The offending code can be found in pcbnew/kicad_clipboard.cpp:202
auto prepItem = [&]( BOARD_ITEM* titem ) {
// locked means "locked in place"; copied items therefore can't be locked
if( MODULE* module = dyn_cast<MODULE*>( titem ) )
module->SetLocked( false );
else if( TRACK* track = dyn_cast<TRACK*>( titem ) )
track->SetLocked( false );
};
The dyn_cast
function will not return a valid pointer for subclasses of TRACK
, so VIA
and ARC
are not handled here.
As a short term solution, they could be added, but it might also be an idea to unlock these as part of the copying process as that would be a bit more future-proof, such as when the option to lock zones is readded.
Steps to reproduce
- Create a new PCB
- Place a via and an arc
- Select both
- Copy to clipboard
- Look for
(locked)
in the clipboard contents
KiCad Version
Application: KiCad
Version: (5.99.0-6907-g61c8debb70), debug build
Libraries:
wxWidgets 3.0.5
libcurl/7.72.0 GnuTLS/3.6.15 zlib/1.2.11 brotli/1.0.9 libidn2/2.3.0 libpsl/0.21.0 (+libidn2/2.3.0) libssh2/1.8.0 nghttp2/1.41.0 librtmp/2.3
Platform: Linux 5.9.0-1-amd64 x86_64, 64 bit, Little endian, wxGTK, ,
Build Info:
Date: Nov 10 2020 17:47:56
wxWidgets: 3.0.5 (wchar_t,wx containers,compatible with 2.8) GTK+ 3.24
Boost: 1.71.0
OCE: 6.9.1
Curl: 7.72.0
ngspice: 33
Compiler: GCC 10.2.0 with C++ ABI 1014
Build settings:
KICAD_SCRIPTING=ON
KICAD_SCRIPTING_MODULES=ON
KICAD_SCRIPTING_PYTHON3=ON
KICAD_SCRIPTING_WXPYTHON=ON
KICAD_SCRIPTING_WXPYTHON_PHOENIX=ON
KICAD_SCRIPTING_ACTION_MENU=ON
KICAD_USE_OCE=ON
KICAD_SPICE=ON
KICAD_STDLIB_DEBUG=OFF
KICAD_STDLIB_LIGHT_DEBUG=OFF
KICAD_SANITIZE=OFF


- Show labels
- Show closed items
Link items together to show that they're related or that one is blocking others.