the ERC dialog's save action always wrote (just) errors and warnings to
the report, regardless of the violations listed in the dialog based on
the checkboxes. that was different from the DRC dialog's behavior, which
writes the selected severities to the report. this change makes the ERC
dialog's "Save..." button behave the same as the DRC dialog's.
(cherry picked from commit 42d202b6cf)
Co-authored-by: Bernhard Kirchen <schlimmchen@posteo.net>
Symbol instance saving was refactored earlier. This replaced
the conditional project name lookup with unconditional use of the
stored m_ProjectName. This variable is never populated at symbol
creation time, and is not updated on project rename or Save As, this
results in empty or stale project names being written to disk.
Restore the conditional: use the live project name from GetProjectName()
for current project instances, and fall back to the stored m_ProjectName
only for foreign project instances.
This is the v9 equivalent of the master fix in 4836d172c7, which could
not be cherry-picked due to v10-specific virtual root changes.
When selecting multiline text objects with non-default (outline) fonts
in the schematic editor, only a single line-height box was drawn as
the selection highlight. This happened because boxText() called
GetTextExtents() which used StringBoundaryLimits() treating the entire
multiline string as one line, producing a very wide but single-height
bounding box.
Replace the boxText() call with GetBoundingBox() which correctly
computes the bounding box for multiline text by measuring each line
individually and accounting for interline spacing.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/23198
(cherry picked from commit fc8c1e2b44)
The ERC dialog info bar button text gets clipped when there are symbols
that are not annotated in the schematic. This was a manual cherry pick
from fixes in the development branch that got overlooked.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22638
FreeDrawList() deletes items in arbitrary order. When a SCH_RULE_AREA
is freed before items it contains, those items' destructors call
RemoveItem() on the freed rule area, causing a use-after-free crash
in unordered_set::erase.
This breaks the bidirectional references in ~SCH_RULE_AREA() so
contained items no longer hold dangling pointers to the destroyed
rule area.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22822
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22993
(cherry picked from commit 92fe51409e)
During PCB_EDIT_FRAME construction, wxEVT_SYS_COLOUR_CHANGED
can fire before m_appearancePanel is created. On macOS with
multiple displays, LoadWindowState triggers a synchronous
windowDidChangeBackingProperties notification during DoSetSize,
which wxWidgets translates into a colour-changed event. The
handler dereferences m_appearancePanel unconditionally, causing
an EXC_BAD_ACCESS crash.
Add a null check consistent with all other m_appearancePanel
accesses in the same file.
Fixes kicad/code/kicad#23302
Signed-off-by: Dominique Fuchs's avatarDominique Fuchs <df@0x9d.net>
(Cherry-picked from a592b9db27)
The schematic plot job set was incorrectly handling file definitions as
paths resulting in the output file always being used as a path definition.
This fix honors file name definitions provided in the plot dialog path text
control.
SafeYieldFor( this, wxEVT_CATEGORY_NATIVE_EVENTS ) was called every
100ms during DRC to keep the UI responsive. On GTK this processes raw
GDK events including window-focus and expose events, causing the dialog
to steal focus and flicker continuously while DRC is running.
wxEVT_CATEGORY_UI and wxEVT_CATEGORY_USER_INPUT are sufficient: UI
events keep the gauge visually updated; user-input events allow the
Cancel button to respond. Excluding wxEVT_CATEGORY_NATIVE_EVENTS
eliminates the GTK focus/repaint churn without affecting Windows
behaviour (the 100 ms gate from fd501b4bc8 is retained).
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22916
(cherry picked from commit 18c76bbe7c7425db27e1597b044d93ebc13d5bbe)
Fixed two problems with soldermask generation. First, via holes weren't
cut in soldermask when copper export was disabled. Second, we ignored
zones on F.Mask/B.Mask when zone export was disabled even though
soldermask export was enabled.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20452
(cherry picked from commit 497fe12f2d)
The board connectivity algorithm creates pseudo net names for footprints
that have multiple pads with the same number using a "_N" suffix. At
some point a change was made to the zone net properties dialog that
allowed choosing a pseudo net name as the net name assigned to the zone.
This caused the netlist updater to trigger a false "zone has no pads
connected" warning because the pseudo net name is not in the schematic
net list.
The warning message was not very helpful. Added the correct zone layers
and the net name assigned to the zone to the message for improved
clarity.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22133
(cherry picked from commit 6ba805173e)
When opening a new schematic file in standalone eeschema (without the
project manager), the project is reloaded via settings_manager. The
old project's DESIGN_BLOCK_LIB_TABLE is destroyed, but
DESIGN_BLOCK_TREE_MODEL_ADAPTER::m_libs still holds a raw pointer to
it. Hovering over any design block after this point fires
LIB_TREE::onPreselect -> GenerateInfo() -> m_libs->GetEnumeratedDesignBlock(),
which dereferences the dangling pointer and causes a SIGSEGV.
Fix by overriding SCH_EDIT_FRAME::ProjectChanged() to call
m_designBlocksPane->RefreshLibs(), which updates m_libs to point at
the new project's DESIGN_BLOCK_LIB_TABLE via adapter->SetLibTable().
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/23156
ASCH_PIN already computes the electrical connection point (kicadLocation)
from the Altium body-end coordinates and pin length using combined
integer+fractional arithmetic, which avoids the rounding error that
occurs when computing Altium2KiCadUnit(body) + Altium2KiCadUnit(length)
separately.
Use this pre-computed value directly instead of manually adding the
pin-length offset to elem.location, eliminating the known off-by-one
positioning issue noted in the previous TODO comment.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/23238
Altium stores text orientation in absolute coordinates. When
importing labels inside symbols, the text angle and justification were
stored as-is in the library symbol, but KiCad applies the symbol's
orientation transform (via OrientAndMirrorSymbolItems) at render time.
This caused text to be rotated twice. Fix this by pre-compensating for
the KiCad rotation.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22940
When importing Altium schematics, text field properties (angle and
justification) for designators and parameters are stored in absolute
page coordinates. KiCad stores these relative to the parent symbol
and applies the symbol's transform at render time. Without
compensation, text appears with incorrect rotation and alignment
after the symbol orientation commit (090583a57e).
Add AdjustFieldForSymbolOrientation() to inverse-transform text angle
and horizontal justification based on the parent symbol's Altium
orientation. The compensation follows the same logic as
SCH_FIELD::Rotate() applied in the reverse direction for each of the
four orientation cases and mirror-Y.
Also add the missing SetTextPositioning() call in ParseLibDesignator()
to preserve text angle and justification for library-level designators.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22907
Pin orientations from Altium are in absolute schematic coordinates, but
KiCad stores them in library-local space. To tranform the, we compute
both the pin body end and connection point in absolute coordinates,
transform both through GetRelativePosition, and derive the orientation
from the resulting direction vector.
This also fixes arc start/end offsets, which were computed from absolute
angles but never transformed to library-local space.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22907
The wxImage::Rotate90() parameter means "clockwise" when true, but the
code was passing aRotateCCW directly. This caused the pixel rotation to
be opposite to the intended direction. The bug manifested as images
appearing incorrectly after save/reload, since the OpenGL renderer uses
m_originalImage with m_rotation compensation, while after reload the
already-rotated pixels have no rotation compensation.
Also updated the unit test that was written to match the buggy behavior,
and added a separate test case for CW rotation.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22719
(cherry picked from commit a02b5f2f1f)
Commit a5f5298cad added severity headers to ERC report output but
didn't update the CLI test reference files. Update the golden .rpt
files to include the new "Report includes:" header line, update the
.json golden file to include the new "included_severities" array, and
bump the JSON test's line_skip_count from 5 to 9 to skip past the
new block and the kicad_version field during comparison.
The DXF exporter was missing the $INSUNITS header variable, which tells
CAD software what physical units the drawing coordinates represent. Without
it, other programs have no reliable way to determine the coordinate scale.
Add $INSUNITS to the HEADER section alongside the existing $MEASUREMENT
variable. When exporting in millimeters, $INSUNITS is set to 4; when
exporting in inches, it is set to 1.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/23181
(cherry picked from commit c0a6a139cf)
When FreeDrawList() destroys items in arbitrary order, a directive label
may be freed before the rule area it connects to. The rule area's
destructor then calls RemoveConnectedRuleArea() on the freed label.
Add ~SCH_DIRECTIVE_LABEL() that calls RemoveDirective() on each
connected rule area, mirroring the existing bidirectional cleanup
between SCH_RULE_AREA and SCH_ITEM.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/23150
(cherry picked from commit 685ee777bc)
When routing a new track that connects to the middle of a locked track,
the router splits the existing segment into two pieces via
SplitAdjacentSegments. The PNS-level Clone preserves the MK_LOCKED
marker on both halves, but createBoardItem did not propagate the locked
state when creating the new board item for the second half.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/21564
(cherry picked from commit 7df22da61a)
When "Use Connected Track Width" is enabled and routing starts from
pre-routed diff pair tracks, the router correctly inherits the track
width for the initial segment. However, after the first click to fix
that segment, updateSizesAfterRouterEvent() recalculates sizes from
netclass constraints and DIFF_PAIR_PLACER::UpdateSizes() unconditionally
overwrites the inherited width, causing subsequent segments to revert
to the netclass default.
LINE_PLACER::UpdateSizes() already guards against this by checking
TrackWidthIsExplicit() and HasPlacedAnything() to preserve the
inherited width during chained placement. Add the same guard to
DIFF_PAIR_PLACER::UpdateSizes() so that the inherited diff pair width
is preserved across fix-route boundaries.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20189
(cherry picked from commit 573381c95b)
Guard against empty hierarchy in SetSheetNumberAndCount() to prevent
crash when schematic load fails and the hierarchy list is not populated.
Return empty string instead of asserting in GetPageNumber() when the
sheet path is empty.
Resolves KICAD-11EJ
(cherry picked from commit 0b79465d51)
When schematic symbols have footprint fields without library name prefixes
(e.g., "DGG56" instead of "Package_SO:DGG56"), the netlist updater's FPID
comparison always fails against the board's fully qualified FPIDs, causing
"Update PCB from Schematic" to perpetually report footprint changes that
can never be resolved.
Match by item name only when the schematic-side FPID has no library
nickname (legacy format), and warn the user to add the library prefix.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22958
(cherry picked from commit c28dd5d4a9)
The update check runs on the thread pool and captures a raw pointer to the
KICAD_MANAGER_FRAME for CallAfter. If the update check completes during
frame destruction, the CallAfter targets a partially-destroyed window,
causing a segfault in wxWindowBase::RemoveEventHandler via wxAuiNotebook
destruction. At least, that is the theory...
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22593
(cherry picked from commit c0230e74c1)
Guard against re-entrant wxEVT_CLOSE_WINDOW events in windowClosing().
GTK can deliver a second close event while the first is still being
processed (e.g. during Destroy() calls in doCloseWindow), leading to
use-after-free crashes when the tool manager has already been deleted.
Also add defensive null checks for GetToolManager() and GetTool() in
all SaveSettings/SaveProjectLocalSettings paths that access the
selection tool filter, since these are called during frame teardown.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22926
(cherry picked from commit cb31a1ade7)
When routing with "Fix All Segments on Click" disabled, collinear segments
committed across multiple partial fixes were never merged, resulting in
redundant overlapping track segments.
The root cause was that simplifyNewLine() was only called when the route
was complete (realEnd=true), not during partial fixes. This function
handles merging of collinear segments and removal of contained segments.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/19538
(cherry picked from commit 30838e1ec8)
Adds support for two escaping mechanisms in bus vector and bus group
parsing to allow net names with spaces inside bus constructs in one of
two common ways
1. Backslash escaping: Data\ Bus[1..4] or BUS{Net\ One Net\ Two}
2. Quoted strings: "Data Bus"[1..4] or BUS{"Net One" "Net Two"}
Fixes https://gitlab.com/kicad/code/kicad/-/issues/9258
(cherry picked from commit 66e232bc36)
Bus alias names and member names entered with leading or trailing
whitespace caused silent connection failures because the lookup
used the trimmed name from the schematic label while the definition
retained the untrimmed name.
Centralize sanitization in BUS_ALIAS by trimming whitespace in
SetName() and adding AddMember/SetMembers/ClearMembers methods
that trim and reject empty strings. Remove the mutable Members()
accessor to prevent bypassing the sanitization. Update all callers
across parsers, importers, and the dialog to use the new API.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/19971
(cherry picked from commit 80c4b1b4df)
ResolveItem's linear scan fallback now caches items on first
hit, so repeated lookups for the same uncached UUID are O(1)
instead of O(n). The cache is made mutable to allow population
from the const method.
In resolveGroups, the parser now uses the board's item-by-id
cache directly instead of calling ResolveItem, and builds a
one-time hash map for footprint children. This eliminates the
per-call dynamic_cast and linear scans that made group
resolution quadratic on boards with many groups.
(cherry picked from commit 459d2cfb68)
an ERC or DRC report without violations or without violations of a
particular kind does not tell the user whether there actually are no
violations of that severity, or if the severity was filtered.
we now list the severities by name that are included in the report.
(cherry picked from commit cd03794b23)
the ERC report creates its own SHEETLIST_ERC_ITEMS_PROVIDER and
hard-codes warnings and errors as wanted severities, regardless
of the --severity-* options given through the CLI.
we keep the marker provider optional and create a fallback instance for
tests code that expects reports with warnings and errors.
(cherry picked from commit 24dec03ba5)
The schematic ERC command line report was always reporting the same output
regardless of the severity options because the severity was hard coded to
RPT_SEVERITY_ERROR and RPT_SEVERITY_WARNING. The ERC_REPORT object now has
an optional severities argument for filtering the output ERC items.
The clearance cache added in b0d0dd57ef invalidates on every
SetLayer() and SetNetCode() call. The router's rule resolver
calls SetLayer() on dummy board items for every clearance
evaluation during routing. Each call acquires an exclusive
lock and linearly scans the entire cache, but dummy items
never exist in the cache, so this is pure waste.
Skip cache invalidation for items flagged ROUTER_TRANSIENT.
The flag is already set on all dummy items in the rule
resolver.
Also replace the O(n) linear scan in InvalidateClearanceCache
with targeted O(1) hash erasure per copper layer.
Double-clicking a subsheet in the project tree opened
it as a standalone schematic, losing reference numbers
and project context. The fix scans the schematic file
hierarchy using a lightweight text parser to determine
if the clicked file is part of the project. If it is,
the project schematic opens and navigates to the target
sheet via MAIL_SCH_NAVIGATE_TO_SHEET.
The cross-probing handler now compares against
SCH_SCREEN::GetFileName() instead of
SCH_SHEET::GetFileName(), since the screen stores the
absolute path while the sheet stores a relative one.
The previous comparison would never match for subsheets.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/23000
The List Hotkeys dialog now saves edits but was not calling
CommonSettingsChanged(HOTKEYS_CHANGED) after closing, so
ACTION_MANAGER kept stale keycode lookup maps and edited
shortcuts did not take effect until restart.
Add the HOTKEYS_CHANGED notification after the dialog closes
with OK. Add a Cancel button so users can discard accidental
edits. Exclude gesture and platform command pseudo-actions
from the Preferences panel since edits to those entries are
not persisted to disk. The List Hotkeys dialog continues to
show them for reference. Update the stale "read-only" doc
comment on DIALOG_LIST_HOTKEYS.
Remove the m_readOnly parameter from PANEL_HOTKEYS_EDITOR and
WIDGET_HOTKEY_LIST. This parameter was causing hotkey changes not to be
saved because TransferDataFromWindow() would return early when m_readOnly
was true, and event handlers for editing were only bound when m_readOnly
was false.
Both the Preferences Hotkeys panel and the Help > List Hotkeys dialog
now support editing, which is the expected behavior.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22455
Remove the existing file check when exporting ODB++ from the command line.
It is still retained when exporting ODB++ using the dialog.
This also adds additional command line status information when exporting
from the command line using a CLI_REPORTER object. If any errors occur
exporting they are written to 'stderr' and the job handler returns an
unknown error code instead of always returning a successful export.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/23148
SEG::operator< delegates to VECTOR2I::operator< which compares by
squared magnitude. When SEG::operator< mixes this magnitude comparison
with VECTOR2I::operator== (exact coordinate equality) for tie-breaking,
it violates strict weak ordering: two points at the same magnitude but
different coordinates are "incomparable" under operator< but "unequal"
under operator==, breaking transitivity of incomparability.
Replace the default SEG::operator< sort with a lexicographic comparator
on x/y coordinates, which provides a proper strict weak ordering and
matches the sweep-line optimization that follows (breaking the inner
loop when refSegment.B.x < testSegment.A.x).
Also add null checks for polyA/polyB from GetFill() before dereferencing.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/23112
ReadProperties() unconditionally stripped a trailing 0x00 byte from all
records. This is correct for text records where 0x00 is a string
terminator, but binary records contain raw compressed data where 0x00 is
valid payload. When a zlib stream happened to end with 0x00, stripping
it caused ReadFullPascalString() to throw out_of_range, crashing Altium
.SchLib imports.
Only strip the null byte for non-binary records.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/23013
Otherwise, footprints will export differently to how they save.
In master, this is already fixed with
KICAD_FORMAT::Prettify( prettyData, KICAD_FORMAT::FORMAT_MODE::NORMAL );
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/23050
MSVC is all bend out of shape about wxString conversions so it will help
to get the warnings on Linux as well. Only works for Clang right now
(cherry picked from commit 382e141db5)
Symbols with multiple pins sharing the same pin number are valid when
those pins are connected to the same net. This is common for connector
symbols and jumpers where internal connections exist.
The ERC now checks actual net connections rather than just detecting
duplicate pin numbers. A new TestDuplicatePinNets function iterates
over sheet paths to access connection information and only reports an
error when duplicate-numbered pins are connected to different nets.
The error report now states which pins are duplicate and which nets
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20443
(cherry picked from commit 37c005fb32)
When executing render jobs from jobsets, the code stored the preset name
in m_CurrentPreset but never actually applied the preset's layer visibility
settings and colors. This caused renders to use whatever settings were in
the user's 3D viewer config instead of the specified preset.
Add code to look up the preset and apply its settings using SetVisibleLayers()
and SetLayerColors(), matching the behavior of the 3D viewer GUI.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/21887
(cherry picked from commit 0dc4c5d08b)
BestSnapAnchor unconditionally hid the snap point indicator and
cleared the snap item at the end of the function, even after
successfully snapping to an anchor. This was introduced in
e892783109 when the snap line logic was refactored to use
SnapToConstructionLines. The original code used mutually exclusive
if/else if/else branches, but the refactored code fell through to
the cleanup block in all cases.
Return early from BestSnapAnchor when snapped to an anchor, which
preserves the snap indicator visibility and m_snapItem state. This
restores the visual feedback (circle-cross marker) that shows when
the cursor has snapped to a pin, wire endpoint, or junction.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22678
(cherry picked from commit e87f655293)
Sort m_global_power_pins before processing in generateGlobalPowerPinSubGraphs()
to ensure deterministic iteration order. This prevents the same schematic from
producing different ERC results on consecutive runs.
The sort key uses sheet path, symbol reference, and pin number for a stable
ordering that does not depend on RTree iteration order.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20012
(cherry picked from commit 22428040b7)
When placing a symbol from an HTTP library, the symbol kept the original
KiCad library nickname instead of using the HTTP library nickname. For
example, a symbol from the W5 HTTP library would retain "Device" as its
library nickname instead of "W5".
The issue was in loadSymbolFromPart() where only the sub-library name was
updated, leaving the library nickname from the source symbol unchanged.
The fix extracts the library nickname from the HTTP library path
(e.g., "W5.kicad_httplib" becomes "W5"), passes this path to
loadSymbolFromPart(), and calls SetLibNickname() before setting the
sub-library name. This ensures the symbol's library link is correctly
formatted as "LibraryNickname:PartName" instead of using the wrong
library name.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20407
(cherry picked from commit b61b0f180c)
SCH_PIN::HasConnectivityChanges() now detects visibility changes for
power input pins. Hidden power pins create implicit global net
connections via IsGlobalPower(), so visibility changes affect
connectivity semantics.
Also detects pin type changes to/from PT_POWER_IN since these affect
IsGlobalPower() as well.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/21159
(cherry picked from commit 9587f62e0c)
SMD pads have implicit solder mask and paste openings that are defined by
the pad's expansion properties, but the mask layers are not in the pad's
layer set. The IPC-2581 exporter was only iterating over the pad's layer
set, causing mask/paste layer features to be missing for SMD pads.
Add pads to F_Mask/B_Mask and F_Paste/B_Paste layer features when they
are on the corresponding copper layer, unless they already explicitly
include those layers in their layer set.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/16658
(cherry picked from commit 37b23ef824)
Create wxPaintDC in onPaint() to acknowledge paint events. Without this,
wxWidgets keeps sending paint events because it thinks the window still
needs to be painted. This caused continuous repaints in Cairo mode,
consuming CPU when dialogs with preview canvases were open.
The OpenGL GAL has the same issue but is not affected because
wxGLCanvas handles paint events differently via its double-buffering
mechanism.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/18823
(cherry picked from commit e8d3b68e6b)
When the user presses V to place a via before clicking to start routing,
the via placement intent was being ignored because ToggleViaPlacement()
only works during active routing. The via would only appear if the user
moved the mouse after pressing V.
Add a flag to remember when V is pressed in pre-routing state and enable
via placement after routing starts.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/19814
(cherry picked from commit f6a0b6b836)
Apply the symbol orientation and mirroring from Altium schematic files
when importing. Previously, all imported symbols were placed at 0 degree
rotation regardless of their original orientation in Altium.
The orientation mapping follows the same pattern used for power ports:
- Altium 0 (RIGHTWARDS) -> KiCad SYM_ORIENT_90
- Altium 1 (UPWARDS) -> KiCad SYM_ORIENT_180
- Altium 2 (LEFTWARDS) -> KiCad SYM_ORIENT_270
- Altium 3 (DOWNWARDS) -> KiCad SYM_ORIENT_0
When the symbol is mirrored in Altium, SYM_MIRROR_Y is also applied.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/19630
(cherry picked from commit 090583a57e)
When pressing escape soon after left clicking (within ~60ms), KiCad
was processing the escape key before the mouse button release event
due to wxWidgets event queue ordering. This caused operations to be
canceled instead of completed.
The fix adds flushPendingClicks() which checks button state via polling
when an escape key event arrives. If a button was logically pressed but
has been physically released, the click event is generated before the
escape event is processed, maintaining proper ordering.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20527
(cherry picked from commit b9327dbe7e)
When a PCB contains footprints with embedded fonts, the Board Setup
dialog's Embedded Files panel was not showing these inherited fonts,
even though they were correctly embedded when saving.
Fix by collecting embedded files from all footprints and passing them
to PANEL_EMBEDDED_FILES as inherited files.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20579
(cherry picked from commit b0bf0a9365)
When opening the Sync Sheet Pins dialog from the toolbar, the dialog
now automatically selects the tab for the currently selected sheet.
If no sheet is selected, it falls back to selecting the first tab
with unsynced pins (those showing the exclamation mark icon).
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22344
(cherry picked from commit 618aa535b1)
Use DRC epsilon tolerance when checking edge clearance collisions to prevent
false positives caused by floating-point precision issues. Items placed exactly
at the specified clearance distance were incorrectly flagged due to
floating-point rounding in arc/arc distance calculations.
The fix subtracts m_epsilon from the collision threshold, which is initialized
from the board's DRC epsilon setting. This provides consistent tolerance
handling that matches other DRC checks.
Adds regression test with concentric arcs where copper arc inner edge is
exactly at board edge clearance distance.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/18839
(cherry picked from commit 01e67cef85)
When using FRONT_INNER_BACK padstack mode on a 2-layer board, the router
would incorrectly report clearance violations. This happened because
syncPad() created an INNER_LAYERS SOLID with PNS_LAYER_RANGE(1, 0),
which got swapped to (0, 1) by the constructor. This caused the SOLID
to be indexed on both F_Cu and B_Cu, leading to incorrect collision
checks that used the wrong pad size.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20355
(cherry picked from commit 7d1b5db8ac)
Without a connection timeout, CURL can wait up to 5 minutes for DNS
resolution or connection establishment when network is unreachable.
The 30-second connection timeout applies only to the connection phase,
not the total transfer time, so large file downloads still work normally.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20568
(cherry picked from commit f5c7ab27c9)
When loading symbols from an HTTP library, the duplicated symbol
retained the original symbol's name instead of the HTTP library
part identifier. This caused ERC to report "Symbol not found"
errors with the wrong symbol name.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20247
(cherry picked from commit c2403152e0)
The multichannel tool's topology matching failed when reference designators
contained dots (e.g., TRIM_1.1, TRIM_2.1) because GetRefDesPrefix() extracted
different prefixes for components that should match. TRIM_1.1 gave prefix
"TRIM_1." while TRIM_2.1 gave "TRIM_2.", causing IsSameKind() to return false.
Modified the prefix comparison in topo_match.cpp to find the longest common
starting sequence between prefixes and verify that the differing parts are
valid channel suffixes (digits and dots only). This allows TRIM_1. and TRIM_2.
to match because they share base prefix "TRIM_" with channel suffixes.
Added unit test for the specific dotted reference designator case.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20058
(cherry picked from commit e9c32c7202)
When moving items with arrow keys, the position should change by exactly
the grid step amount. My previous fix for issue 21682 introduced Align()
which snaps to the nearest grid point, but this causes problems when the
item starts at an off-grid position.
The original fix also had a second problem where the refreshPreview filter
was too broad. CursorControl posts refreshPreview after handling arrow
keys, but the filter prevented using the keyboard position for that event,
so it fell back to mouse position instead.
This restructures the code to always use the keyboard position when it's
valid, and moves the refreshPreview filter inside so it only skips the
axis lock logic rather than the entire keyboard handling path.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22805
(cherry picked from commit f41394fc5a)
argparse required long-form functions to use an equal sign to process a
string like --rotate='-45,0,45' but would accept long-form args that
didn't have a negative like --output test.png without the equal sign.
Since this is an intrinsic limitation of our library, we work around it
by detecting these vector forms and changing them into an equality under
the hood.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20191
(cherry picked from commit a9ce9da551)
Footprints with graphics on both copper layers (like fiducials without
pads) were not selectable when only the opposite-side layers were
visible. For example, a footprint declared on F.Cu with graphics on
B.Cu could not be selected when showing only bottom layers.
The early-return check based on the footprint's declared side prevented
the child visibility iteration from running, even though child items on
the opposite layer were visible. Removing this check allows the existing
child iteration to correctly determine selectability based on whether
any child items are on visible layers.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22666
(cherry picked from commit 40ea18277f)
The ARRAY_AXIS class now accepts lowercase letters (a-z) as input for
alphabetic numbering schemes and preserves that case in the output.
This allows users to create pin numbers like a1, b1, c1 which are
commonly used in DIN 41612 and other backplane connectors.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22787
(cherry picked from commit 56b8309525)
Shallow arcs are essentially segments but the cutoff is not clear. So
we build a two-tiered system where we know that arcs with at least a
sagitta-chord ratio of 0.3 are valid and we know that less than 0.2 is
invalid. After that, we do additional rational checks to find
problematic arcs that are more computationally intensive
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22475
(cherry picked from commit 3b3d640eed)
When importing Altium projects, sheets were sometimes imported as both top-level
sheets and hierarchical subsheets. This happened because the project file lists
sheets in arbitrary order. If a parent sheet was processed before its children,
the children would be loaded as subsheets during hierarchy descent. Later, when
those same files appeared in the project file, duplicate sheets were created.
The importer now checks whether a file has already been loaded as a subsheet
before creating a new top-level sheet entry. The check includes a case-insensitive
fallback search since Altium uses inconsistent casing in its .SchDoc extension.
Sheet filenames were also being set to the original Altium paths instead of
KiCad project-relative paths. This caused path mismatches in the hierarchy
search and left references to non-existent Altium paths in the saved schematic.
Filenames now use the KiCad project directory with the .kicad_sch extension.
Hierarchical labels on top-level sheets are converted to global labels during
import since top-level sheets have no parent sheet to connect them to.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/21909
(cherry picked from commit f00dc1befd)
wxWidgets applies layout direction mirroring to controls when the locale
is a right-to-left language (Hebrew, Arabic, etc.). This caused text in
wxDataViewCtrl and wxListCtrl widgets to appear horizontally mirrored,
making them unreadable.
The fix explicitly sets wxLayout_LeftToRight on all wxDataViewCtrl and
wxListCtrl widgets used to display violation reports and data lists.
This follows the existing pattern used in other KiCad dialogs and
drawing panels.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22750
(cherry picked from commit f41eb38405)
When Altium symbol names contain slashes (e.g., "C-68UF/63V_10/10-SMD"),
the compound file stores them in directories using underscores instead
(since slashes are invalid in directory names). The symbol cache used
these directory names as keys, but the symbol's internal name (m_name)
was set from the original Altium LIBREFERENCE property with slashes.
This caused a mismatch when loading symbols via the symbol chooser,
as the tree node's LIB_ID was built from GetName() (with slashes) but
the cache lookup expected the directory name (with underscores).
Fix by setting the symbol name to match the cache key after parsing,
ensuring consistent lookups.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22453
(cherry picked from commit f91e3df207)
When the GAL canvas loses focus while a mouse button is pressed,
the button-up event may be delivered to another window, leaving
the tool dispatcher in an inconsistent state where it thinks the
button is still pressed. This can cause selection and drag
operations to stop working until the application is restarted.
Call ResetState() on the tool dispatcher when focus is lost to
ensure the button tracking state is properly cleared. This
complements the existing CancelDrag() call which only resets the
view-level panning/zooming state.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22317
(cherry picked from commit f5731f69b1)
When a pin has an alternate function selected, GetType() correctly
returns the alternate's type. However, GetCanonicalElectricalTypeName(),
GetElectricalTypeName(), and PlotPinType() were accessing m_type directly,
bypassing the alternate type lookup. This caused netlist exports to show
the wrong pin type (e.g., "no_connect" instead of "power_in") and the
NC symbol to be drawn incorrectly when alternates changed the pin type.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22286
(cherry picked from commit 25430cfbb8)
Lambdas are stored as opaque functors, so wxWidgets cannot see what they
capture. Since we don't know what the event sink is, we don't know to
detach the handler when the sink is destroyed. Then, events can execute
after the swatch is destroyed
Changing the lambdas to a member function explicitly binds the event to
a sink and wxWidgets can track it and detach the handler when the swatch
hits a dtor
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22689
(cherry picked from commit 36655e0499)
Static shapes in Allegro are copper areas that don't void around other nets.
In Fabmaster export, these appear as filled areas with net assignments but
without corresponding outline polygons. Previously, the importer deleted all
netted zones after matching outlines to fills, which caused static shapes
to disappear entirely.
Now the importer tracks which fills are matched to outlines and only deletes
those. Unmatched fills (static shapes) are preserved as solid filled zones
with their original net assignments.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/7753
(cherry picked from commit 6601701fe0)
When shapes like circles, rectangles, and polygons are placed within
Marking elements in Package definitions, they should use inline Polyline
geometry rather than UserPrimitiveRef references.
The fix adds an aInline parameter to addShape() for PCB_SHAPE. When true,
circles are output as two PolyStepCurve arcs forming a complete circle,
rectangles as PolyStepSegment paths, and polygons as Polyline elements
with their outline points.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/17623
(cherry picked from commit 0ef2631492)
The horizontal segment merging optimization was breaking non-solid pen
styles by combining line segments, which altered the dash/dot pattern.
This fix only applies the merging optimization for solid pens and extends
the reduced chunk size handling to all non-solid pen styles.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/18887
(cherry picked from commit 233fa0366f)
When a copper fill zone shares the same name as a placement rule area,
the multichannel tool's enclosedByArea() queries would match items in
both zones. This caused vias and other routing in the reference area to
be incorrectly removed during repeat layout operations.
Changed findOtherItemsInRuleArea() and findRoutingInRuleArea() to use
the zone's UUID instead of its name when constructing enclosedByArea()
expressions.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/21184
(cherry picked from commit 37d8f151ff)
The TDocStd_XLinkTool::Copy function copies shape labels between XDE
documents but doesn't properly transfer color associations which are
stored separately in the ColorTool section. This caused component
models to lose their color information when exported to STEP.
Added transferColors() function to explicitly transfer color information
from source to destination document by recursively transferring colors
to all elements in destination shape
Fixes https://gitlab.com/kicad/code/kicad/-/issues/21865
(cherry picked from commit 1bda2a4b40)
On Windows, files with the hidden attribute cannot be overwritten using
standard file I/O operations. This can cause save failures when files
have been synced via cloud services like OneDrive, which may set the
hidden attribute on files.
This commit extends KIPLATFORM::IO::MakeWriteable() to also clear the
hidden attribute on Windows, and adds calls to this function before
saving schematic and board files.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/14956
(cherry picked from commit d2013cba95)
The overflow check for auto-offsetting imported graphics did not account
for the IU conversion factor, causing DXF files with coordinates around
2300mm to exhibit visual glitches. The check compared mm values directly
against INT32_MAX, but after IU conversion (multiply by 1e6 for PCB),
these values exceed the integer limit.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/9681
(cherry picked from commit 00565e0f14)
When copying layouts between rule areas, identical parallel components
(e.g., multiple capacitors in parallel) would get their positions mixed
up randomly. This happened because the sorting functions used for
component matching did not provide deterministic ordering for
topologically identical components.
The fix adds reference designator as a secondary sort key in both
sortByPinCount() and findMatchingComponents(), ensuring that identical
parallel components are always matched in a consistent order based on
their reference designators.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22293
(cherry picked from commit 348bbad7be)
PCB_IO_MGR::FindPlugin() returns a new PCB_IO* that the caller owns. The
Python wrapper functions (FootprintLoad, FootprintSave, etc.) in
footprint.i call GetPluginForPath which calls FindPlugin, but the
returned plugin object was never deleted because SWIG didn't know
Python owned it.
The %newobject directive tells SWIG that Python owns the returned
PCB_IO* and should delete it when the Python object is garbage
collected.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22526
(cherry picked from commit 0f0fbc55d7)
Two things were happening here
1. The FOOTPRINT copy constructor and assignment operators did not copy
the static component class from the source footprint. So when the undo
system created copies of footprints, the component class information was lost.
2. When only the component class changed (no other footprint parameters), the
change was not recorded in the commit and could be lost.
This change adds the component class info to the copy operation, tracks
it in COMMIT and updates footprins without component classes to 'none'
Fixes https://gitlab.com/kicad/code/kicad/-/issues/21101
(cherry picked from commit 127a85f753)
Some STEP files exported from CAD tools like Fusion 360 with linked
components contain internal references that violate OpenCASCADE's
"self-contained" requirement for TDocStd_XLinkTool::Copy. This caused
the error "TDocStd_XLinkTool::Copy : not self-contained" and prevented
the 3D model from being included in the exported STEP file.
The fix checks if the source label is self-contained using
TDF_Tool::IsSelfContained before attempting the copy. If not
self-contained, it falls back to extracting just the geometric shape
directly and adds it to the destination document. This loses some
XDE metadata like colors and names, but allows the model to be
successfully transferred rather than failing entirely.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22417
(cherry picked from commit 1948da99a2)
The CLI BOM export handler should add Mandatory fields
and virtual fields
This adds the generated field columns to match the GUI behavior, allowing
users to include ${QUANTITY} and ${ITEM_NUMBER} in CLI BOM exports.
Also adds test coverage for BOM export with virtual fields.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22613
(cherry picked from commit 3659475455)
If we are clearing all references in the schematic, then we can clear
our references, otherwise, just eliminate the ones for the proper
sheets. We don't want to clear the references on Sheet A when we copy
and paste it to Sheet B.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20173
(cherry picked from commit 8d37b3787d)
Look to see if, in the same bus, the bus member was renamed. if so,
take the new name unless one of two things:
1) If the current name already matches a different bus member
2) If a different bus updated the neighbor (this preserves the bus name)
Fixes https://gitlab.com/kicad/code/kicad/-/issues/18299
(cherry picked from commit 511d213462)
We are correctly importing netclasses in the Altium import but we need
to fully resolve them in order for them to show up without
saving/reopening
Also found a crash when importing invalid pads that didn't need to be
there.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/15584
(cherry picked from commit ed993ae35d)
After shapes are modified, we want to perform the collision check on the
modified lines (pLine/nLine) not the previous geometry. We also need to
set the heads to the shape in order to commit the shoved geometry in
FixRoute()
Fixes https://gitlab.com/kicad/code/kicad/-/issues/10825
(cherry picked from commit 1c59cc29ff)
Caching and pre-filtering parents avoids some of the worst O(n^2) loops.
Adds a basic test to check for minimum performance and scaling. We'll
have to see if our test machine handles it
Fixes https://gitlab.com/kicad/code/kicad/-/issues/21482
(cherry picked from commit a3eb311c48)
It is possible that the utf8 strings expire before the API call handles
them. Also possible that the size is incorrect when not using length()
on the proper string.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20231
(cherry picked from commit 0f87d6eead)
Changing properties consecutively can rebuild the grid, leading to
dangling pointers. Storing references by name keeps the current pointer
accurate
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22262
(cherry picked from commit 458db88648)
In some cases (mostly mac but not just), we can get to the dtor for
thread pool after the CV has already been destroyed. This prevents that
from being possible and hopefully fixes the crash
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22583
(cherry picked from commit 1b4a840820)
Eagle picks largest clearance of netclass and zone. However, Eagle also
allows netclass-netclass definitions. KiCad only has a single netclass
clearance option. Since custom rules override the zone clearance, we
can get a situation where the KiCad clearance is different that the
Eagle clearance.
This fixes the common use case where Eagle netclass to 'default'
clearance is set. This can be represented by KiCad.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/21283
(cherry picked from commit 22ba1451d6)
If we are not zooming to fit the selection on cross-probe, when we
change sheets, just show the whole sheet but maintain the sheet size for
the new display
Fixes https://gitlab.com/kicad/code/kicad/-/issues/19515
(cherry picked from commit 1eab09147a)
Remove 15 libraries from OCC_LIBS_COMMON that KiCad never
links against: persistence format libs (TKBin*, TKXml*,
TKTObj), unused modeling algorithms (TKFeat, TKFillet,
TKOffset, TKXMesh), and OCCT viewer internals (TKMeshVS,
TKOpenGl). This reduces the common set from 35 to 22.
In loadmodel.cpp, drop the unused AIS_Shape.hxx include and
add an explicit Quantity_ColorRGBA.hxx include that was
previously pulled in transitively through AIS_Shape.
Add /usr/opencascade to the Unix library search hints.
Apply a more localized fix which doesn't mess up
text positioning.
Also move it to shared code so that it can't get out
of sync with plotting again.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22921
(cherry picked from commit 0f33d13c1c)
The tuning pattern generator now returns the layer of its
contained tracks instead of the base layer. During parsing,
generators set their layer to match contained tracks so the
layer is preserved when loading files.
(cherry picked from commit 7f92e60d22)
When a schematic item is deleted or moved, it must remove itself from
any SCH_RULE_AREA that contains it. Previously, the rule area kept
dangling pointers to deleted items in its m_items and m_prev_items
sets. On subsequent ERC runs, iterating these sets and calling methods
on freed memory caused a crash.
Added SCH_RULE_AREA::RemoveItem() and call it from SCH_ITEM destructor
to clean up the bidirectional references.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22854
Teardrops don't get their own unique UUID saved in the file, so they can
end up being sorted differently on save. Instead, we assign a synthetic
UUID to the teardrop based on its two connecting elements' UUIDs.
This also fixes the comparison function so that we don't end up mixing
around caches
(cherry picked from commit a48d8c0233)
When tracks have location-dependent clearances defined by custom rules
(insideCourtyard, intersectsArea conditions), the shove algorithm would
lock track endpoints during drag operations. This prevented tracks from
being reshoved when they moved from one clearance zone to another,
resulting in unresolvable DRC violations.
Add SHP_DONT_LOCK_ENDPOINTS policy flag to prevent endpoint locking
during drag operations. This allows the entire line to be reshoved when
clearance requirements change as segments move between different
clearance zones.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/18550
(cherry picked from commit 1907580b82)
First, we need to ensure that when DRC says it will report errors for
all track segments that this includes the aperature errors. Second, max
clearance needs to include aperature clearance. If you set that higher
than your standard clearance, the RTree might not catch elements that
don't have their own aperture clearance (like teardrops that inherit
from pads)
Fixed assertion failure in ensureLoadedLibrary() where m_timestamps and
m_libCache could become out of sync if an exception was thrown during
library parsing. Both maps are now properly cleaned up on error.
When importing Altium projects with a single top-level sheet, that sheet
now becomes the root instead of creating an unnecessary dummy root. Projects
with multiple top-level sheets continue to use a dummy root container as before.
This simplifies the schematic hierarchy for single-sheet projects and makes
them more consistent with how KiCad normally structures schematics.
When importing Altium projects, sheets were sometimes imported as both top-level
sheets and hierarchical subsheets. This happened because the project file lists
sheets in arbitrary order. If a parent sheet was processed before its children,
the children would be loaded as subsheets during hierarchy descent. Later, when
those same files appeared in the project file, duplicate sheets were created.
The importer now checks whether a file has already been loaded as a subsheet
before creating a new top-level sheet entry. The check includes a case-insensitive
fallback search since Altium uses inconsistent casing in its .SchDoc extension.
Sheet filenames were also being set to the original Altium paths instead of
KiCad project-relative paths. This caused path mismatches in the hierarchy
search and left references to non-existent Altium paths in the saved schematic.
Filenames now use the KiCad project directory with the .kicad_sch extension.
Hierarchical labels on top-level sheets are converted to global labels during
import since top-level sheets have no parent sheet to connect them to.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/21909
(cherry picked from commit f00dc1befd)
The progress dialog is initialized with an empty message string. This
causes all subsequent message to be nearly completely clipped because the
initial dialog layout is done with the empty string.
This is fixed by laying out the dialog in the derived object dtor.
When undoing an align operation on cells, we had no columns (cells
only), so we ended up with a divide by zero
We shouldn't be aligning cells outside of a table, so this disables the
action and provides a guardrail for the divide by zero
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22704
The final offset is supposed to be typed into
the dialog. What comes up in the dialog to
start is the NOP offset.
This also means the on-canvaw hint arrow needs
to point the other way.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22692
(cherry picked from commit faa0875d3a)
When displaying pad and track clearance outlines, GetOwnClearance()
was called repeatedly during rendering, re-evaluating DRC rules on
every paint refresh. With complex DRC rules, this caused significant
slowdown.
Add a lazy-evaluated cache in DRC_ENGINE keyed by (UUID, layer) that
stores clearance values. The cache is invalidated when DRC rules
change (in InitEngine) or properties change that could affect clearance
(net, layer, pad type)
When creating lines, one can edit them. But a commit must not be created, because
it is useless (no previous item) and it can create dangling pointers if the line
creation is aborted.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22642
(cherry picked from commit 0ac47819f1)
When a binary file (like an OrCAD .olb) is selected instead of a valid SPICE library,
catch the std::out_of_range exception to prevent crashes and report an error.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22189
(cherry picked from commit fe2fe400fd)
For some reason This fix does not work in the 9.0 branch. It is being
cherry picked to keep it in sync with the master branch.
(cherry picked from commit 4eb1c8d66e)
If we are clearing all references in the schematic, then we can clear
our references, otherwise, just eliminate the ones for the proper
sheets. We don't want to clear the references on Sheet A when we copy
and paste it to Sheet B.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20173
(cherry picked from commit 8d37b3787d)
It seems the last digit on our scale tends to have some error shift depending on order of operations performed on a component. Reproducing the position and orientation for the comparison alone may not generate the same error in the virtual comparison part and we would get false DRC error.
Move the epsilon to the 10nm as that seems to be empirically safe
The IPC-2581C spec defines an optional "description" attribute for
BomItem elements. Export the footprint's library description to this
field to provide human-readable component information in the BOM.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/22257
(cherry picked from commit 41aeeacaaf)
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.