# Description
Currently, there is some suspicious behavior going on with the logout
flow, adding some logs to potentially catch any unwanted logouts or
unintentional behaviors.
[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
* unify footer
adds "Done" Buttons,
standardize "Reset" Buttons,
adds disabled logic to "Reset" Buttons
* adds ImGuiWrapper::COL_WARNING = ColorRGB:Warning,
replaces ColorRGB::Warning
* consistently display warnings,
moves assermbly warning after footer,
make cut warnings warning color
* adds separator above cut warnings
* adds tooltip entry in move, rotate & scale for auto-drop
* use wrapper tooltip in wrapper->button for consistent text color
* restructures brim ears button,
renames "Reset" button in painting tools to "Erase All",
small styling fixes
* small adjustments,
moves "Edge detection" checkbox in painting tool underneath,
moves "Section View" in Brim ears tool after buttons,
moves warnings in Assemble tool under footer
* small brim ear tool structure changes,
adds separator between "Head Diameter" and "Max angle",
adds tooltip to "Auto-generate" button,
rewords shortcut descriptions to match other tools
---------
Co-authored-by: Hanno Witzleb <hannowitzleb@gmail.com>
* adds UI and preview plane for multiple dovetail cuts
* adds multiple dovetail cuts to perform_with_groove()
* adds ui text info for spacing, adjusts max_val for gap to respect plate dimensions
* adds spacing before multpile UI
* adjusts wording, adjust gap max by count
---------
Co-authored-by: Hanno Witzleb <hannowitzleb@gmail.com>
Co-authored-by: SoftFever <softfeverever@gmail.com>
* Add logic to handle the left, middle and right buttons being assigned to do nothing, pan or rotate
* Add entries for setting the drag actions to preferences
* Allow the label text in preferences to wrap
* Show mouse mappings in Help -> Keyboard Shortcuts
* Re-add preferences in updated layout
* Add camera mouse options under camera
* Change mouse action strings to use L() for localization
* Display "None" when it is selected instead of blank in keyboard shortcuts
---------
Co-authored-by: Rob O <robertolabode@gmail.com>
Co-authored-by: Noisyfox <timemanager.rick@gmail.com>
load_selections() and update_selections() size the parallel project_config
arrays (filament_colour, filament_colour_type, filament_map) off
filament_presets.size(). When the saved list is shorter than the printer's
nozzle count — never-used printer, hand-trimmed conf, or fewer filament_NN
entries than nozzles — the loaded colors get truncated and the sidebar
starts up one combo short.
## Summary
- skip CLI thumbnail generation when an OpenGL/GLFW context cannot be
created, allowing export workflows to continue in headless/automation
environments
- guard filament variant remapping against missing config options and
out-of-range variant indexes
- log warnings instead of dereferencing invalid config state during
CLI/profile-driven export
## Context
These guards came out of automating OrcaSlicer CLI exports for printer
workflows. In that flow, slicing/export can still be valid even when
thumbnail rendering is unavailable, but the current path can proceed
into OpenGL thumbnail setup after context creation fails. Separately,
malformed or mismatched filament/profile state can index past option
vectors during multi-filament value remapping.
## Test plan
- `git diff --check`
- `cmake --build build/arm64 --config RelWithDebInfo --target OrcaSlicer
-- -j4`
# Description
Fixes a macOS object-list filament editor crash/glitch where the
filament column could enter Cocoa native text editing and expose
`wxCustomRendererObject: 0x...` or crash while committing an invalid
`DataViewBitmapText` value.
The visible `wxCustomRendererObject` glitch was observed on macOS
through Cocoa `wxDataViewCtrl` editing. The underlying unsafe
assignment/variant/editor assumptions are not inherently macOS-only, so
the defensive data-path fixes are cross-platform.
Changes:
- Adds an explicit `DataViewBitmapText` assignment operator that avoids
copying the `wxObject` base, matching the existing copy constructor.
- Rejects unexpected variant types before reading object-list
name/filament values as `DataViewBitmapText`.
- Hardens filament editor value extraction against unexpected editor
controls.
- On macOS, routes filament-column editing through the custom
bitmap-choice renderer instead of `wxDataViewCtrl::EditItem()`, avoiding
native text editing of `wxCustomRendererObject`.
Fixes https://github.com/OrcaSlicer/OrcaSlicer/issues/13682
Previous PR with conversation:
[#13684](https://github.com/OrcaSlicer/OrcaSlicer/pull/13684)
This should fix the crash observed by @Noisyfox as we're addressing the
underlying problem of presenting the `wxCustomRendererObject`.
## Tests
Validated on macOS arm64. Repeated double-click/edit attempts on an
unselected object's filament cell no longer show
`wxCustomRendererObject` and no crash reproduced.
<!--
> A guide for users on how to download the artifacts from this PR.
-->
[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
This can be enabled in Preference->Developer->Keep painted feature after
mesh change.
<img width="731" height="633" alt="init"
src="https://github.com/user-attachments/assets/8b195486-538e-4eda-9e77-bfdf1a794306"
/>
TODO:
- [ ] Bug fixes
- [ ] Make it faster
- Keep painting after other mesh operations such as reload from
disk/simplify/boolean operation etc:
- [x] Planar cut
- [x] Dovetail cut
- [x] Cut with part assigned to other side
- [x] Split to parts
- [x] Split to objects
- [x] Mesh boolean gizmo
- [x] Mesh boolean in right click
- [x] Reload from disk/replace stl (won't work well if mesh changed too
much)
- [x] Fix model
- [x] Simplify/smooth (this two won't work well due to too much mesh
changes)
- [x] Add options in settings since I think this will be experimental
for a long time until being tested by a lot of ppl
* Expose Antialiasing velues
Expose Antialiasing multipliers.
Default to 4 as current implementation but enables the user to disable it to improve performante or increase sampling to improve quality.
* FXAA
* Improve descriptions
* Require restart when MSAA setting changes
Detect changes to the OpenGL MSAA (multisample anti-aliasing) preference when opening Preferences and prompt the user to restart the application to apply the change. Adds a constant key for the MSAA setting, stores the previous value, checks for changes (similar to the existing FXAA handling), and shows a warning dialog explaining the restart will close the current project without saving. If the user accepts, recreate_GUI is invoked to apply the MSAA change immediately.
* Revert "Require restart when MSAA setting changes"
This reverts commit dde134d346c3849598c91d025d2faed1b51c8a22.
* Menu and FPS options
* Fix FPS limiter and remove VSYNC
* Grouped FPS settings and mode up rigth fps counter
---------
Co-authored-by: Noisyfox <timemanager.rick@gmail.com>
FlowRateCalibrationDialog was missing the SetSizeHints call that every
other calibration dialog in calib_dlg.cpp uses (Cornering, Pa, Pa Pattern,
Max Volumetric Speed, Temperature, Retraction, VFA, Input Shaping). Without
it, the dialog has no enforced minimum size: on wxGTK, iconizing the main
window while the dialog is open triggers a layout/refresh that re-runs
Fit() with transient zero-sized children, collapsing the dialog to ~222x249
px with the OK button clipped and unreachable. The window manager then
honors the (incorrect) small geometry hint, so the user cannot resize it
back manually.
Two changes:
* Add v_sizer->SetSizeHints(this) after Fit() in the constructor, matching
the pattern used by all other dialogs in this file. This locks in the
correct minimum the first time Fit() runs, before any iconize event.
* Remove the redundant Fit() from on_dpi_changed. With SetSizeHints in
place the WM enforces the minimum, but the unconditional Fit() on every
DPI/refresh signal was the trigger for the shrink path; Refresh() alone
is sufficient here.
Co-authored-by: Packerlschupfer <packerl@schupfer.at>
* Add tooltips to Transfer buttons
Set contextual tooltips for the Discard, Transfer and Save buttons when a dependent preset is present. The code computes the previous and new profile names and provides localized explanatory tooltips that clarify that switching will discard changes, transfer "New Value" settings, or save changes into the current profile. This improves UX by making the consequences of each action explicit.
* added some endlines
Co-Authored-By: yw4z <yw4z@outlook.com>
---------
Co-authored-by: yw4z <yw4z@outlook.com>
* Remove unused `get_printer_preset` calls.
* `Plater::check_printer_initialized` should skip nozzle flow type checks if nozzle is unknown.
Also remove unnecessary `is_multi_extruders` check.
* Remove unused `CalibUtils::is_same_nozzle_diameters()` fn.
* Simplify `CalibUtils::check_printable_status_before_cali`.
The single-arity can delegate to the vectorized arity.
* Add `DevExtruderSystem::NozzleDiameterMatchesOrUnknown` to simply checks.
* Update `CalibrationPresetPage::update_sync_button_status()` to use `NozzleDiameterMatchesOrUnknown`.
Simplify logic by iterating over each extruder and checking for diameter and volume type match.
The previous code had several mistakes (from what I could tell):
- `curr_obj->is_multi_extruders()` doesn't imply exactly 2 extruders
- the single/multi branch served no purpose
- the single branch failed to check the volume type
* Specify `std::fabs` and add explicit import.
Ref: https://github.com/OrcaSlicer/OrcaSlicer/pull/13330#discussion_r3133613736
Not sure how idiomatic this is in C++ / OrcaSlicer codebase, but CoPilot suggested it and it seems reasonable.
---------
Co-authored-by: SoftFever <softfeverever@gmail.com>
* Support file uploads and the device details page for CC2 printers.
* Resolved build issues for Linux and macOS.
* 1. Added `ElegooPrinterWebViewHandler` to handle WebUI messages for Elegoo printers. Other printers will keep the current behavior.
2. Added a static `get_print_host_webui` method in `PrintHost` to retrieve the printer WebUI URL.
* Improved timeout handling for CC2 file upload and SN info APIs.
---------
Co-authored-by: SoftFever <softfeverever@gmail.com>
* perf: speed up startup and show progress in splash screen
Cold-start was ~15 s. Profiled in GUI_App::on_init_inner: 5 s in
preset_bundle->load_presets (sequential vendor loading of ~3000 JSON
profile files), 3.7 s in new MainFrame(), and a 1.5 s splash screen
that closed long before init finished — so the user stared at a
frozen blank screen for several seconds with no feedback.
Changes:
- PresetBundle::load_system_presets_from_json: parallelize vendor
loading with TBB. ORCA_FILAMENT_LIBRARY is loaded first
synchronously (it is the inheritance base for filaments); the
remaining vendors are loaded in parallel into separate PresetBundle
instances, then sequentially merged. On a typical setup this drops
load_presets from ~5 s to ~3.5 s; the saving scales with vendor
count and CPU cores.
- SplashScreen: remove the wxSPLASH_TIMEOUT flag so the splash stays
visible until the main window is shown explicitly, and add status
updates at each slow init phase ("Loading printer and filament
profiles", "Creating main window", "Loading current preset",
"Showing main window"). The splash is destroyed right after
mainframe->Show(true).
- MainFrame: FileHistory::LoadThumbnails moved to a detached
background thread. The previous synchronous call opened every recent
3MF file at startup — on macOS that triggered the TCC permission
dialog for ~/Downloads mid-launch, freezing the whole app until the
user clicked. Letting it run in the background means the UI is
responsive from the start and thumbnails populate when ready.
* revert: keep LoadThumbnails on the main thread (review feedback)
SoftFever pointed out the detached thread introduces race conditions
(e.g. MainFrame::open_recent_project() reading while the thread writes
m_thumbnails) and that thumbnails may not appear if the homepage shows
before it finishes. LoadThumbnails already uses tbb::parallel_for
internally, so the call-site offload gave no real speedup. Reverted to
the original synchronous call. The macOS TCC-dialog concern that
motivated this will be handled properly in the lazy-init refactor.
---------
Co-authored-by: SoftFever <softfeverever@gmail.com>
fix(printconfig): register enable_filament_dynamic_map and has_filament_switcher options
PR #13388 (X2D Support) added import/export for these options in
bbs_3mf.cpp but never registered them in PrintConfig.cpp. Loading any
.3mf containing these keys throws UnknownOptionException at
PartPlate.cpp:6153 when config->apply() looks up the missing definition.
* bbl device selector search box
* align file and more menus with its button
* fix multiline inputbox border color on windows
* fix multiline inputbox border color on windows
* preferences: use content width on combobox dropdowns
* about: match version text size on macOS
* msg dialog improvements
* fix canvas menu overlapping with sliced plates toolbar
* bbl bind dialog button placement
* bbl color picker
* Update StepMeshDialog.cpp
* drop file dialog
* drop dialog revert fonts
* revert windows multiline border
* Update StepMeshDialog.cpp
* update
* Flushing Volumes: match style of combobox
* fix hyperlink color on canvas notifications
* fix possible issues with shared profiles notification
fix: eliminate UI freeze during cloud preset sync on startup
Move synchronous HTTP calls off the main thread in
GUI_App::start_sync_user_preset():
- Call scan_orphaned_info_files() and process_delete_presets() in
the background sync thread instead of the UI thread, so their
HTTP DELETE calls don't block startup.
- Call reload_settings() directly from the background thread
instead of via CallAfter, so get_user_presets() (HTTP GET) and
load/save_user_presets (file I/O) run off the main thread.
- Guard update_side_preset_ui() and app_config->save() with
is_main_thread_active() / CallAfter so they're safe when called
from a worker thread.
- Simplifiy finishFn lambdas: the progress-dialog case only
destroys the dialog; the no-dialog case is a no-op.
Two related fixes for LAN printing with newer Bambu networking plugins:
1. FileTransferUtils: guard against missing ft_tunnel_* symbols
The eMMC tunnel constructor calls ft_tunnel_create / ft_tunnel_set_status_cb
without checking if the plugin exported them. Older plugins (e.g.
01.10.01.01) don't have these symbols, so the calls dereference null and
crash when sending a print. Now throw a clear exception so callers can
fall back gracefully.
2. PrintJob: disable eMMC print path by default
Plugin 02.03.00.62's eMMC tunnel code hangs indefinitely at the upload
phase (30%) on Bambu H2D, blocked inside the plugin waiting on a future
that never resolves. Cancel doesn't work because the plugin doesn't
check cancel_fn during the wait. The plain FTP path works reliably.
Default to try_emmc_print=false; opt-in via AppConfig setting
"disable_emmc_print" = "0". Also wrap the eMMC tunnel creation in
try/catch so a missing-plugin exception cleanly falls back to FTP
instead of killing the worker thread.
Co-authored-by: hyiger <hyiger@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: SoftFever <softfeverever@gmail.com>
Enable air filtration support in affected system printer profiles
Some system printer profiles that support air filtration had the feature
incorrectly disabled in the printer settings.
This caused the related filament settings to be hidden, making the feature
unavailable to users even though it is supported by the printer.
Enable "support_air_filtration" in affected system printer profiles and
bump profile version thus forcing Orca to refresh cached settings.
This ensures air filtration settings are visible and usable on printers
that support the feature.
Fix Windows single-instance file handoff
On Windows, opening a model file while OrcaSlicer is already running could
fail when single-instance mode was enabled.
The second launch correctly detected that another instance already existed,
but it could no longer find the running main window to forward the file-open
request. As a result, the new process exited and the file was dropped.
This happened because the existing-instance lookup depended on the native
window title containing "OrcaSlicer". After the titlebar change from #12706,
the title may contain only the project name, so the running instance was no
longer discoverable that way.
Fix this by identifying the existing main window through stable window
properties instead of title text:
- require the expected wxWidgets window class
- require the instance hash properties to exist
- match against the current instance hash
This restores forwarding of externally opened files to the already-running
instance without depending on the current titlebar text.
Hide tree support parameters not in use
- hide independent support layer height for organic tree support
- hide threshold overlap for tree supports
Co-authored-by: SoftFever <softfeverever@gmail.com>
* Fix speed popup refresh and sizing in Preview
Fix two UX issues in the Preview actual speed profile popup.
Keyboard-driven horizontal slider changes could leave the popup visually stale
until a later input event, which made keyboard navigation feel delayed.
Also, the speed-profile popup could briefly render at an incorrect height
before resizing on the next frame.
This change makes keyboard slider updates explicitly request a follow-up frame,
so refresh no longer depends on incidental mouse activity.
It also removes auto-resize from ToolPositionTableWnd and sizes the popup
before begin() each frame. The popup height is computed from plot height,
table rows, and window paddings, then clamped to at least the height of the
adjacent ToolPosition window.
The popup width is now computed from translated header text and padding terms,
with a 16:9-derived minimum for a more stable appearance. The width is cached
for the session and recalculated when UI scale changes.
Result:
- keyboard navigation updates reliably
- popup no longer shows the transient wrong-height first draw
- sizing is more stable across scale and localization
* Fix ToolPosition window also + other fixes
* Fix compile error when ENABLE_ACTUAL_SPEED_DEBUG disabled
IMGUI_DEFINE_MATH_OPERATORS is needed even if ENABLE_ACTUAL_SPEED_DEBUG is not enabled
* Guard seam fallback vertex index in GCodeViewer
Fix legend hover hit-testing
Fix GCode viewer legend where the eye icon and right edge don’t respond to hover/click unless you click slightly left (works after switching view types unless the vertical slide is used).