git: c4fa8a7ea8f0 - main - cad/PrusaSlicer: update to 2.7.2

From: Michael Zhilin <mizhka_at_FreeBSD.org>
Date: Thu, 28 Mar 2024 19:37:36 UTC
The branch main has been updated by mizhka:

URL: https://cgit.FreeBSD.org/ports/commit/?id=c4fa8a7ea8f07e2b889d72f2b7f8997b5ea8f665

commit c4fa8a7ea8f07e2b889d72f2b7f8997b5ea8f665
Author:     Michael Zhilin <mizhka@FreeBSD.org>
AuthorDate: 2024-03-11 18:32:46 +0000
Commit:     Michael Zhilin <mizhka@FreeBSD.org>
CommitDate: 2024-03-28 19:34:58 +0000

    cad/PrusaSlicer: update to 2.7.2
    
    Reported by: Teodor Sigaev <teodorsigaev@gmail.com>
    Reviewed by: lwhsu (mentor)
    Sponsored by: Postgres Professional
    Differential Revision: https://reviews.freebsd.org/D44315
---
 cad/PrusaSlicer/Makefile                           | 17 ++++++++----
 cad/PrusaSlicer/distinfo                           |  6 ++--
 cad/PrusaSlicer/files/patch-CMakeLists.txt         | 21 ++++++++++----
 cad/PrusaSlicer/files/patch-src_CMakeLists.txt     | 12 ++++----
 .../files/patch-src_libnanosvg_nanosvg.h           |  2 +-
 .../files/patch-src_libnanosvg_nanosvgrast.h       |  2 +-
 ...libslic3r_Arrange_Core_NFP_NFPConcave__CGAL.cpp | 11 ++++++++
 .../files/patch-src_libslic3r_CMakeLists.txt       |  4 +--
 .../files/patch-src_libslic3r_CutSurface.cpp       | 10 +++++++
 .../files/patch-src_libslic3r_EmbossShape.hpp      | 11 ++++++++
 .../files/patch-src_libslic3r_Format_SL1__SVG.cpp  |  4 +--
 .../files/patch-src_libslic3r_GCodeSender.cpp      |  6 ++--
 ...tch-src_libslic3r_Geometry_VoronoiUtilsCgal.cpp | 17 ++++++++++++
 .../files/patch-src_libslic3r_MeshBoolean.cpp      | 11 ++++++++
 .../files/patch-src_libslic3r_NSVGUtils.hpp        |  8 +++---
 .../files/patch-src_libslic3r_Platform.cpp         |  4 +--
 .../files/patch-src_libslic3r_Platform.hpp         |  4 +--
 .../patch-src_libslic3r_SupportSpotsGenerator.cpp  | 18 ++++++------
 .../files/patch-src_libslic3r_Triangulation.cpp    | 12 ++++++++
 .../files/patch-src_slic3r_CMakeLists.txt          | 10 +++----
 .../files/patch-src_slic3r_GUI_BitmapCache.cpp     |  8 +++---
 .../files/patch-src_slic3r_GUI_ConfigWizard.cpp    | 18 ++++++------
 .../files/patch-src_slic3r_GUI_ConfigWizard.hpp    |  6 ++--
 ...tch-src_slic3r_GUI_DesktopIntegrationDialog.cpp |  7 +++--
 ...tch-src_slic3r_GUI_DesktopIntegrationDialog.hpp |  9 ++++--
 .../files/patch-src_slic3r_GUI_ExtraRenderers.cpp  |  4 +--
 .../files/patch-src_slic3r_GUI_Field.cpp           |  4 +--
 .../files/patch-src_slic3r_GUI_GLCanvas3D.cpp      |  4 +--
 .../files/patch-src_slic3r_GUI_GLTexture.cpp       |  4 +--
 cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI.cpp |  6 ++--
 cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI.hpp |  4 +--
 .../files/patch-src_slic3r_GUI_GUI__App.cpp        | 32 +++++++++++-----------
 .../files/patch-src_slic3r_GUI_GUI__Factories.cpp  |  4 +--
 .../patch-src_slic3r_GUI_GUI__ObjectLayers.cpp     |  6 ++--
 ...atch-src_slic3r_GUI_GUI__ObjectManipulation.cpp | 12 --------
 .../files/patch-src_slic3r_GUI_GUI__Preview.cpp    |  6 ++--
 .../files/patch-src_slic3r_GUI_GUI__Preview.hpp    |  4 +--
 .../files/patch-src_slic3r_GUI_GUI__Utils.cpp      |  6 ++--
 .../patch-src_slic3r_GUI_Gizmos_GLGizmoEmboss.cpp  | 11 --------
 .../patch-src_slic3r_GUI_Gizmos_GLGizmoSVG.cpp     | 20 ++++++++++++++
 .../files/patch-src_slic3r_GUI_IconManager.cpp     | 13 +++++++++
 .../files/patch-src_slic3r_GUI_ImGuiWrapper.cpp    |  4 +--
 .../files/patch-src_slic3r_GUI_InstanceCheck.cpp   |  8 +++---
 .../files/patch-src_slic3r_GUI_InstanceCheck.hpp   |  6 ++--
 .../patch-src_slic3r_GUI_KBShortcutsDialog.cpp     |  4 +--
 .../patch-src_slic3r_GUI_Mouse3DController.cpp     |  6 ++--
 .../files/patch-src_slic3r_GUI_OpenGLManager.cpp   |  4 +--
 .../files/patch-src_slic3r_GUI_OptionsGroup.cpp    |  6 ++--
 .../patch-src_slic3r_GUI_PhysicalPrinterDialog.cpp |  4 +--
 .../files/patch-src_slic3r_GUI_Plater.cpp          | 10 +++----
 .../files/patch-src_slic3r_GUI_Preferences.cpp     |  6 ++--
 .../patch-src_slic3r_GUI_PresetComboBoxes.cpp      |  4 +--
 .../patch-src_slic3r_GUI_PresetComboBoxes.hpp      |  4 +--
 .../patch-src_slic3r_GUI_PrintHostDialogs.cpp      | 20 +++++++-------
 .../patch-src_slic3r_GUI_RemovableDriveManager.cpp |  4 +--
 cad/PrusaSlicer/files/patch-src_slic3r_GUI_Tab.cpp | 30 ++++++++++----------
 .../patch-src_slic3r_GUI_UnsavedChangesDialog.cpp  | 16 +++++------
 .../patch-src_slic3r_GUI_UnsavedChangesDialog.hpp  |  6 ++--
 .../files/patch-src_slic3r_GUI_UpdateDialogs.cpp   |  6 ++--
 .../files/patch-src_slic3r_GUI_wxExtensions.cpp    | 10 +++----
 .../files/patch-src_slic3r_GUI_wxExtensions.hpp    |  4 +--
 .../patch-src_slic3r_Utils_FontConfigHelp.hpp      |  4 +--
 .../files/patch-src_slic3r_Utils_Serial.cpp        |  6 ++--
 .../files/patch-src_slic3r_Utils_WifiScanner.cpp   | 27 ++++++++++++++++++
 .../files/patch-src_slic3r_Utils_WxFontUtils.cpp   | 12 ++++----
 .../files/patch-tests_libslic3r_test__emboss.cpp   | 10 +++----
 cad/PrusaSlicer/pkg-plist                          | 10 +++----
 67 files changed, 369 insertions(+), 240 deletions(-)

