When working in high contrast mode, we want to be able to select a
footprint with only elements in, e.g. silk and fab layers.
The previous design for footprint IsOnLayer had one behavior of every
other element and a different behavior for footprints. This leads to
multiple bugs as new features use the overloaded IsOnLayer expecting it
to report if the element exists on a layer or not.
For footprints, we need a different routine to determine whether or not
to select the footprint when clicking on it. IsOnLayer will report if
the footprint has any elements on a specific layer but we don't want to
use the bbox for a hittest because large footprints with through hole
pads will exist on every layer and have an enormous bbox. Instead, we
filter footprints based on the hittest of each element. This behaves in
a more logical fashion, allowing you to select a footprint by clicking
on a visible element of that footprint.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/15284
(cherry picked from commit f3d65b5156)
On case-sensitive systems, the country code needs to be capitalized for
the language to be correctly identified between two dialects. Since
`br` was not capitalized, we fell back on european portuguese for Linux
and MacOS
Fixes https://gitlab.com/kicad/code/kicad/-/issues/15592
(cherry picked from commit 2be87e4527)
Altium allows duplicate layer names but KiCad prefers to have unique
names for each layer. This enforces a unique name for each layer when
importing
Fixes https://gitlab.com/kicad/code/kicad/-/issues/15583
(cherry picked from commit c772d116b2)
If KiCad crashes or exits without deleting the lockfile, don't show the
warning message unless we are not the one who locked it or there are
other KiCad instances running locally.
This should catch 99% of the cases where the message is shown
incorrectly. There may be some corner cases where the lock file is
created on a network drive using two different machines with the same
name and same user but these cases should be (famous last words)
sufficiently rare as to not be observed in practice
(cherry picked from commit 7fe83993cf)
When duplicating and existing symbol, we must set the pins before
setting the lib symbol as the lib symbol will generate a pin map that
will be broken by the shift to new pins
Fixes https://gitlab.com/kicad/code/kicad/-/issues/15728
(cherry picked from commit 12ebb2bbfa)
SCH_PIN pointers are used through KiCad and removing them without a
global refresh risks crashes. A safer approach is to simply reuse the
SCH_PIN structures, updating the data to the revised library
Fixes https://gitlab.com/kicad/code/kicad/-/issues/15715
(cherry picked from commit bdb7b99fc8)
Some how symbol names that still have escaped '/' character get mixed with
symbol names that have '/' characters now that it is no longer an invalid
LIB_ID character. This was causing derived symbols to loose the link to
the parent symbol. This fix replaces any instances of "{slash}" with "/"
to convert symbol names to the proper escaping.
Thanks to JP for the inspiration for the fix.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/15715
Manually cherry picked from commit 2f51d22b3a.
We store our connectivity dirty flag with the SCH_ITEM but we generate
SCH_CONNECTION based on the SCH_ITEM and the SCH_SHEET_PATH. For this
reason, we need to avoid clearing the connectivity dirty flag until
we've finished processing all instances of the SCH_ITEM in the graph
This also means that we need to allow getting the SCH_CONNECTION pointer
even when the connectivity is still dirty (getting SCH_CONNECTION
happens based on SCH_ITEM and SCH_SHEET_PATH, not just SCH_ITEM)
(cherry picked from commit 7d12e1c4f5)
Shared pointers contained stale references to the temporary graph. When
merging, we need to ensure all references are updated to the final graph
(cherry picked from commit b52c43b933)
- Incremental extraction needs the newly created items. The modified
items are already set in the connection graph but the newly created
items don't exist yet, so we need to add those explicitly
- Bus parents need to ensure that the bus children exist because we
iterate on the updates from the top of the graph down
(cherry picked from commit 9fc45eb08c)