File lazarus-4.0-qt6-app-close-sigsegv-fix.patch of Package lazarus
Index: lazarus/lcl/interfaces/qt6/qtint.pp
===================================================================
--- lazarus.orig/lcl/interfaces/qt6/qtint.pp
+++ lazarus/lcl/interfaces/qt6/qtint.pp
@@ -333,6 +333,7 @@ const
LCLQt_RegisterSystemTrayIcon = QEventType(Ord(QEventUser) + $1011);
// combobox OnCloseUp should be in order OnChange->OnSelect->OnCloseUp
LCLQt_ComboBoxCloseUp = QEventType(Ord(QEventUser) + $1012);
+ LCLQt_DestroyWidget = QEventType(Ord(QEventUser) + $1013);
QtTextSingleLine = $0100;
Index: lazarus/lcl/interfaces/qt6/qtobject.inc
===================================================================
--- lazarus.orig/lcl/interfaces/qt6/qtobject.inc
+++ lazarus/lcl/interfaces/qt6/qtobject.inc
@@ -816,6 +816,12 @@ begin
end;
end;
{$ENDIF}
+ LCLQt_DestroyWidget:
+ begin
+ QEvent_accept(Event);
+ Result := True;
+ QObject_destroy(Sender);
+ end;
QEventShortcutOverride: // issue #22827
begin
QKeyEvent_text(QKeyEventH(Event), @AKey);
Index: lazarus/lcl/interfaces/qt6/qtwidgets.pas
===================================================================
--- lazarus.orig/lcl/interfaces/qt6/qtwidgets.pas
+++ lazarus/lcl/interfaces/qt6/qtwidgets.pas
@@ -5998,10 +5998,14 @@ begin
end;
procedure TQtWidget.DestroyWidget;
+var
+ ALCLEvent: QLCLMessageEventH;
begin
if (Widget <> nil) and FOwnWidget then
begin
- QObject_deleteLater(Widget);
+ ALCLEvent := QLCLMessageEvent_create(LCLQt_DestroyWidget, 0,
+ 0, 0, 0);
+ QCoreApplication_postEvent(Widget, ALCLEvent, Ord(QtHighEventPriority));
end;
Widget := nil;
end;