diff --git a/cad/PrusaSlicer/Makefile b/cad/PrusaSlicer/Makefile
index 12c5d5f1fa6d..69134e102637 100644
--- a/cad/PrusaSlicer/Makefile
+++ b/cad/PrusaSlicer/Makefile
@@ -1,7 +1,6 @@
 PORTNAME=	PrusaSlicer
 DISTVERSIONPREFIX=version_
-DISTVERSION=	2.6.0
-PORTREVISION=	9
+DISTVERSION=	2.7.2
 CATEGORIES=	cad
 DIST_SUBDIR=	PrusaSlicer
 
@@ -14,9 +13,13 @@ LICENSE_FILE=	${WRKSRC}/LICENSE
 
 BUILD_DEPENDS=	cereal>=1.3.0.10:devel/cereal \
 		cgal>=5.0.2:math/cgal \
-		opencascade>=7.7.0:cad/opencascade
+		opencascade>=7.7.0:cad/opencascade \
+		libbgcode>=0.2.0:cad/libbgcode
 
-LIB_DEPENDS=	libtbb.so:devel/onetbb \
+LIB_DEPENDS+=	libbgcode_convert.so:cad/libbgcode \
+		libbgcode_binarize.so:cad/libbgcode \
+		libbgcode_core.so:cad/libbgcode \
+		libtbb.so:devel/onetbb \
 		libboost_log.so:devel/boost-libs \
 		libImath.so:math/Imath \
 		libnlopt.so:math/nlopt \
@@ -38,7 +41,8 @@ LIB_DEPENDS=	libtbb.so:devel/onetbb \
 		libharfbuzz.so:print/harfbuzz \
 		libwayland-egl.so:graphics/wayland
 
-USES=		cmake cpe desktop-file-utils eigen:3 gettext gl pkgconfig jpeg iconv gnome xorg
+USES=		cmake cpe desktop-file-utils eigen:3 gettext gl gnome iconv \
+		jpeg pkgconfig xorg
 CPE_VENDOR=	prusa3d
 USE_GITHUB=	yes
 GH_ACCOUNT=	prusa3d
@@ -50,7 +54,8 @@ USE_XORG=	x11
 CMAKE_ARGS+=	-DwxWidgets_CONFIG_EXECUTABLE="${WX_CONFIG}" \
 		-DSLIC3R_GTK=3 \
 		-DSLIC3R_FHS=1 \
-                -DSLIC3R_PCH=OFF
+		-DSLIC3R_PCH=OFF \
+		-DSLIC3R_BUILD_TESTS=OFF
 
 PORTDATA=	*
 
diff --git a/cad/PrusaSlicer/distinfo b/cad/PrusaSlicer/distinfo
index 209b6b9fb7c8..ea27189ec62c 100644
--- a/cad/PrusaSlicer/distinfo
+++ b/cad/PrusaSlicer/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1690319127
-SHA256 (PrusaSlicer/prusa3d-PrusaSlicer-version_2.6.0_GH0.tar.gz) = a15f68e3b18a047c8c9a18a9d91629d2c777be1932087684cf6d2332d0888e77
-SIZE (PrusaSlicer/prusa3d-PrusaSlicer-version_2.6.0_GH0.tar.gz) = 56430180
+TIMESTAMP = 1709292528
+SHA256 (PrusaSlicer/prusa3d-PrusaSlicer-version_2.7.2_GH0.tar.gz) = 0af8ab83ad33cdebc1d13d37d8ed3b2125d84532eb4bca7618c422bf7648ebee
+SIZE (PrusaSlicer/prusa3d-PrusaSlicer-version_2.7.2_GH0.tar.gz) = 64915607
diff --git a/cad/PrusaSlicer/files/patch-CMakeLists.txt b/cad/PrusaSlicer/files/patch-CMakeLists.txt
index 73daa6aa4e9b..bb479cff34f2 100644
--- a/cad/PrusaSlicer/files/patch-CMakeLists.txt
+++ b/cad/PrusaSlicer/files/patch-CMakeLists.txt
@@ -1,6 +1,6 @@
---- CMakeLists.txt.orig	2023-06-19 12:07:14 UTC
+--- CMakeLists.txt.orig	2024-02-29 13:03:32 UTC
 +++ CMakeLists.txt
-@@ -4,6 +4,7 @@ include(CMakeDependentOption)
+@@ -14,6 +14,7 @@ include(CMakeDependentOption)
  include("version.inc")
  include(GNUInstallDirs)
  include(CMakeDependentOption)
@@ -8,7 +8,7 @@
  
  set(SLIC3R_RESOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/resources")
  file(TO_NATIVE_PATH "${SLIC3R_RESOURCES_DIR}" SLIC3R_RESOURCES_DIR_WIN)
-@@ -207,7 +208,7 @@ endif ()
+@@ -218,7 +219,7 @@ endif ()
      endif ()
  endif ()
  
@@ -17,7 +17,16 @@
      find_package(PkgConfig REQUIRED)
  
      if (CMAKE_VERSION VERSION_LESS "3.1")
-@@ -446,7 +447,7 @@ find_package(EXPAT REQUIRED)
+@@ -248,6 +249,8 @@ if (NOT MSVC AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL 
+     # On GCC and Clang, no return from a non-void function is a warning only. Here, we make it an error.
+     add_compile_options(-Werror=return-type)
+ 
++    add_compile_options(-Wno-enum-constexpr-conversion -Wno-implicit-const-int-float-conversion)
++
+     # removes LOTS of extraneous Eigen warnings (GCC only supports it since 6.1)
+     # https://eigen.tuxfamily.org/bz/show_bug.cgi?id=1221
+     if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.0)
+@@ -457,7 +460,7 @@ find_package(EXPAT REQUIRED)
  # no matter what.
  find_package(EXPAT REQUIRED)
  
@@ -26,7 +35,7 @@
  
  if (TARGET EXPAT::EXPAT )
      target_link_libraries(libexpat INTERFACE EXPAT::EXPAT)
-@@ -627,8 +628,8 @@ elseif (SLIC3R_FHS)
+@@ -631,8 +634,8 @@ elseif (SLIC3R_FHS)
      install(DIRECTORY ${SLIC3R_RESOURCES_DIR}/ DESTINATION ${SLIC3R_FHS_RESOURCES}
          PATTERN "*/udev" EXCLUDE
      )
@@ -37,7 +46,7 @@
      foreach(SIZE 32 128 192)
          install(FILES ${SLIC3R_RESOURCES_DIR}/icons/PrusaSlicer_${SIZE}px.png
              DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}x${SIZE}/apps RENAME PrusaSlicer.png
-@@ -637,7 +638,8 @@ elseif (SLIC3R_FHS)
+@@ -641,7 +644,8 @@ elseif (SLIC3R_FHS)
              DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}x${SIZE}/apps RENAME PrusaSlicer-gcodeviewer.png
          )
      endforeach()
diff --git a/cad/PrusaSlicer/files/patch-src_CMakeLists.txt b/cad/PrusaSlicer/files/patch-src_CMakeLists.txt
index e084cdc3c97c..77880e102ea7 100644
--- a/cad/PrusaSlicer/files/patch-src_CMakeLists.txt
+++ b/cad/PrusaSlicer/files/patch-src_CMakeLists.txt
@@ -1,15 +1,15 @@
---- src/CMakeLists.txt.orig	2023-06-19 12:07:14 UTC
+--- src/CMakeLists.txt.orig	2023-12-12 14:21:21 UTC
 +++ src/CMakeLists.txt
