Commit Graph

29109 Commits

Author SHA1 Message Date
Igor Mammedov
c746c48649 CrealityPrint: add ws_send_and_read() helper
Add a reusable websocket helper that sends a JSON command and loops
reads until finding a response containing the expected key. This
handles the printer's unsolicited status messages that arrive on
connect before the actual response. Returns empty string on timeout
instead of throwing.

Signed-off-by: Igor Mammedov <niallain@gmail.com>
2026-05-18 09:41:32 +02:00
Igor Mammedov
8e1ef9bc5f CrealityPrint: add ws_connect() helper
Consolidate websocket connection setup into a reusable helper.
Migrate from tcp::socket to beast::tcp_stream for timeout support.
Set SO_RCVTIMEO read timeout (3s) and connect timeout (5s).
Refactor query_boxes_info() and start_print() to use ws_connect().

Signed-off-by: Igor Mammedov <niallain@gmail.com>
2026-05-18 09:41:32 +02:00
Igor Mammedov
aa9d472d9e CrealityPrint: add model detection from /info endpoint
Parse the model field from the /info JSON response to enable
model-specific features. Add supports_multi_color_print() which
returns true for K2-platform printers (K2 Plus, K2 Pro, K2).

Signed-off-by: Igor Mammedov <niallain@gmail.com>
2026-05-18 09:41:32 +02:00
Igor Mammedov
e995541c25 CrealityPrint: propagate start_print() errors to caller
Change start_print() from void to bool with a wxString& msg
out-parameter, matching the error handling pattern used by Duet,
MKS, ESP3D and Flashforge. On failure, the error message is now
reported to the user via error_fn instead of being silently
swallowed. Use BOOST_LOG_TRIVIAL for logging instead of std::cerr.

Signed-off-by: Igor Mammedov <niallain@gmail.com>
2026-05-18 09:41:31 +02:00
Igor Mammedov
376841e28e Http: consolidate get_host_from_url() into Http class
Move duplicate get_host_from_url() implementations from ElegooLink and
OctoPrint into Http as a static method using the curl_url API. This
eliminates code duplication and provides a single reliable URL host
extraction utility for all print host implementations.

Signed-off-by: Igor Mammedov <niallain@gmail.com>
2026-05-18 09:41:31 +02:00
Igor Mammedov
8a650ec672 ElegooLink: fix host extraction for IP address parsing
get_host_from_url() returns host:port which may cause
boost::asio::ip::make_address() to fail when a port is present,
bypassing the direct IP upload path and falling through to DNS
resolution via upload_inner_with_host(). Use get_host_from_url_no_port()
to extract just the host.

