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;
openSUSE Build Service is sponsored by