-@@ -78,7 +78,7 @@ if (SLIC3R_GUI)
+@@ -62,7 +62,7 @@ if (SLIC3R_GUI)
  
-     find_package(JPEG QUIET)
-     find_package(TIFF QUIET)
+     find_package(JPEG MODULE QUIET)
+     find_package(TIFF MODULE QUIET) # Tiff exported config is broken for static build
 -    find_package(NanoSVG REQUIRED)
-+    # find_package(NanoSVG REQUIRED)
++	#find_package(NanoSVG REQUIRED)
  
      string(REGEX MATCH "wxpng" WX_PNG_BUILTIN ${wxWidgets_LIBRARIES})
      if (PNG_FOUND AND NOT WX_PNG_BUILTIN)
-@@ -147,7 +147,7 @@ endif ()
+@@ -131,7 +131,7 @@ if (NOT WIN32 AND NOT APPLE)
      set_target_properties(PrusaSlicer PROPERTIES OUTPUT_NAME "prusa-slicer")
  endif ()
  
diff --git a/cad/PrusaSlicer/files/patch-src_libnanosvg_nanosvg.h b/cad/PrusaSlicer/files/patch-src_libnanosvg_nanosvg.h
index 90f9ef46e777..f43183e3368f 100644
--- a/cad/PrusaSlicer/files/patch-src_libnanosvg_nanosvg.h
+++ b/cad/PrusaSlicer/files/patch-src_libnanosvg_nanosvg.h
@@ -1,4 +1,4 @@
---- src/libnanosvg/nanosvg.h.orig	2024-03-17 16:57:39 UTC
+--- src/libnanosvg/nanosvg.h.orig	2024-01-12 13:12:38 UTC
 +++ src/libnanosvg/nanosvg.h
 @@ -0,0 +1,3106 @@
 +/*
diff --git a/cad/PrusaSlicer/files/patch-src_libnanosvg_nanosvgrast.h b/cad/PrusaSlicer/files/patch-src_libnanosvg_nanosvgrast.h
index 7a4e757402ff..1c1f0565a022 100644
--- a/cad/PrusaSlicer/files/patch-src_libnanosvg_nanosvgrast.h
+++ b/cad/PrusaSlicer/files/patch-src_libnanosvg_nanosvgrast.h
@@ -1,4 +1,4 @@
---- src/libnanosvg/nanosvgrast.h.orig	2024-03-17 16:57:40 UTC
+--- src/libnanosvg/nanosvgrast.h.orig	2024-01-12 13:12:38 UTC
 +++ src/libnanosvg/nanosvgrast.h
 @@ -0,0 +1,1482 @@
 +/*
diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_Arrange_Core_NFP_NFPConcave__CGAL.cpp b/cad/PrusaSlicer/files/patch-src_libslic3r_Arrange_Core_NFP_NFPConcave__CGAL.cpp
new file mode 100644
index 000000000000..6ac5039ca58f
--- /dev/null
+++ b/cad/PrusaSlicer/files/patch-src_libslic3r_Arrange_Core_NFP_NFPConcave__CGAL.cpp
@@ -0,0 +1,11 @@
+--- src/libslic3r/Arrange/Core/NFP/NFPConcave_CGAL.cpp.orig	2024-03-01 12:13:10 UTC
++++ src/libslic3r/Arrange/Core/NFP/NFPConcave_CGAL.cpp
+@@ -5,6 +5,8 @@
+ #include "NFP.hpp"
+ #include "NFPConcave_CGAL.hpp"
+ 
++#include <boost/next_prior.hpp>
++
+ #include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
+ #include <CGAL/partition_2.h>
+ #include <CGAL/Partition_traits_2.h>
diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_CMakeLists.txt b/cad/PrusaSlicer/files/patch-src_libslic3r_CMakeLists.txt
index 28c3c0d96099..6c3d971a3d87 100644
--- a/cad/PrusaSlicer/files/patch-src_libslic3r_CMakeLists.txt
+++ b/cad/PrusaSlicer/files/patch-src_libslic3r_CMakeLists.txt
@@ -1,6 +1,6 @@
---- src/libslic3r/CMakeLists.txt.orig	2023-06-19 12:07:14 UTC
+--- src/libslic3r/CMakeLists.txt.orig	2024-02-29 13:03:32 UTC
 +++ src/libslic3r/CMakeLists.txt
-@@ -490,7 +490,6 @@ target_link_libraries(libslic3r
+@@ -575,7 +575,6 @@ target_link_libraries(libslic3r
  target_link_libraries(libslic3r
      libnest2d
      admesh
diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_CutSurface.cpp b/cad/PrusaSlicer/files/patch-src_libslic3r_CutSurface.cpp
new file mode 100644
index 000000000000..cc1eb6867fd6
--- /dev/null
+++ b/cad/PrusaSlicer/files/patch-src_libslic3r_CutSurface.cpp
@@ -0,0 +1,10 @@
+--- src/libslic3r/CutSurface.cpp.orig	2024-03-01 11:43:14 UTC
++++ src/libslic3r/CutSurface.cpp
+@@ -29,6 +29,7 @@ using namespace Slic3r;
+ using namespace Slic3r;
+ #include "ExPolygonsIndex.hpp"
+ 
++#include <boost/next_prior.hpp>
+ #include <CGAL/Polygon_mesh_processing/corefinement.h>
+ #include <CGAL/Exact_integer.h>
+ #include <CGAL/Surface_mesh.h>
diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_EmbossShape.hpp b/cad/PrusaSlicer/files/patch-src_libslic3r_EmbossShape.hpp
new file mode 100644
index 000000000000..77071f9a68b9
--- /dev/null
+++ b/cad/PrusaSlicer/files/patch-src_libslic3r_EmbossShape.hpp
@@ -0,0 +1,11 @@
+--- src/libslic3r/EmbossShape.hpp.orig	2024-01-12 13:37:33 UTC
++++ src/libslic3r/EmbossShape.hpp
+@@ -12,7 +12,7 @@
+ #include "Point.hpp" // Transform3d
+ #include "ExPolygon.hpp"
+ #include "ExPolygonSerialize.hpp"
+-#include "nanosvg/nanosvg.h" // NSVGimage
++#include "libnanosvg/nanosvg.h" // NSVGimage
+ 
+ namespace Slic3r {
+ 
diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_Format_SL1__SVG.cpp b/cad/PrusaSlicer/files/patch-src_libslic3r_Format_SL1__SVG.cpp
index d19ae2f01782..20e244e4398b 100644
--- a/cad/PrusaSlicer/files/patch-src_libslic3r_Format_SL1__SVG.cpp
+++ b/cad/PrusaSlicer/files/patch-src_libslic3r_Format_SL1__SVG.cpp
@@ -1,6 +1,6 @@
---- src/libslic3r/Format/SL1_SVG.cpp.orig	2023-07-21 14:55:56 UTC
+--- src/libslic3r/Format/SL1_SVG.cpp.orig	2023-12-12 14:21:21 UTC
 +++ src/libslic3r/Format/SL1_SVG.cpp
-@@ -6,7 +6,8 @@
+@@ -10,7 +10,8 @@
  #include "libslic3r/Format/ZipperArchiveImport.hpp"
  
  #define NANOSVG_IMPLEMENTATION
diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_GCodeSender.cpp b/cad/PrusaSlicer/files/patch-src_libslic3r_GCodeSender.cpp
index bfa2758566f0..2c326165f35a 100644
--- a/cad/PrusaSlicer/files/patch-src_libslic3r_GCodeSender.cpp
+++ b/cad/PrusaSlicer/files/patch-src_libslic3r_GCodeSender.cpp
@@ -1,6 +1,6 @@
---- src/libslic3r/GCodeSender.cpp.orig	2023-07-24 22:05:38 UTC
+--- src/libslic3r/GCodeSender.cpp.orig	2023-12-12 14:21:21 UTC
 +++ src/libslic3r/GCodeSender.cpp
-@@ -8,7 +8,7 @@
+@@ -14,7 +14,7 @@
  #include <boost/date_time/posix_time/posix_time.hpp>
  #include <boost/lexical_cast.hpp>
  
@@ -9,7 +9,7 @@
  #include <termios.h>
  #endif
  #ifdef __APPLE__
-@@ -146,7 +146,7 @@ GCodeSender::set_baud_rate(unsigned int baud_rate)
+@@ -152,7 +152,7 @@ GCodeSender::set_baud_rate(unsigned int baud_rate)
          if (ioctl(handle, TCSETS2, &ios))
              printf("Error in TCSETS2: %s\n", strerror(errno));
  		
diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_Geometry_VoronoiUtilsCgal.cpp b/cad/PrusaSlicer/files/patch-src_libslic3r_Geometry_VoronoiUtilsCgal.cpp
new file mode 100644
index 000000000000..f511e85ee2dc
--- /dev/null
+++ b/cad/PrusaSlicer/files/patch-src_libslic3r_Geometry_VoronoiUtilsCgal.cpp
@@ -0,0 +1,17 @@
+--- src/libslic3r/Geometry/VoronoiUtilsCgal.cpp.orig	2024-03-01 11:50:11 UTC
++++ src/libslic3r/Geometry/VoronoiUtilsCgal.cpp
+@@ -2,6 +2,7 @@
+ ///|/
+ ///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
+ ///|/
++#include <boost/next_prior.hpp>
+ #include <CGAL/Exact_predicates_exact_constructions_kernel.h>
+ #include <CGAL/Arr_segment_traits_2.h>
+ #include <CGAL/Surface_sweep_2_algorithms.h>
+@@ -325,4 +326,4 @@ VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(cons
+     return true;
+ }
+ 
+-} // namespace Slic3r::Geometry
+\ No newline at end of file
++} // namespace Slic3r::Geometry
diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_MeshBoolean.cpp b/cad/PrusaSlicer/files/patch-src_libslic3r_MeshBoolean.cpp
new file mode 100644
index 000000000000..20e08fb5b937
--- /dev/null
+++ b/cad/PrusaSlicer/files/patch-src_libslic3r_MeshBoolean.cpp
@@ -0,0 +1,11 @@
+--- src/libslic3r/MeshBoolean.cpp.orig	2024-03-01 11:44:05 UTC
++++ src/libslic3r/MeshBoolean.cpp
+@@ -8,6 +8,8 @@
+ #include "libslic3r/TryCatchSignal.hpp"
+ #undef PI
+ 
++#include <boost/next_prior.hpp>
++
+ // Include igl first. It defines "L" macro which then clashes with our localization
+ #include <igl/copyleft/cgal/mesh_boolean.h>
+ #undef L
diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_NSVGUtils.hpp b/cad/PrusaSlicer/files/patch-src_libslic3r_NSVGUtils.hpp
index cfe62886e433..28acfa15ccec 100644
--- a/cad/PrusaSlicer/files/patch-src_libslic3r_NSVGUtils.hpp
+++ b/cad/PrusaSlicer/files/patch-src_libslic3r_NSVGUtils.hpp
@@ -1,11 +1,11 @@
---- src/libslic3r/NSVGUtils.hpp.orig	2023-07-25 16:16:15 UTC
+--- src/libslic3r/NSVGUtils.hpp.orig	2023-12-12 14:21:21 UTC
 +++ src/libslic3r/NSVGUtils.hpp
-@@ -3,7 +3,7 @@
- 
+@@ -11,7 +11,7 @@
  #include "Polygon.hpp"
  #include "ExPolygon.hpp"
+ #include "EmbossShape.hpp" // ExPolygonsWithIds
 -#include "nanosvg/nanosvg.h"    // load SVG file
 +#include "libnanosvg/nanosvg.h"    // load SVG file
  
+ // Helper function to work with nano svg
  namespace Slic3r {
- 
diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_Platform.cpp b/cad/PrusaSlicer/files/patch-src_libslic3r_Platform.cpp
index ac651976424c..7a2ff6c43b2b 100644
--- a/cad/PrusaSlicer/files/patch-src_libslic3r_Platform.cpp
+++ b/cad/PrusaSlicer/files/patch-src_libslic3r_Platform.cpp
@@ -1,6 +1,6 @@
---- src/libslic3r/Platform.cpp.orig	2022-09-06 07:09:19 UTC
+--- src/libslic3r/Platform.cpp.orig	2023-12-12 14:21:21 UTC
 +++ src/libslic3r/Platform.cpp
-@@ -86,6 +86,10 @@ void detect_platform()
+@@ -90,6 +90,10 @@ void detect_platform()
      BOOST_LOG_TRIVIAL(info) << "Platform: OpenBSD";
  	s_platform 		  = Platform::BSDUnix;
  	s_platform_flavor = PlatformFlavor::OpenBSD;
diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_Platform.hpp b/cad/PrusaSlicer/files/patch-src_libslic3r_Platform.hpp
index 15036b0e7a2b..1ee9a290c1e8 100644
--- a/cad/PrusaSlicer/files/patch-src_libslic3r_Platform.hpp
+++ b/cad/PrusaSlicer/files/patch-src_libslic3r_Platform.hpp
@@ -1,6 +1,6 @@
---- src/libslic3r/Platform.hpp.orig	2022-09-06 07:09:19 UTC
+--- src/libslic3r/Platform.hpp.orig	2023-12-12 14:21:21 UTC
 +++ src/libslic3r/Platform.hpp
-@@ -25,6 +25,7 @@ enum class PlatformFlavor
+@@ -29,6 +29,7 @@ enum class PlatformFlavor
      WSL,             // Microsoft's Windows on Linux (Linux kernel simulated on NTFS kernel)
      WSL2,            // Microsoft's Windows on Linux, version 2 (virtual machine)
      OpenBSD,         // For Platform::BSDUnix
diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_SupportSpotsGenerator.cpp b/cad/PrusaSlicer/files/patch-src_libslic3r_SupportSpotsGenerator.cpp
index 2bbd7dd56fc7..fb72be9e02cc 100644
--- a/cad/PrusaSlicer/files/patch-src_libslic3r_SupportSpotsGenerator.cpp
+++ b/cad/PrusaSlicer/files/patch-src_libslic3r_SupportSpotsGenerator.cpp
@@ -1,11 +1,11 @@
---- src/libslic3r/SupportSpotsGenerator.cpp.orig	2023-07-25 08:36:31 UTC
+--- src/libslic3r/SupportSpotsGenerator.cpp.orig	2024-02-29 13:03:32 UTC
 +++ src/libslic3r/SupportSpotsGenerator.cpp
-@@ -849,7 +849,7 @@ std::tuple<SupportPoints, PartialObjects> check_stabil
-                         }
-                     }
+@@ -1054,7 +1054,7 @@ SliceMappings update_active_object_parts(const Layer  
                  }
--                auto estimate_conn_strength = [bottom_z](const SliceConnection &conn) {
-+                auto estimate_conn_strength = [bottom_z](const SliceConnection &conn) -> float {
-                     if (conn.area < EPSILON) { // connection is empty, does not exists. Return max strength so that it is not picked as the
-                                                // weakest connection.
-                         return INFINITY;
+             }
+             const float bottom_z = layer->bottom_z();
+-            auto estimate_conn_strength = [bottom_z](const SliceConnection &conn) {
++            auto estimate_conn_strength = [bottom_z](const SliceConnection &conn) -> float {
+                 if (conn.area < EPSILON) { // connection is empty, does not exists. Return max strength so that it is not picked as the
+                                            // weakest connection.
+                     return INFINITY;
diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_Triangulation.cpp b/cad/PrusaSlicer/files/patch-src_libslic3r_Triangulation.cpp
new file mode 100644
index 000000000000..43387a72e12d
--- /dev/null
+++ b/cad/PrusaSlicer/files/patch-src_libslic3r_Triangulation.cpp
@@ -0,0 +1,12 @@
+--- src/libslic3r/Triangulation.cpp.orig	2024-03-01 11:48:14 UTC
++++ src/libslic3r/Triangulation.cpp
+@@ -2,6 +2,9 @@
+ ///|/
+ ///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
+ ///|/
++
++#include <boost/next_prior.hpp>
++
+ #include "Triangulation.hpp"
+ #include "IntersectionPoints.hpp"
+ #include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_CMakeLists.txt b/cad/PrusaSlicer/files/patch-src_slic3r_CMakeLists.txt
index 1fcc8d0ef165..7c735f83f9d0 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_CMakeLists.txt
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_CMakeLists.txt
@@ -1,7 +1,7 @@
---- src/slic3r/CMakeLists.txt.orig	2023-06-19 12:07:14 UTC
+--- src/slic3r/CMakeLists.txt.orig	2023-12-12 14:21:21 UTC
 +++ src/slic3r/CMakeLists.txt
-@@ -293,7 +293,7 @@ set(SLIC3R_GUI_SOURCES
-     Utils/WxFontUtils.hpp
+@@ -333,7 +333,7 @@ set(SLIC3R_GUI_SOURCES
+     Utils/WifiScanner.cpp
  )
  
 -find_package(NanoSVG REQUIRED)
@@ -9,7 +9,7 @@
  
  if (APPLE)
      list(APPEND SLIC3R_GUI_SOURCES
-@@ -319,11 +319,12 @@ encoding_check(libslic3r_gui)
+@@ -362,11 +362,12 @@ endforeach()
  
  encoding_check(libslic3r_gui)
  
@@ -23,4 +23,4 @@
 +elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
      target_link_libraries(libslic3r_gui ${DBUS_LIBRARIES}) 
  elseif (APPLE)
-     target_link_libraries(libslic3r_gui ${DISKARBITRATION_LIBRARY})
+     target_link_libraries(libslic3r_gui ${DISKARBITRATION_LIBRARY} ${COREWLAN_LIBRARY})
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_BitmapCache.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_BitmapCache.cpp
index 28f6d2e5f40f..6ca562b20d59 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_BitmapCache.cpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_BitmapCache.cpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/BitmapCache.cpp.orig	2023-07-21 12:45:35 UTC
+--- src/slic3r/GUI/BitmapCache.cpp.orig	2023-12-12 14:21:21 UTC
 +++ src/slic3r/GUI/BitmapCache.cpp
-@@ -15,8 +15,9 @@
+@@ -20,8 +20,9 @@
      #include <wx/rawbmp.h>
  #endif /* __WXGTK2__ */
  
