From 4f863704e235e55ff1b7ce234bb72eadfb12c65a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D9=85=D9=87=D8=AF=D9=8A=20=D8=B4=D9=8A=D9=86=D9=88=D9=86?= =?UTF-8?q?=20=28Mehdi=20Chinoune=29?= Date: Tue, 28 May 2024 11:15:30 +0100 Subject: [PATCH] freecad: backport some fixes --- .../007-fix-import-pyside6.patch | 95 ++++ .../008-Addon-Manager-Qt6-fixes.patch | 83 ++++ .../011-fixups-with-qt6-enums.patch | 445 ++++++++++++++++++ mingw-w64-freecad/PKGBUILD | 27 +- 4 files changed, 645 insertions(+), 5 deletions(-) create mode 100644 mingw-w64-freecad/007-fix-import-pyside6.patch create mode 100644 mingw-w64-freecad/008-Addon-Manager-Qt6-fixes.patch create mode 100644 mingw-w64-freecad/011-fixups-with-qt6-enums.patch diff --git a/mingw-w64-freecad/007-fix-import-pyside6.patch b/mingw-w64-freecad/007-fix-import-pyside6.patch new file mode 100644 index 0000000000..6bd378f2b6 --- /dev/null +++ b/mingw-w64-freecad/007-fix-import-pyside6.patch @@ -0,0 +1,95 @@ +diff --git a/src/Mod/AddonManager/package_details.py b/src/Mod/AddonManager/package_details.py +index c9d1ae311a..9c0e040ea5 100644 +--- a/src/Mod/AddonManager/package_details.py ++++ b/src/Mod/AddonManager/package_details.py +@@ -26,7 +26,7 @@ + import os + from typing import Optional + +-from PySide import QtCore, QtGui, QtWidgets ++from PySide6 import QtCore, QtGui, QtWidgets + + import addonmanager_freecad_interface as fci + +@@ -51,14 +51,14 @@ translate = fci.translate + show_javascript_console_output = False + + try: +- from PySide import QtWebEngineWidgets ++ from PySide6 import QtWebEngineCore, QtWebEngineWidgets + + HAS_QTWEBENGINE = True + except ImportError: + fci.Console.PrintWarning( + translate( + "AddonsInstaller", +- "Addon Manager Warning: Could not import QtWebEngineWidgets -- README data will display as text-only", ++ "Addon Manager Warning: Could not import QtWebEngineCore -- README data will display as text-only", + ) + + "\n" + ) +@@ -715,14 +714,14 @@ class PackageDetails(QtWidgets.QWidget): + + if HAS_QTWEBENGINE: + +- class RestrictedWebPage(QtWebEngineWidgets.QWebEnginePage): ++ class RestrictedWebPage(QtWebEngineCore.QWebEnginePage): + """A class that follows links to FreeCAD wiki pages, but opens all other + clicked links in the system web browser""" + + def __init__(self, parent): + super().__init__(parent) + self.settings().setAttribute( +- QtWebEngineWidgets.QWebEngineSettings.ErrorPageEnabled, False ++ QtWebEngineCore.QWebEngineSettings.ErrorPageEnabled, False + ) + self.stored_url = None + +@@ -731,7 +730,7 @@ if HAS_QTWEBENGINE: + navigation requests to the FreeCAD Wiki (for translation purposes) -- + anything else will open in a new window. + """ +- if _type == QtWebEngineWidgets.QWebEnginePage.NavigationTypeLinkClicked: ++ if _type == QtWebEngineCore.QWebEnginePage.NavigationTypeLinkClicked: + # See if the link is to a FreeCAD Wiki page -- if so, follow it, + # otherwise ask the OS to open it + if ( +@@ -754,11 +753,11 @@ if HAS_QTWEBENGINE: + global show_javascript_console_output + if show_javascript_console_output: + tag = translate("AddonsInstaller", "Page JavaScript reported") +- if level == QtWebEngineWidgets.QWebEnginePage.InfoMessageLevel: ++ if level == QtWebEngineCore.QWebEnginePage.InfoMessageLevel: + fci.Console.PrintMessage(f"{tag} {lineNumber}: {message}\n") +- elif level == QtWebEngineWidgets.QWebEnginePage.WarningMessageLevel: ++ elif level == QtWebEngineCore.QWebEnginePage.WarningMessageLevel: + fci.Console.PrintWarning(f"{tag} {lineNumber}: {message}\n") +- elif level == QtWebEngineWidgets.QWebEnginePage.ErrorMessageLevel: ++ elif level == QtWebEngineCore.QWebEnginePage.ErrorMessageLevel: + fci.Console.PrintError(f"{tag} {lineNumber}: {message}\n") + + def _reload_stored_url(self): +diff --git a/src/Mod/AddonManager/AddonManager.py b/src/Mod/AddonManager/AddonManager.py +index cb8bb63d8a..7445173537 100644 +--- a/src/Mod/AddonManager/AddonManager.py ++++ b/src/Mod/AddonManager/AddonManager.py +@@ -427,15 +427,15 @@ class CommandAddonManager: + "You must restart FreeCAD for changes to take effect.", + ) + ) +- m.setIcon(m.Warning) +- m.setStandardButtons(m.Ok | m.Cancel) +- m.setDefaultButton(m.Cancel) ++ m.setIcon(m.Icon.Warning) ++ m.setStandardButtons(m.StandardButton.Ok | m.StandardButton.Cancel) ++ m.setDefaultButton(m.StandardButton.Cancel) + okBtn = m.button(QtWidgets.QMessageBox.StandardButton.Ok) + cancelBtn = m.button(QtWidgets.QMessageBox.StandardButton.Cancel) + okBtn.setText(translate("AddonsInstaller", "Restart now")) + cancelBtn.setText(translate("AddonsInstaller", "Restart later")) + ret = m.exec_() +- if ret == m.Ok: ++ if ret == m.StandardButton.Ok: + # restart FreeCAD after a delay to give time to this dialog to close + QtCore.QTimer.singleShot(1000, utils.restart_freecad) + diff --git a/mingw-w64-freecad/008-Addon-Manager-Qt6-fixes.patch b/mingw-w64-freecad/008-Addon-Manager-Qt6-fixes.patch new file mode 100644 index 0000000000..fb180755b8 --- /dev/null +++ b/mingw-w64-freecad/008-Addon-Manager-Qt6-fixes.patch @@ -0,0 +1,83 @@ +From 62c3836c97a56db24e3ef567a31eba2d0893b945 Mon Sep 17 00:00:00 2001 +From: Ladislav Michl +Date: Tue, 23 Jan 2024 12:46:32 +0100 +Subject: [PATCH] Addon Manager: Qt6 fixes + +--- + src/Mod/AddonManager/addonmanager_utilities.py | 4 ++-- + src/Mod/AddonManager/change_branch.py | 2 +- + src/Mod/AddonManager/package_details.py | 7 +++---- + src/Mod/AddonManager/package_list.py | 7 +++---- + 4 files changed, 9 insertions(+), 11 deletions(-) + +diff --git a/src/Mod/AddonManager/addonmanager_utilities.py b/src/Mod/AddonManager/addonmanager_utilities.py +index 9ceabc2e9add..183a2047b086 100644 +--- a/src/Mod/AddonManager/addonmanager_utilities.py ++++ b/src/Mod/AddonManager/addonmanager_utilities.py +@@ -36,7 +36,7 @@ + from urllib.parse import urlparse + + try: +- from PySide import QtCore, QtWidgets ++ from PySide import QtCore, QtGui, QtWidgets + except ImportError: + QtCore = None + QtWidgets = None +@@ -245,7 +245,7 @@ def get_readme_html_url(repo): + def is_darkmode() -> bool: + """Heuristics to determine if we are in a darkmode stylesheet""" + pl = fci.FreeCADGui.getMainWindow().palette() +- return pl.color(pl.Background).lightness() < 128 ++ return pl.color(QtGui.QPalette.Window).lightness() < 128 + + + def warning_color_string() -> str: +diff --git a/src/Mod/AddonManager/change_branch.py b/src/Mod/AddonManager/change_branch.py +index 332795a22afc..ebe1819bc755 100644 +--- a/src/Mod/AddonManager/change_branch.py ++++ b/src/Mod/AddonManager/change_branch.py +@@ -216,7 +216,7 @@ def data(self, index: QtCore.QModelIndex, role: int = QtCore.Qt.DisplayRole): + dd = self.display_data[row] + if column == 3 or column == 4: + if dd[column] is not None: +- qdate = QtCore.QDateTime.fromTime_t(dd[column]) ++ qdate = QtCore.QDateTime.fromSecsSinceEpoch(dd[column]) + return QtCore.QLocale().toString(qdate, QtCore.QLocale.ShortFormat) + elif column < len(dd): + return dd[column] +diff --git a/src/Mod/AddonManager/package_details.py b/src/Mod/AddonManager/package_details.py +index 93dfb8bee962..8310b5e90343 100644 +--- a/src/Mod/AddonManager/package_details.py ++++ b/src/Mod/AddonManager/package_details.py +@@ -133,10 +133,9 @@ def display_repo_status(self, status): + date = "" + installed_version_string = "

" + if repo.updated_timestamp: +- date = ( +- QtCore.QDateTime.fromTime_t(repo.updated_timestamp) +- .date() +- .toString(QtCore.Qt.SystemLocaleShortDate) ++ date = QtCore.QLocale().toString( ++ QtCore.QDateTime.fromSecsSinceEpoch(int(round(repo.updated_timestamp, 0))), ++ QtCore.QLocale.ShortFormat, + ) + if version and date: + installed_version_string += ( +diff --git a/src/Mod/AddonManager/package_list.py b/src/Mod/AddonManager/package_list.py +index a9dd3dc59856..d26b4f5489c3 100644 +--- a/src/Mod/AddonManager/package_list.py ++++ b/src/Mod/AddonManager/package_list.py +@@ -465,10 +465,9 @@ def get_expanded_update_string(repo: Addon) -> str: + installed_date_string = ( + "
" + translate("AddonsInstaller", "Installed on") + ": " + ) +- installed_date_string += ( +- QtCore.QDateTime.fromTime_t(repo.updated_timestamp) +- .date() +- .toString(QtCore.Qt.SystemLocaleShortDate) ++ installed_date_string += QtCore.QLocale().toString( ++ QtCore.QDateTime.fromSecsSinceEpoch(int(round(repo.updated_timestamp, 0))), ++ QtCore.QLocale.ShortFormat, + ) + + available_version_string = "" diff --git a/mingw-w64-freecad/011-fixups-with-qt6-enums.patch b/mingw-w64-freecad/011-fixups-with-qt6-enums.patch new file mode 100644 index 0000000000..dcd22a8c6e --- /dev/null +++ b/mingw-w64-freecad/011-fixups-with-qt6-enums.patch @@ -0,0 +1,445 @@ +diff --git a/src/Gui/PythonWrapper.cpp b/src/Gui/PythonWrapper.cpp +index 79bc20d47..0452966f7 100644 +--- a/src/Gui/PythonWrapper.cpp ++++ b/src/Gui/PythonWrapper.cpp +@@ -550,6 +550,36 @@ QObject* PythonWrapper::toQObject(const Py::Object& pyobject) + return nullptr; + } + ++qsizetype PythonWrapper::toEnum(PyObject* pyPtr) ++{ ++#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE) ++ return Shiboken::Enum::getValue(pyPtr); ++#else ++ return toEnum(Py::Object(pyPtr)); ++#endif ++} ++ ++qsizetype PythonWrapper::toEnum(const Py::Object& pyobject) ++{ ++#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE) ++ return toEnum(pyobject.ptr()); ++#else ++ try { ++ Py::Int ret; ++ if (pyobject.hasAttr(std::string("value"))) { ++ ret = pyobject.getAttr(std::string("value")); ++ } else { ++ ret = Py::Int(pyobject); ++ } ++ return (qsizetype)ret; ++ } ++ catch (Py::Exception&) { ++ Base::PyException e; // extract the Python error text ++ e.ReportException(); ++ } ++#endif ++} ++ + QGraphicsItem* PythonWrapper::toQGraphicsItem(PyObject* pyPtr) + { + #if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE) +diff --git a/src/Gui/PythonWrapper.h b/src/Gui/PythonWrapper.h +index c31f30e47..eada6607f 100644 +--- a/src/Gui/PythonWrapper.h ++++ b/src/Gui/PythonWrapper.h +@@ -52,6 +52,8 @@ public: + + bool toCString(const Py::Object&, std::string&); + QObject* toQObject(const Py::Object&); ++ qsizetype toEnum(PyObject* pyPtr); ++ qsizetype toEnum(const Py::Object& pyobject); + QGraphicsItem* toQGraphicsItem(PyObject* ptr); + QGraphicsItem* toQGraphicsItem(const Py::Object& pyObject); + QGraphicsObject* toQGraphicsObject(PyObject* pyPtr); +diff --git a/src/Gui/TaskView/TaskDialogPython.cpp b/src/Gui/TaskView/TaskDialogPython.cpp +index 795b7cf43..52476f7d8 100644 +--- a/src/Gui/TaskView/TaskDialogPython.cpp ++++ b/src/Gui/TaskView/TaskDialogPython.cpp +@@ -740,9 +740,10 @@ QDialogButtonBox::StandardButtons TaskDialogPython::getStandardButtons() const + if (dlg.hasAttr(std::string("getStandardButtons"))) { + Py::Callable method(dlg.getAttr(std::string("getStandardButtons"))); + Py::Tuple args; +- Py::Int ret(method.apply(args)); +- int value = (int)ret; +- return QDialogButtonBox::StandardButtons(value); ++ Gui::PythonWrapper wrap; ++ wrap.loadWidgetsModule(); ++ qsizetype value(wrap.toEnum(method.apply(args))); ++ return QDialogButtonBox::StandardButtons((int)value); + } + } + catch (Py::Exception&) { +diff --git a/src/Mod/Arch/ArchAxis.py b/src/Mod/Arch/ArchAxis.py +index ecda27a76..406f094f5 100644 +--- a/src/Mod/Arch/ArchAxis.py ++++ b/src/Mod/Arch/ArchAxis.py +@@ -723,7 +723,7 @@ class _AxisTaskPanel: + + def getStandardButtons(self): + +- return int(QtGui.QDialogButtonBox.Close) ++ return QtGui.QDialogButtonBox.Close + + def update(self): + +diff --git a/src/Mod/Arch/ArchAxisSystem.py b/src/Mod/Arch/ArchAxisSystem.py +index a896a98a5..241dcf36b 100644 +--- a/src/Mod/Arch/ArchAxisSystem.py ++++ b/src/Mod/Arch/ArchAxisSystem.py +@@ -313,7 +313,7 @@ class AxisSystemTaskPanel: + + def getStandardButtons(self): + +- return int(QtGui.QDialogButtonBox.Ok) ++ return QtGui.QDialogButtonBox.Ok + + def getIcon(self,obj): + +diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py +index 114ab6034..143641784 100644 +--- a/src/Mod/Arch/ArchCommands.py ++++ b/src/Mod/Arch/ArchCommands.py +@@ -1023,7 +1023,7 @@ class SurveyTaskPanel: + return True + + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Close) ++ return QtGui.QDialogButtonBox.Close + + def reject(self): + if hasattr(FreeCAD,"SurveyObserver"): +diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py +index 36bb3a4d3..3e33b5a45 100644 +--- a/src/Mod/Arch/ArchComponent.py ++++ b/src/Mod/Arch/ArchComponent.py +@@ -1660,7 +1660,7 @@ class SelectionTaskPanel: + + def getStandardButtons(self): + """Adds the cancel button.""" +- return int(QtGui.QDialogButtonBox.Cancel) ++ return QtGui.QDialogButtonBox.Cancel + + def reject(self): + """The method run when the user selects the cancel button.""" +@@ -1766,7 +1766,7 @@ class ComponentTaskPanel: + def getStandardButtons(self): + """Add the standard ok button.""" + +- return int(QtGui.QDialogButtonBox.Ok) ++ return QtGui.QDialogButtonBox.Ok + + def check(self,wid,col): + """This method is run as the callback when the user selects an item in the tree. +diff --git a/src/Mod/Arch/ArchCutPlane.py b/src/Mod/Arch/ArchCutPlane.py +index 3aa5e1ce0..ba103f38d 100644 +--- a/src/Mod/Arch/ArchCutPlane.py ++++ b/src/Mod/Arch/ArchCutPlane.py +@@ -168,7 +168,7 @@ class _CutPlaneTaskPanel: + return True + + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Ok|QtGui.QDialogButtonBox.Cancel) ++ return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel + + def previewCutVolume(self, i): + cutVolume = ArchCommands.getCutVolume(self.plan,FreeCADGui.Selection.getSelectionEx()[0].Object.Shape) +diff --git a/src/Mod/Arch/ArchRoof.py b/src/Mod/Arch/ArchRoof.py +index 74ec30b5b..f9333d81a 100644 +--- a/src/Mod/Arch/ArchRoof.py ++++ b/src/Mod/Arch/ArchRoof.py +@@ -949,7 +949,7 @@ class _RoofTaskPanel: + return True + + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Close) ++ return QtGui.QDialogButtonBox.Close + + def update(self): + '''fills the treewidget''' +diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py +index 8e6177dfc..bede32334 100644 +--- a/src/Mod/Arch/ArchSectionPlane.py ++++ b/src/Mod/Arch/ArchSectionPlane.py +@@ -1265,7 +1265,7 @@ class SectionPlaneTaskPanel: + return True + + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Ok) ++ return QtGui.QDialogButtonBox.Ok + + def getIcon(self,obj): + if hasattr(obj.ViewObject,"Proxy"): +diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py +index c3cc10c60..b5e72ee2e 100644 +--- a/src/Mod/Arch/ArchWindow.py ++++ b/src/Mod/Arch/ArchWindow.py +@@ -1496,7 +1496,7 @@ class _ArchWindowTaskPanel: + + def getStandardButtons(self): + +- return int(QtGui.QDialogButtonBox.Close) ++ return QtGui.QDialogButtonBox.Close + + def check(self,wid,col): + +diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py +index b19101e9c..3bba18795 100644 +--- a/src/Mod/Draft/DraftGui.py ++++ b/src/Mod/Draft/DraftGui.py +@@ -217,7 +217,7 @@ class DraftTaskPanel: + else: + self.form = widget + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Close) ++ return QtGui.QDialogButtonBox.Close + def accept(self): + if hasattr(FreeCADGui,"draftToolBar"): + return FreeCADGui.draftToolBar.validatePoint() +@@ -1031,7 +1031,7 @@ class DraftToolBar: + self.form = [extra] + self.callback = callback + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Close) ++ return QtGui.QDialogButtonBox.Close + def reject(self): + if self.callback: + self.callback() +@@ -1766,7 +1766,7 @@ class FacebinderTaskPanel: + return True + + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Ok) ++ return QtGui.QDialogButtonBox.Ok + + def update(self): + """fills the treewidget""" +diff --git a/src/Mod/Draft/drafttaskpanels/task_selectplane.py b/src/Mod/Draft/drafttaskpanels/task_selectplane.py +index 7eba90f0e..a8ba3139d 100644 +--- a/src/Mod/Draft/drafttaskpanels/task_selectplane.py ++++ b/src/Mod/Draft/drafttaskpanels/task_selectplane.py +@@ -40,6 +40,7 @@ to be more similar to OrthoArray and the new tools. + ## \addtogroup drafttaskpanels + # @{ + import FreeCADGui as Gui ++from PySide import QtWidgets + + + class SelectPlaneTaskPanel: +@@ -50,6 +51,6 @@ class SelectPlaneTaskPanel: + + def getStandardButtons(self): + """Execute to set the standard buttons.""" +- return 2097152 # int(QtGui.QDialogButtonBox.Close) ++ return QtGui.QDialogButtonBox.Close + + ## @} +diff --git a/src/Mod/Fem/femsolver/solver_taskpanel.py b/src/Mod/Fem/femsolver/solver_taskpanel.py +index 90c622ad7..5d3817bef 100644 +--- a/src/Mod/Fem/femsolver/solver_taskpanel.py ++++ b/src/Mod/Fem/femsolver/solver_taskpanel.py +@@ -156,7 +156,7 @@ class ControlTaskPanel(QtCore.QObject): + femsolver.report.display(machine.report, _REPORT_TITLE, text) + + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Close) ++ return QtGui.QDialogButtonBox.Close + + def reject(self): + Gui.ActiveDocument.resetEdit() +diff --git a/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py b/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py +index 2aa2fbf24..770620c08 100644 +--- a/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py ++++ b/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py +@@ -106,9 +106,7 @@ class _TaskPanel: + self.update() + + def getStandardButtons(self): +- button_value = int( +- QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel +- ) ++ button_value = QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel + return button_value + # show a OK, a apply and a Cancel button + # def reject() is called on Cancel button +diff --git a/src/Mod/Fem/femtaskpanels/task_result_mechanical.py b/src/Mod/Fem/femtaskpanels/task_result_mechanical.py +index 266670a54..f0ec4e9d7 100644 +--- a/src/Mod/Fem/femtaskpanels/task_result_mechanical.py ++++ b/src/Mod/Fem/femtaskpanels/task_result_mechanical.py +@@ -265,7 +265,7 @@ class _TaskPanel: + self.result_widget.sb_displacement_factor_max.setValue(100.) # init non standard values + + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Close) ++ return QtGui.QDialogButtonBox.Close + + def get_result_stats(self, type_name): + return resulttools.get_stats(self.result_obj, type_name) +diff --git a/src/Mod/Fem/femtaskpanels/task_solver_ccxtools.py b/src/Mod/Fem/femtaskpanels/task_solver_ccxtools.py +index fd4607f94..a39eb47d7 100644 +--- a/src/Mod/Fem/femtaskpanels/task_solver_ccxtools.py ++++ b/src/Mod/Fem/femtaskpanels/task_solver_ccxtools.py +@@ -159,7 +159,7 @@ class _TaskPanel: + def getStandardButtons(self): + # only show a close button + # def accept() in no longer needed, since there is no OK button +- return int(QtGui.QDialogButtonBox.Close) ++ return QtGui.QDialogButtonBox.Close + + def reject(self): + FreeCADGui.ActiveDocument.resetEdit() +diff --git a/src/Mod/OpenSCAD/OpenSCADCommands.py b/src/Mod/OpenSCAD/OpenSCADCommands.py +index 3ee3737b5..10b45d5f0 100644 +--- a/src/Mod/OpenSCAD/OpenSCADCommands.py ++++ b/src/Mod/OpenSCAD/OpenSCADCommands.py +@@ -379,7 +379,7 @@ class AddSCADTask: + self.form.buttonrefresh.clicked.connect(self.refreshelement) + + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Close) ++ return QtGui.QDialogButtonBox.Close + + def isAllowedAlterSelection(self): + return True +@@ -492,7 +492,7 @@ class OpenSCADMeshBooleanTask: + self.form.buttonadd.clicked.connect(self.doboolean) + + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Close) ++ return QtGui.QDialogButtonBox.Close + + def isAllowedAlterSelection(self): + return False +diff --git a/src/Mod/Part/AttachmentEditor/TaskAttachmentEditor.py b/src/Mod/Part/AttachmentEditor/TaskAttachmentEditor.py +index bf79827a2..fb3607797 100644 +--- a/src/Mod/Part/AttachmentEditor/TaskAttachmentEditor.py ++++ b/src/Mod/Part/AttachmentEditor/TaskAttachmentEditor.py +@@ -306,7 +306,7 @@ class AttachmentEditorTaskPanel(FrozenClass): + + # task dialog handling + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Ok) | int(QtGui.QDialogButtonBox.Cancel)| int(QtGui.QDialogButtonBox.Apply) ++ return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Apply + + def clicked(self,button): + if button == QtGui.QDialogButtonBox.Apply: +diff --git a/src/Mod/PartDesign/InvoluteGearFeature.py b/src/Mod/PartDesign/InvoluteGearFeature.py +index bd91d495b..bca795851 100644 +--- a/src/Mod/PartDesign/InvoluteGearFeature.py ++++ b/src/Mod/PartDesign/InvoluteGearFeature.py +@@ -258,7 +258,7 @@ class _InvoluteGearTaskPanel: + self.form.doubleSpinBox_ProfileShift.setValue(self.obj.ProfileShiftCoefficient) + + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Ok) | int(QtGui.QDialogButtonBox.Cancel)| int(QtGui.QDialogButtonBox.Apply) ++ return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Apply + + def clicked(self,button): + if button == QtGui.QDialogButtonBox.Apply: +diff --git a/src/Mod/PartDesign/SprocketFeature.py b/src/Mod/PartDesign/SprocketFeature.py +index c63cbe0fe..53270b093 100644 +--- a/src/Mod/PartDesign/SprocketFeature.py ++++ b/src/Mod/PartDesign/SprocketFeature.py +@@ -253,7 +253,7 @@ class SprocketTaskPanel: + self.obj.Proxy.execute(self.obj) + + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Ok) | int(QtGui.QDialogButtonBox.Cancel)| int(QtGui.QDialogButtonBox.Apply) ++ return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Apply + + def clicked(self,button): + if button == QtGui.QDialogButtonBox.Apply: +diff --git a/src/Mod/PartDesign/WizardShaft/WizardShaft.py b/src/Mod/PartDesign/WizardShaft/WizardShaft.py +index 850da098c..096468d1e 100644 +--- a/src/Mod/PartDesign/WizardShaft/WizardShaft.py ++++ b/src/Mod/PartDesign/WizardShaft/WizardShaft.py +@@ -155,7 +155,7 @@ class TaskWizardShaft: + self.updateButton(row, col, flag) + + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Ok) ++ return QtGui.QDialogButtonBox.Ok + + def accept(self): + if self.table: +diff --git a/src/Mod/Path/Path/Dressup/Gui/Boundary.py b/src/Mod/Path/Path/Dressup/Gui/Boundary.py +index e27c0169e..9064a3de1 100644 +--- a/src/Mod/Path/Path/Dressup/Gui/Boundary.py ++++ b/src/Mod/Path/Path/Dressup/Gui/Boundary.py +@@ -59,11 +59,7 @@ class TaskPanel(object): + self.stockEdit = None + + def getStandardButtons(self): +- return int( +- QtGui.QDialogButtonBox.Ok +- | QtGui.QDialogButtonBox.Apply +- | QtGui.QDialogButtonBox.Cancel +- ) ++ return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel + + def modifyStandardButtons(self, buttonBox): + self.buttonBox = buttonBox +diff --git a/src/Mod/Path/Path/Dressup/Gui/Tags.py b/src/Mod/Path/Path/Dressup/Gui/Tags.py +index b0c4d2aff..6b3a62a82 100644 +--- a/src/Mod/Path/Path/Dressup/Gui/Tags.py ++++ b/src/Mod/Path/Path/Dressup/Gui/Tags.py +@@ -75,11 +75,7 @@ class PathDressupTagTaskPanel: + self.editItem = None + + def getStandardButtons(self): +- return int( +- QtGui.QDialogButtonBox.Ok +- | QtGui.QDialogButtonBox.Apply +- | QtGui.QDialogButtonBox.Cancel +- ) ++ return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel + + def clicked(self, button): + if button == QtGui.QDialogButtonBox.Apply: +diff --git a/src/Mod/Path/Path/Op/Gui/Base.py b/src/Mod/Path/Path/Op/Gui/Base.py +index 0de7699b4..3faec0533 100644 +--- a/src/Mod/Path/Path/Op/Gui/Base.py ++++ b/src/Mod/Path/Path/Op/Gui/Base.py +@@ -1274,11 +1274,7 @@ class TaskPanel(object): + + def getStandardButtons(self): + """getStandardButtons() ... returns the Buttons for the task panel.""" +- return int( +- QtGui.QDialogButtonBox.Ok +- | QtGui.QDialogButtonBox.Apply +- | QtGui.QDialogButtonBox.Cancel +- ) ++ return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel + + def setupUi(self): + """setupUi() ... internal function to initialise all pages.""" +diff --git a/src/Mod/Path/PathPythonGui/simple_edit_panel.py b/src/Mod/Path/PathPythonGui/simple_edit_panel.py +index 0de9345bf..75d635f75 100644 +--- a/src/Mod/Path/PathPythonGui/simple_edit_panel.py ++++ b/src/Mod/Path/PathPythonGui/simple_edit_panel.py +@@ -88,11 +88,7 @@ class SimpleEditPanel: + ) + + def getStandardButtons(self): +- return int( +- QtGui.QDialogButtonBox.Ok +- | QtGui.QDialogButtonBox.Apply +- | QtGui.QDialogButtonBox.Cancel +- ) ++ return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel + + def clicked(self, button): + # callback for standard buttons +diff --git a/src/Mod/TemplatePyMod/TaskPanel.py b/src/Mod/TemplatePyMod/TaskPanel.py +index ef07e9b24..cc8e301aa 100644 +--- a/src/Mod/TemplatePyMod/TaskPanel.py ++++ b/src/Mod/TemplatePyMod/TaskPanel.py +@@ -61,7 +61,7 @@ class TaskPanel: + return True + + def getStandardButtons(self): +- return int(QtGui.QDialogButtonBox.Ok) ++ return QtGui.QDialogButtonBox.Ok + + def helpRequested(self): + pass diff --git a/mingw-w64-freecad/PKGBUILD b/mingw-w64-freecad/PKGBUILD index a0006e4323..fb761b3f82 100644 --- a/mingw-w64-freecad/PKGBUILD +++ b/mingw-w64-freecad/PKGBUILD @@ -4,7 +4,7 @@ _realname=freecad pkgbase=mingw-w64-${_realname} pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}") pkgver=0.21.2 -pkgrel=5 +pkgrel=6 pkgdesc="Free and Opensource multiplatform 3D parametric modeler (mingw-w64)" arch=('any') mingw_arch=('ucrt64' 'clang64' 'clangarm64') @@ -20,7 +20,7 @@ depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs" "${MINGW_PACKAGE_PREFIX}-fmt" "${MINGW_PACKAGE_PREFIX}-freetype" "${MINGW_PACKAGE_PREFIX}-med" - "${MINGW_PACKAGE_PREFIX}-openmp" + "${MINGW_PACKAGE_PREFIX}-omp" "${MINGW_PACKAGE_PREFIX}-opencascade" "${MINGW_PACKAGE_PREFIX}-openscad" "${MINGW_PACKAGE_PREFIX}-python" @@ -49,14 +49,26 @@ source=("https://github.com/FreeCAD/FreeCAD/archive/${pkgver}/${_realname}-${pkg "004-Fix-smesh-does-not-compile-with-boost-1.85.patch::https://github.com/FreeCAD/FreeCAD/commit/f555a25f.patch" "005-fix-c++-20-deprecate-copy_option.patch::https://github.com/FreeCAD/FreeCAD/commit/aa54ba73.patch" # https://github.com/FreeCAD/FreeCAD/commit/0100a998 - "006-Gui-TypeInitStruct-for-Shiboken6-builds.patch") + "006-Gui-TypeInitStruct-for-Shiboken6-builds.patch" + "007-fix-import-pyside6.patch" + # https://github.com/FreeCAD/FreeCAD/commit/62c3836c + "008-Addon-Manager-Qt6-fixes.patch" + "009-fix-import-pyside6-2.patch::https://github.com/FreeCAD/FreeCAD/commit/ac9a88c2.patch" + "010-Fix-NaviCube-for-Qt6.patch::https://github.com/FreeCAD/FreeCAD/commit/ccaee189.patch" + "011-fixups-with-qt6-enums.patch" +) sha256sums=('ceaf77cd12e8ad533d1535cc27ae4ca2a6e80778502dc9cdec906415d674b674' 'f452aca0557806f61ffb767e0c296305b9271788a76f675bf254aa7d464ea325' '194db658ae660d7e10385a4ef9521b2dc6b4264b8b0aedca33eb955fdfda5890' 'dbd2cd683d0c6ce8c633ce406231e77baf4e6f27898cee55cc11d61178c16dd1' '7d79a7ae9420c317766c1a57db475fb5daaa8ba2345fbb398e5857e26c28d4ee' 'e38bb73741039e5505c6784b7f468ae497a3e7095b18f96c8d4fb68e3f8d5224' - '15650328a24cb60600d1aa2a9e772f14f28bd0909927a202e21de7d12c2036c3') + '15650328a24cb60600d1aa2a9e772f14f28bd0909927a202e21de7d12c2036c3' + '6bc21acb796a0b87e13925e9f745e62ca182a15cdddca17e671bed48f561d383' + 'cdbb8ca67af1951c2976e60a2311e2b9e58cb1e0ae69df59ceb0420145502f03' + '4d30deb3a1de642d170fb97ff348727e35b74128121b0ac90ea7c9e5f173ba14' + '3594834a08b6712d29c0d44a4bfafb05d561ce93283832c31324b917d17bf8dd' + 'abe1839bfcde379fc01bad43958ad941d552b3c897dccabc3fae821f7287ea1d') apply_patch_with_msg() { for _patch in "$@" @@ -73,7 +85,12 @@ prepare() { 002-fix-building-against-vtk9.3.patch \ 004-Fix-smesh-does-not-compile-with-boost-1.85.patch \ 005-fix-c++-20-deprecate-copy_option.patch \ - 006-Gui-TypeInitStruct-for-Shiboken6-builds.patch + 006-Gui-TypeInitStruct-for-Shiboken6-builds.patch \ + 007-fix-import-pyside6.patch \ + 008-Addon-Manager-Qt6-fixes.patch \ + 009-fix-import-pyside6-2.patch \ + 010-Fix-NaviCube-for-Qt6.patch + # https://github.com/FreeCAD/FreeCAD/pull/11560 apply_patch_with_msg \ 003-fix-building-with-gcc.patch