Signed-off-by: Igor Mammedov <niallain@gmail.com>
2026-05-18 09:41:31 +02:00
yw4z
f0392ab226 Show filament edit button or action menu dynamically depends on single / multi materilal usage (#12651)
* init

* fix build error

* add guards

* Update Plater.cpp
2026-05-18 13:59:22 +08:00
Hanno Witzleb
3ca7c4b752 Unify Tool UI Footer (#12850)
* 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>
2026-05-18 12:58:58 +08:00
Hanno Witzleb
15451c6c50 Feature: Multiple dovetail cuts (#12318)
* 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>
2026-05-18 12:57:48 +08:00
r3dbaba
1447602d43 Add ability to assign None/Pan/Rotate to mouse buttons (#10736)
* 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>
2026-05-18 08:54:21 +08:00
yw4z
6cf7db1ded Match titlebar font on Linux (#12828)
* Update BBLTopbar.cpp

* Update BBLTopbar.cpp

* Update BBLTopbar.cpp

* Update BBLTopbar.cpp
2026-05-18 00:43:22 +03:00
Ioannis Giannakas
d52d0a082d Option to always travel to wipe tower before Tx commands on multi-toolhead setups using type 2 tower (#13703)
* Option to always travel to wipe tower before Tx commands on multi-toolhead setups using type 2 tower
2026-05-17 20:46:08 +01:00
SoftFever
484ce81e38 Fix sidebar filament count for multi-extruder printers (#13706)
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.
2026-05-18 01:18:09 +08:00
Matthew Nickerson
bcbc581417 fix: harden CLI export without OpenGL thumbnails (#13532)
## 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`
2026-05-17 20:10:39 +08:00
Noisyfox
c965b2a5b3 Fix macOS object-list filament editor crash/glitch (#13700)
# 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)
2026-05-17 19:48:12 +08:00
TheLegendTubaGuy
da5a13a032 Fix DataViewBitmapText assignment 2026-05-17 02:29:39 -05:00
Noisyfox
1c0d0b89cc Keep painting after cut (#13472)
[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
2026-05-17 14:38:37 +08:00
Ian Bassi
873d0ed26e Graphics Preferences: Anti-aliasing + FPS (#13538)
* 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>
2026-05-17 13:31:51 +08:00
Rodrigo Faselli
b3fe733bf2 Fix Build (#13694) 2026-05-16 12:56:00 -03:00
SoftFever
a0e1aa2507 update agents.md 2026-05-16 22:22:06 +08:00
yw4z
95b23cea0f [Linux] Fix scrollbar appears while 1 filament exist on filament area (#13363)
init
2026-05-16 22:10:17 +08:00
packerlschupfer
f760f4e462 Fix Flow Ratio dialog shrinking after main window minimize (#13545)
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>
2026-05-16 21:29:01 +08:00
Ian Bassi
9ec2fe3c45 Add tooltips to Transfer buttons (#13535)
* 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>
2026-05-16 21:28:15 +08:00
Andrei
a0717853df Reduce warnings stemming from libslic3r/Config.hpp (#13533)
https://github.com/prusa3d/PrusaSlicer/pull/15106
2026-05-16 21:16:57 +08:00
gaaat98
82cedc0316 Improved SnapmakerPrinterAgent filament sync (#13265)
* Improved SnapmakerPrinterAgent filament sync

* Update src/slic3r/Utils/SnapmakerPrinterAgent.cpp

Fixed missing assignment

* fixed issues

---------
2026-05-16 20:04:10 +08:00
Kevin J. Lynagh
8dd1dd8921 Fix filament syncing by fixing nozzle diameter guards (#13330)
* 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>
2026-05-16 19:13:40 +08:00
anjis
427d0f7a9f Support file uploads and the device details page for Elegoo Centauri Carbon 2 (#13212)
* 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>
2026-05-16 15:22:31 +08:00
gedanke
5a136a25d1 perf: speed up startup and show progress in splash screen (#13667)
* 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>
2026-05-16 14:42:25 +08:00
Francesco Palmarini
83179d5978 Make flushing volumes dialog resizable (#13663) 2026-05-16 07:37:16 +01:00
Allyn Malventano
fb5296aad6 fix: register enable_filament_dynamic_map and has_filament_switcher config options (#13623)
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.
2026-05-16 14:24:26 +08:00
RobertKuszmar
74f2becb23 Fix PrinterWebView only clear deferred url on success (#11508)
* Fix only clear deferred url on success

* add comments

---------

Co-authored-by: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com>
Co-authored-by: yw4z <ywsyildiz@gmail.com>
2026-05-16 14:20:43 +08:00
Justin Levine
1555fc92a5 docs(readme): update logo credit GitHub username (#13680) 2026-05-15 22:40:36 -03:00
Ian Bassi
2f7441317b Updates for printer covers (#13660)
* Remove border for X2D image

* RatRig improvement

* Update Elegoo Centauri_cover.png

* Update Kingroon KLP1_cover.png

* Update FlyingBear Reborn3_cover.png

* Update Folgertech FT-6_cover.png

* Update Snapmaker J1_cover.png

* flashforge c5

* RatRir diagonal

* FlashForge perspective

* Update Orca Arena X1 Carbon_cover.png

* Update Tiertime UP310 Pro_cover.png

* Update Folgertech i3_cover.png

* Update FlyingBear Ghost 6_cover.png

* Update Lulzbot Taz 4 or 5_cover.png

* Update Snapmaker J1_cover.png

* Revert "Update Orca Arena X1 Carbon_cover.png"

This reverts commit a6e0f592a1.

* Update Orca Arena X1 Carbon_cover.png

* Update Elegoo Centauri_cover.png

* Update Tiertime UP310 Pro_cover.png

* Update Snapmaker J1_cover.png

* Update Bambu Lab X2D_cover.png

* flashforge creator

* Update Snapmaker U1_cover.png

* Update Folgertech FT-6_cover.png

* Update Kingroon KLP1_cover.png

* Update Folgertech i3_cover.png

* LH stinger

* Update Lulzbot Taz 4 or 5_cover.png

* flyingbear

* LH Stinger

* deltamaker

* ratrig

* Update Generic Repetier Printer_cover.png

---------

Co-authored-by: yw4z <ywsyildiz@gmail.com>
2026-05-15 20:44:33 -03:00
yw4z
b3bb8604c4 UI fixes / improvements (#12513)
* 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
2026-05-16 01:12:30 +08:00
Francesco Palmarini
d614917d1d Fix H2D LAN print job routing (#13662) 2026-05-16 01:09:31 +08:00
Ocraftyone
4154785025 Speed up encoding check (#10873)
Update encoding check
2026-05-15 23:45:39 +08:00
SoftFever
2167378bbe Enhancement: eliminate UI freeze during cloud preset sync on startup (#13673)
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.
2026-05-15 19:45:24 +08:00
yw4z
cf0dfd12ce Clarify Create nozzle for existing printer (#11773)
* Update CreatePresetsDialog.cpp

* add information for existing nozzles
2026-05-15 10:03:17 +08:00
Eldenroot
40888242c6 CLI: add layer_height and sparse_infill_density and wall_loops into result (#13001)
* CLI: add layer_height into result

cherry pick 0b857b4c77

* add sparse_infill_density and wall_loops

cherry pick ea9b20593c
2026-05-15 09:58:45 +08:00
Ocraftyone
23e6d8440d Bump Devcontainer Ubuntu Version (#12252)
Bump ver
2026-05-15 09:57:41 +08:00
yw4z
3471b24362 Fix: Font rendering pixelated when cleartype disabled (#12201)
init
2026-05-15 09:57:12 +08:00
SoftFever
6852845e0f fixed an logic error when adjust logging level 2026-05-15 09:52:19 +08:00
Hyiger
ecc53d9415 Fix LAN printing crashes and hangs on Bambu H2D (#13296)
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>
2026-05-15 01:06:52 +08:00
Kiss Lorand
d14819e58f Fix air filtration settings hidden on printers that support that feature (#13384)
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.
2026-05-15 00:59:19 +08:00
Kiss Lorand
69594fa586 Fix Windows file handoff when single-instance mode is enabled (#12944)
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.
2026-05-15 00:57:52 +08:00
Kiss Lorand
291b34a8fd Hide some non-applicable settings for tree supports to prevent confusion (#12367)
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>
2026-05-15 00:50:20 +08:00
Kiss Lorand
26e6216d91 Fix stale keyboard refresh and auto-resize flicker of speed profile window in Preview tab (#12707)
* 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
2026-05-15 00:48:23 +08:00
Kiss Lorand
700292f9a6 Fix: Right Edge of G-code Viewer Legend Rows Not Interactive (#11899)
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).
2026-05-15 00:46:05 +08:00
Kiss Lorand
d2ca5d3a1e Fix hybrid tree first-layer support base behavior and expose density setting (#13454)
Fix hybrid tree first-layer support base flow and UI consistency

Fix incorrect first-layer generation for hybrid tree supports.

The support base on the first layer used brim flow instead of support material flow,
which could lead to incorrect extrusion behavior and wrong material usage in
multi-material prints.

Additionally, spacing and density for the regular support part were not consistently
derived from the actual first-layer support flow when first-layer and regular
line widths differed.

Hybrid-specific behavior is clarified:
- first-layer expansion applies only to the regular support part
- tree-only regions keep their existing behavior

The first-layer support pattern is aligned with normal and organic tree supports
to ensure consistent and meaningful density behavior.

Also make first-layer support expansion and density settings visible whenever
supports are enabled, as density was already affecting hybrid supports but was
hidden in the UI.
2026-05-15 00:44:40 +08:00
Francesco Palmarini
dd8cb89f6d Fix freeze after hiding sync popup (#13657)
Avoid calling Show() on the main frame when it is already visible from BaseTransparentDPIFrame::on_hide(). On GTK this can re-enter size/layout handling after filament sync and leave the UI unresponsive.
2026-05-15 00:41:04 +08:00