@@ -12,7 +12,7 @@
  
  namespace Slic3r { namespace GUI {
  
-@@ -68,7 +69,7 @@ wxBitmapBundle* BitmapCache::insert_bndl(const std::st
+@@ -73,7 +74,7 @@ wxBitmapBundle* BitmapCache::insert_bndl(const std::st
      wxVector<wxBitmap> bitmaps;
  
      std::set<double> scales = {1.0};
@@ -21,7 +21,7 @@
  
  #ifdef __APPLE__
      scales.emplace(m_scale);
-@@ -547,7 +548,7 @@ wxBitmapBundle BitmapCache::mksolid(size_t width_in, s
+@@ -554,7 +555,7 @@ wxBitmapBundle BitmapCache::mksolid(size_t width_in, s
      wxVector<wxBitmap> bitmaps;
  
      std::set<double> scales = { 1.0 };
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ConfigWizard.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ConfigWizard.cpp
index 13b763d0690f..ecba71fe5cf1 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ConfigWizard.cpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ConfigWizard.cpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/ConfigWizard.cpp.orig	2023-07-21 14:05:27 UTC
+--- src/slic3r/GUI/ConfigWizard.cpp.orig	2024-02-29 13:03:32 UTC
 +++ src/slic3r/GUI/ConfigWizard.cpp
-@@ -60,7 +60,7 @@
+@@ -69,7 +69,7 @@
  #include "slic3r/GUI/I18N.hpp"
  #include "slic3r/Config/Version.hpp"
  
@@ -9,7 +9,7 @@
  #define wxLinux_gtk3 true
  #else
  #define wxLinux_gtk3 false
-@@ -583,7 +583,7 @@ void PageWelcome::set_run_reason(ConfigWizard::RunReas
+@@ -596,7 +596,7 @@ void PageWelcome::set_run_reason(ConfigWizard::RunReas
      const bool data_empty = run_reason == ConfigWizard::RR_DATA_EMPTY;
      welcome_text->Show(data_empty);
      cbox_reset->Show(!data_empty);
@@ -18,16 +18,16 @@
      if (!DesktopIntegrationDialog::is_integrated())
          cbox_integrate->Show(true);
      else
-@@ -1474,7 +1474,7 @@ PageDownloader::PageDownloader(ConfigWizard* parent)
-         " The model will be downloaded into folder you choose bellow."
-     ), SLIC3R_APP_NAME));
+@@ -1518,7 +1518,7 @@ PageDownloader::PageDownloader(ConfigWizard* parent)
+         ));
+     }
  
 -#ifdef __linux__
 +#if defined(__linux__) || defined(__FreeBSD__)
      append_text(wxString::Format(_L(
          "On Linux systems the process of registration also creates desktop integration files for this version of application."
      )));
-@@ -1535,7 +1535,7 @@ bool DownloaderUtils::Worker::perform_register(const s
+@@ -1579,7 +1579,7 @@ bool DownloaderUtils::Worker::perform_register(const s
      }
      //key_full = "\"C:\\Program Files\\Prusa3D\\PrusaSlicer\\prusa-slicer-console.exe\" \"%1\"";
      key_full = key_string;
@@ -36,7 +36,7 @@
      // Apple registers for custom url in info.plist thus it has to be already registered since build.
      // The url will always trigger opening of prusaslicer and we have to check that user has allowed it. (GUI_App::MacOpenURL is the triggered method)
  #else 
-@@ -1554,7 +1554,7 @@ void DownloaderUtils::Worker::deregister()
+@@ -1598,7 +1598,7 @@ void DownloaderUtils::Worker::deregister()
          return;
      }
      key_full = key_string;
@@ -45,7 +45,7 @@
      // TODO
  #else 
      BOOST_LOG_TRIVIAL(debug) << "DesktopIntegrationDialog::undo_downloader_registration";
-@@ -3106,7 +3106,7 @@ bool ConfigWizard::priv::apply_config(AppConfig *app_c
+@@ -3063,7 +3063,7 @@ bool ConfigWizard::priv::apply_config(AppConfig *app_c
          if ((check_unsaved_preset_changes = install_bundles.size() > 0))
              header = _L_PLURAL("A new vendor was installed and one of its printers will be activated", "New vendors were installed and one of theirs printers will be activated", install_bundles.size());
  
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ConfigWizard.hpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ConfigWizard.hpp
index 43e076b6584e..5f9a904024cc 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ConfigWizard.hpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ConfigWizard.hpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/ConfigWizard.hpp.orig	2023-07-25 09:21:21 UTC
+--- src/slic3r/GUI/ConfigWizard.hpp.orig	2023-12-12 14:21:21 UTC
 +++ src/slic3r/GUI/ConfigWizard.hpp
-@@ -22,7 +22,7 @@ namespace DownloaderUtils {
+@@ -31,7 +31,7 @@ namespace DownloaderUtils {
          wxWindow*   m_parent{ nullptr };
          wxTextCtrl* m_input_path{ nullptr };
          bool        downloader_checked{ false };
@@ -9,7 +9,7 @@
          bool        perform_registration_linux{ false };
  #endif // __linux__
  
-@@ -41,7 +41,7 @@ namespace DownloaderUtils {
+@@ -50,7 +50,7 @@ namespace DownloaderUtils {
  
          bool on_finish();
          bool perform_register(const std::string& path_override = {});
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_DesktopIntegrationDialog.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_DesktopIntegrationDialog.cpp
index fda01fc8eead..8ad241e21ebb 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_DesktopIntegrationDialog.cpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_DesktopIntegrationDialog.cpp
@@ -1,6 +1,9 @@
---- src/slic3r/GUI/DesktopIntegrationDialog.cpp.orig	2023-07-25 09:24:17 UTC
+--- src/slic3r/GUI/DesktopIntegrationDialog.cpp.orig	2023-12-12 14:21:21 UTC
 +++ src/slic3r/GUI/DesktopIntegrationDialog.cpp
-@@ -1,4 +1,4 @@
+@@ -3,7 +3,7 @@
+ ///|/
+ ///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
+ ///|/
 -#ifdef __linux__
 +#if defined(__linux__) || defined(__FreeBSD__)
  #include "DesktopIntegrationDialog.hpp"
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_DesktopIntegrationDialog.hpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_DesktopIntegrationDialog.hpp
index 392010458d33..7cd3f1114751 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_DesktopIntegrationDialog.hpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_DesktopIntegrationDialog.hpp
@@ -1,12 +1,15 @@
---- src/slic3r/GUI/DesktopIntegrationDialog.hpp.orig	2023-07-25 09:25:50 UTC
+--- src/slic3r/GUI/DesktopIntegrationDialog.hpp.orig	2023-12-12 14:21:21 UTC
 +++ src/slic3r/GUI/DesktopIntegrationDialog.hpp
-@@ -1,4 +1,4 @@
+@@ -2,7 +2,7 @@
+ ///|/
+ ///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
+ ///|/
 -#ifdef __linux__
 +#if defined(__linux__) || defined(__FreeBSD__)
  #ifndef slic3r_DesktopIntegrationDialog_hpp_
  #define slic3r_DesktopIntegrationDialog_hpp_
  
-@@ -42,4 +42,4 @@ class DesktopIntegrationDialog : public wxDialog (priv
+@@ -46,4 +46,4 @@ class DesktopIntegrationDialog : public wxDialog (priv
  } // namespace Slic3r
  
  #endif // slic3r_DesktopIntegrationDialog_hpp_
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ExtraRenderers.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ExtraRenderers.cpp
index ff72ea0a7a92..f667949aee2e 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ExtraRenderers.cpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ExtraRenderers.cpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/ExtraRenderers.cpp.orig	2023-07-25 09:27:23 UTC
+--- src/slic3r/GUI/ExtraRenderers.cpp.orig	2023-12-12 14:21:21 UTC
 +++ src/slic3r/GUI/ExtraRenderers.cpp
-@@ -327,7 +327,7 @@ wxWindow* BitmapChoiceRenderer::CreateEditorCtrl(wxWin
+@@ -343,7 +343,7 @@ wxWindow* BitmapChoiceRenderer::CreateEditorCtrl(wxWin
      c_editor->SetSelection(atoi(data.GetText().c_str()));
  
      
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Field.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Field.cpp
index 8cbd7c553a22..f21bbca1ba56 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Field.cpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Field.cpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/Field.cpp.orig	2023-07-25 09:29:18 UTC
+--- src/slic3r/GUI/Field.cpp.orig	2023-12-12 14:21:21 UTC
 +++ src/slic3r/GUI/Field.cpp
-@@ -199,7 +199,7 @@ static wxString na_value(bool for_spin_ctrl = false)
+@@ -221,7 +221,7 @@ bool Field::is_matched(const std::string& string, cons
  
  static wxString na_value(bool for_spin_ctrl = false)
  {
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GLCanvas3D.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GLCanvas3D.cpp
index a66935080795..4ecbcc7e72b3 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GLCanvas3D.cpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GLCanvas3D.cpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/GLCanvas3D.cpp.orig	2023-07-25 09:31:07 UTC
+--- src/slic3r/GUI/GLCanvas3D.cpp.orig	2023-12-12 14:21:21 UTC
 +++ src/slic3r/GUI/GLCanvas3D.cpp
-@@ -97,7 +97,7 @@ float RetinaHelper::get_scale_factor() { return float(
+@@ -108,7 +108,7 @@ float RetinaHelper::get_scale_factor() { return float(
  #endif // __WXGTK3__
  
  // Fixed the collision between BuildVolume::Type::Convex and macro Convex defined inside /usr/include/X11/X.h that is included by WxWidgets 3.0.
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GLTexture.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GLTexture.cpp
index 6876f6022a4d..a1a487b06d0f 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GLTexture.cpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GLTexture.cpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/GLTexture.cpp.orig	2023-07-25 16:08:09 UTC
+--- src/slic3r/GUI/GLTexture.cpp.orig	2023-12-12 14:21:21 UTC
 +++ src/slic3r/GUI/GLTexture.cpp
-@@ -21,8 +21,8 @@
+@@ -25,8 +25,8 @@
  #define STB_DXT_IMPLEMENTATION
  #include "stb_dxt/stb_dxt.h"
  
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI.cpp
index ee6bdc4f0c1b..a96b1e1d5d24 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI.cpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI.cpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/GUI.cpp.orig	2023-07-21 15:02:36 UTC
+--- src/slic3r/GUI/GUI.cpp.orig	2024-02-29 13:03:32 UTC
 +++ src/slic3r/GUI/GUI.cpp
-@@ -481,7 +481,7 @@ void desktop_open_folder(const boost::filesystem::path
+@@ -492,7 +492,7 @@ void desktop_open_folder(const boost::filesystem::path
  	const wxString widepath = path.wstring();
  	const wchar_t* argv[] = { L"explorer", widepath.GetData(), nullptr };
  	::wxExecute(const_cast<wchar_t**>(argv), wxEXEC_ASYNC, nullptr);
@@ -9,7 +9,7 @@
  	const char* argv[] = { "open", path.string().c_str(), nullptr };
  	::wxExecute(const_cast<char**>(argv), wxEXEC_ASYNC, nullptr);
  #else
-@@ -490,7 +490,7 @@ void desktop_open_folder(const boost::filesystem::path
+@@ -501,7 +501,7 @@ void desktop_open_folder(const boost::filesystem::path
  #endif
  }
  
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI.hpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI.hpp
index 7a9e92e965a6..14508a97158c 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI.hpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI.hpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/GUI.hpp.orig	2023-07-21 13:10:36 UTC
+--- src/slic3r/GUI/GUI.hpp.orig	2024-02-29 13:03:32 UTC
 +++ src/slic3r/GUI/GUI.hpp
-@@ -84,7 +84,7 @@ void desktop_open_folder(const boost::filesystem::path
+@@ -88,7 +88,7 @@ void desktop_open_folder(const boost::filesystem::path
  // Ask the destop to open the directory specified by path using the default file explorer.
  void desktop_open_folder(const boost::filesystem::path& path);
  
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__App.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__App.cpp
index a992ee9136fa..90a6a54b262b 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__App.cpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__App.cpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/GUI_App.cpp.orig	2023-06-19 12:07:14 UTC
+--- src/slic3r/GUI/GUI_App.cpp.orig	2024-02-29 13:03:32 UTC
 +++ src/slic3r/GUI/GUI_App.cpp
-@@ -395,7 +395,7 @@ class SplashScreen : public wxSplashScreen (private)
+@@ -403,7 +403,7 @@ class SplashScreen : public wxSplashScreen (private)
  };
  
  
@@ -9,7 +9,7 @@
  bool static check_old_linux_datadir(const wxString& app_name) {
      // If we are on Linux and the datadir does not exist yet, look into the old
      // location where the datadir was before version 2.3. If we find it there,
-@@ -973,7 +973,7 @@ void GUI_App::init_app_config()
+@@ -937,7 +937,7 @@ void GUI_App::init_app_config()
  	// Mac : "~/Library/Application Support/Slic3r"
  
      if (data_dir().empty()) {
@@ -18,8 +18,8 @@
              set_data_dir(wxStandardPaths::Get().GetUserDataDir().ToUTF8().data());
          #else
              // Since version 2.3, config dir on Linux is in ${XDG_CONFIG_HOME}.
-@@ -1130,7 +1130,8 @@ bool GUI_App::on_init_inner()
- {
+@@ -1107,7 +1107,8 @@ bool GUI_App::on_init_inner()
+ 
      // Set initialization of image handlers before any UI actions - See GH issue #7469
      wxInitAllImageHandlers();
 -
@@ -28,7 +28,7 @@
  #if defined(_WIN32) && ! defined(_WIN64)
      // Win32 32bit build.
      if (wxPlatformInfo::Get().GetArchName().substr(0, 2) == "64") {
-@@ -1158,7 +1159,7 @@ bool GUI_App::on_init_inner()
+@@ -1135,7 +1136,7 @@ bool GUI_App::on_init_inner()
      wxCHECK_MSG(wxDirExists(resources_dir), false,
          wxString::Format("Resources path does not exist or is not a directory: %s", resources_dir));
  
@@ -37,7 +37,7 @@
      if (! check_old_linux_datadir(GetAppName())) {
          std::cerr << "Quitting, user chose to move their data to new location." << std::endl;
          return false;
-@@ -1263,7 +1264,7 @@ bool GUI_App::on_init_inner()
+@@ -1240,7 +1241,7 @@ bool GUI_App::on_init_inner()
          if (!default_splashscreen_pos)
              // revert "restore_win_position" value if application wasn't crashed
              get_app_config()->set("restore_win_position", "1");
@@ -46,7 +46,7 @@
          wxYield();
  #endif
          scrn->SetText(_L("Loading configuration")+ dots);
-@@ -1411,7 +1412,7 @@ bool GUI_App::on_init_inner()
+@@ -1393,7 +1394,7 @@ bool GUI_App::on_init_inner()
          // and wxEVT_SET_FOCUS before GUI_App::post_init is called) wasn't called before GUI_App::post_init and OpenGL wasn't initialized.
          // Since issue #9774 Where same problem occured on MacOS Ventura, we decided to have this check on MacOS as well.
  
@@ -55,7 +55,7 @@
          if (!m_post_initialized && m_opengl_initialized) {
  #else
          if (!m_post_initialized) {
-@@ -2054,7 +2055,7 @@ bool GUI_App::switch_language()
+@@ -2096,7 +2097,7 @@ bool GUI_App::switch_language()
      }
  }
  
@@ -64,7 +64,7 @@
  static const wxLanguageInfo* linux_get_existing_locale_language(const wxLanguageInfo* language,
                                                                  const wxLanguageInfo* system_language)
  {
-@@ -2253,7 +2254,7 @@ bool GUI_App::load_language(wxString language, bool in
+@@ -2298,7 +2299,7 @@ bool GUI_App::load_language(wxString language, bool in
  				m_language_info_best = wxLocale::FindLanguageInfo(best_language);
  	        	BOOST_LOG_TRIVIAL(trace) << boost::format("Best translation language detected (may be different from user locales): %1%") % m_language_info_best->CanonicalName.ToUTF8().data();
  			}
@@ -73,7 +73,7 @@
              wxString lc_all;
              if (wxGetEnv("LC_ALL", &lc_all) && ! lc_all.IsEmpty()) {
                  // Best language returned by wxWidgets on Linux apparently does not respect LC_ALL.
-@@ -2262,6 +2263,7 @@ bool GUI_App::load_language(wxString language, bool in
+@@ -2307,6 +2308,7 @@ bool GUI_App::load_language(wxString language, bool in
              }
              #endif
  		}
@@ -81,7 +81,7 @@
      }
  
  	const wxLanguageInfo *language_info = language.empty() ? nullptr : wxLocale::FindLanguageInfo(language);
-@@ -2306,7 +2308,7 @@ bool GUI_App::load_language(wxString language, bool in
+@@ -2351,7 +2353,7 @@ bool GUI_App::load_language(wxString language, bool in
      } else if (m_language_info_system != nullptr && language_info->CanonicalName.BeforeFirst('_') == m_language_info_system->CanonicalName.BeforeFirst('_'))
          language_info = m_language_info_system;
  
@@ -90,7 +90,7 @@
      // If we can't find this locale , try to use different one for the language
      // instead of just reporting that it is impossible to switch.
      if (! wxLocale::IsAvailable(language_info->Language)) {
-@@ -2426,7 +2428,7 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
+@@ -2471,7 +2473,7 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
          local_menu->Append(config_id_base + ConfigMenuTakeSnapshot, _L("Take Configuration &Snapshot"), _L("Capture a configuration snapshot"));
          local_menu->Append(config_id_base + ConfigMenuUpdateConf, _L("Check for Configuration Updates"), _L("Check for configuration updates"));
          local_menu->Append(config_id_base + ConfigMenuUpdateApp, _L("Check for Application Updates"), _L("Check for new version of application"));
@@ -99,7 +99,7 @@
          //if (DesktopIntegrationDialog::integration_possible())
          local_menu->Append(config_id_base + ConfigMenuDesktopIntegration, _L("Desktop Integration"), _L("Desktop Integration"));    
  #endif //(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION)        
-@@ -2473,7 +2475,7 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
+@@ -2519,7 +2521,7 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
          case ConfigMenuUpdateApp:
              app_version_check(true);
              break;
@@ -108,7 +108,7 @@
          case ConfigMenuDesktopIntegration:
              show_desktop_integration_dialog();
              break;
-@@ -3090,7 +3092,7 @@ void GUI_App::show_desktop_integration_dialog()
+@@ -3155,7 +3157,7 @@ void GUI_App::show_desktop_integration_dialog()
  
  void GUI_App::show_desktop_integration_dialog()
  {
@@ -117,7 +117,7 @@
      //wxCHECK_MSG(mainframe != nullptr, false, "Internal error: Main frame not created / null");
      DesktopIntegrationDialog dialog(mainframe);
      dialog.ShowModal();
-@@ -3110,7 +3112,7 @@ void GUI_App::show_downloader_registration_dialog()
+@@ -3175,7 +3177,7 @@ void GUI_App::show_downloader_registration_dialog()
      if (msg.ShowModal() == wxID_YES) {
          auto downloader_worker = new DownloaderUtils::Worker(nullptr);
          downloader_worker->perform_register(app_config->get("url_downloader_dest"));
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Factories.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Factories.cpp
index c6371bde8096..e01c2f0640e2 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Factories.cpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Factories.cpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/GUI_Factories.cpp.orig	2023-07-21 13:55:55 UTC
+--- src/slic3r/GUI/GUI_Factories.cpp.orig	2024-02-29 13:03:32 UTC
 +++ src/slic3r/GUI/GUI_Factories.cpp
-@@ -1345,7 +1345,7 @@ void MenuFactory::sys_color_changed(wxMenuBar* menubar
+@@ -1466,7 +1466,7 @@ void MenuFactory::sys_color_changed(wxMenuBar* menubar
      for (size_t id = 0; id < menubar->GetMenuCount(); id++) {
          wxMenu* menu = menubar->GetMenu(id);
          sys_color_changed_menu(menu);
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__ObjectLayers.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__ObjectLayers.cpp
index 61d8299138b1..3d3eb2c03a9e 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__ObjectLayers.cpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__ObjectLayers.cpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/GUI_ObjectLayers.cpp.orig	2023-07-25 10:52:56 UTC
+--- src/slic3r/GUI/GUI_ObjectLayers.cpp.orig	2023-12-12 14:21:21 UTC
 +++ src/slic3r/GUI/GUI_ObjectLayers.cpp
-@@ -344,7 +344,7 @@ LayerRangeEditor::LayerRangeEditor( ObjectLayers* pare
+@@ -348,7 +348,7 @@ LayerRangeEditor::LayerRangeEditor( ObjectLayers* pare
          m_enter_pressed     = true;
          // Workaround! Under Linux we have to use CallAfter() to avoid crash after pressing ENTER key
          // see #7531, #8055, #8408
@@ -9,7 +9,7 @@
          wxTheApp->CallAfter([this, edit_fn]() {
  #endif
              // If LayersList wasn't updated/recreated, we can call wxEVT_KILL_FOCUS.Skip()
-@@ -359,7 +359,7 @@ LayerRangeEditor::LayerRangeEditor( ObjectLayers* pare
+@@ -363,7 +363,7 @@ LayerRangeEditor::LayerRangeEditor( ObjectLayers* pare
                  SetValue(m_valid_value);
                  m_call_kill_focus = true;
              }
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__ObjectManipulation.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__ObjectManipulation.cpp
deleted file mode 100644
index 501f8d2b1b9a..000000000000
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__ObjectManipulation.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
---- src/slic3r/GUI/GUI_ObjectManipulation.cpp.orig	2023-07-21 13:50:11 UTC
-+++ src/slic3r/GUI/GUI_ObjectManipulation.cpp
-@@ -490,7 +490,8 @@ void ObjectManipulation::Show(const bool show)
-         const Selection& selection = wxGetApp().plater()->canvas3D()->get_selection();
-         bool show_world_local_combo = wxGetApp().get_mode() != comSimple && (selection.is_single_full_instance() || selection.is_single_volume_or_modifier());
-         if (selection.is_single_volume_or_modifier() && m_word_local_combo->GetCount() < 3) {
--#ifdef __linux__
-+
-+#if defined(__linux__) || defined (__FreeBSD__)
-             m_word_local_combo->Insert(coordinate_type_str(ECoordinatesType::Local), 2);
- #else
-             m_word_local_combo->Insert(coordinate_type_str(ECoordinatesType::Local), wxNullBitmap, 2);
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Preview.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Preview.cpp
index aebb25974d89..ccb810cac91d 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Preview.cpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Preview.cpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/GUI_Preview.cpp.orig	2023-07-25 10:57:11 UTC
+--- src/slic3r/GUI/GUI_Preview.cpp.orig	2023-12-12 14:21:21 UTC
 +++ src/slic3r/GUI/GUI_Preview.cpp
-@@ -292,7 +292,7 @@ void Preview::reload_print(bool keep_volumes)
+@@ -303,7 +303,7 @@ void Preview::load_print(bool keep_z_range)
  
  void Preview::reload_print(bool keep_volumes)
  {
@@ -9,7 +9,7 @@
      // We are getting mysterious crashes on Linux in gtk due to OpenGL context activation GH #1874 #1955.
      // So we are applying a workaround here: a delayed release of OpenGL vertex buffers.
      if (!IsShown())
-@@ -302,14 +302,14 @@ void Preview::reload_print(bool keep_volumes)
+@@ -313,14 +313,14 @@ void Preview::reload_print(bool keep_volumes)
      }
  #endif /* __linux__ */
      if (
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Preview.hpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Preview.hpp
index cb9a7e9087ae..b7b873574480 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Preview.hpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Preview.hpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/GUI_Preview.hpp.orig	2023-07-25 11:01:59 UTC
+--- src/slic3r/GUI/GUI_Preview.hpp.orig	2023-12-12 14:21:21 UTC
 +++ src/slic3r/GUI/GUI_Preview.hpp
-@@ -85,7 +85,7 @@ class Preview : public wxPanel
+@@ -89,7 +89,7 @@ class Preview : public wxPanel
      BackgroundSlicingProcess* m_process;
      GCodeProcessorResult* m_gcode_result;
  
diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Utils.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Utils.cpp
index 06b622d21b04..fce789370d3b 100644
--- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Utils.cpp
+++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__Utils.cpp
@@ -1,6 +1,6 @@
---- src/slic3r/GUI/GUI_Utils.cpp.orig	2023-07-25 11:03:21 UTC
+--- src/slic3r/GUI/GUI_Utils.cpp.orig	2023-12-12 14:21:21 UTC
 +++ src/slic3r/GUI/GUI_Utils.cpp
-@@ -48,7 +48,7 @@ void on_window_geometry(wxTopLevelWindow *tlw, std::fu
+@@ -53,7 +53,7 @@ void on_window_geometry(wxTopLevelWindow *tlw, std::fu
      // cf. https://groups.google.com/forum/#!topic/wx-users/c7ntMt6piRI
      // OTOH the geometry is available very soon, so we can call the callback right away
      callback();
@@ -9,7 +9,7 @@
      tlw->Bind(wxEVT_SHOW, [=](wxShowEvent &evt) {
          // On Linux, the geometry is only available after wxEVT_SHOW + CallAfter
          // cf. https://groups.google.com/forum/?pli=1#!topic/wx-users/fERSXdpVwAI
-@@ -116,7 +116,7 @@ int get_dpi_for_window(const wxWindow *window)
+@@ -121,7 +121,7 @@ int get_dpi_for_window(const wxWindow *window)
          if (hdc == NULL) { return DPI_DEFAULT; }
*** 768 LINES SKIPPED ***