vcl/inc/qt5/QtInstanceDialog.hxx |    2 +-
 vcl/qt5/QtInstanceDialog.cxx     |   13 +++++++++----
 2 files changed, 10 insertions(+), 5 deletions(-)

New commits:
commit 4b547f11ae3e943e67c195a67a033307ce7f1d6d
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Tue Dec 24 13:12:18 2024 +0100
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Wed Dec 25 10:09:25 2024 +0100

    tdf#130857 qt weld: Defer QDialog deletion
    
    Instead of deleting the QDialog owned by the
    QtInstanceDialog in the QtInstanceDialog dtor
    right away by calling std::unique_ptr<QDialog>::reset,
    instead mark the object for deletion by calling
    QObject::deleteLater [1] on the dialog object, which schedules
    the object for deletion when control returns to the event
    loop.
    
    Also switch QtInstanceDialog::m_pDialog from a unique_ptr
    to a plain QDialog*.
    
    This fixes crashes seen with the current qtbase git dev branch
    after qtbase commit
    
        commit 84a5f50c7766c99f62b22bb4388137e0aa8dd13d
        Author: Shawn Rutledge <shawn.rutle...@qt.io>
        Date:   Tue Nov 12 10:04:31 2024 +0100
    
            Move QContextMenuEvent synthesis from QWidgetWindow to QWindow
    
    The crash was quite reproducible for me by running LO with the qt6 VCL
    plugin and SAL_VCL_QT_USE_WELDED_WIDGETS=1 (to enable use of
    native Qt widgets), opening the "Help" -> "About LibreOfficeDev"
    dialog and closing it by clicking the "Close" button with the
    left mouse button.
    
    Backtrace of the crash:
    
        (rr) bt
        #0  0x0000000000000000 in ??? ()
        #1  0x000019667a96b92f in QWidgetWindow::handleMouseEvent 
(this=0x5648961bd080, event=0x7ffe9cb16b98) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:675
        #2  0x000019667a96a145 in QWidgetWindow::event (this=0x5648961bd080, 
event=0x7ffe9cb16b98) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:292
        #3  0x000019667a86fe10 in QApplicationPrivate::notify_helper 
(this=0x56488e07aae0, receiver=0x5648961bd080, e=0x7ffe9cb16b98) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3304
        #4  0x000019667a873d2d in QApplication::notify (this=0x56488e067420, 
receiver=0x5648961bd080, e=0x7ffe9cb16b98) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3254
        #5  0x00006f736e25acc9 in QCoreApplication::notifyInternal2 
(receiver=0x5648961bd080, event=0x7ffe9cb16b98) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1122
        #6  0x00006f736e25bb39 in QCoreApplication::sendSpontaneousEvent 
(receiver=0x5648961bd080, event=0x7ffe9cb16b98) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1578
        #7  0x0000555757871f72 in QGuiApplicationPrivate::processMouseEvent 
(e=0x5f6d64003360) at 
/home/michi/development/git/qt5/qtbase/src/gui/kernel/qguiapplication.cpp:2485
        #8  0x0000555757871136 in 
QGuiApplicationPrivate::processWindowSystemEvent (e=0x5f6d64003360) at 
/home/michi/development/git/qt5/qtbase/src/gui/kernel/qguiapplication.cpp:2212
        #9  0x0000555757958a4d in 
QWindowSystemInterface::sendWindowSystemEvents (flags=...) at 
/home/michi/development/git/qt5/qtbase/src/gui/kernel/qwindowsysteminterface.cpp:1113
        #10 0x00005557579588fe in 
QWindowSystemInterface::flushWindowSystemEvents (flags=...) at 
/home/michi/development/git/qt5/qtbase/src/gui/kernel/qwindowsysteminterface.cpp:1082
        #11 0x0000393946e55875 in 
QtWaylandClient::QWaylandDisplay::flushRequests (this=0x56488e0ca590) at 
/home/michi/development/git/qt5/qtwayland/src/client/qwaylanddisplay.cpp:524
        #12 0x0000393946e5a946 in 
QtWaylandClient::QWaylandDisplay::qt_static_metacall (_o=0x56488e0ca590, 
_c=QMetaObject::InvokeMetaMethod, _id=4, _a=0x7ffe9cb172a0)
            at 
qtwayland/src/client/WaylandClient_autogen/include/moc_qwaylanddisplay_p.cpp:95
        #13 0x00006f736e331954 in doActivate<false> (sender=0x56488e06c0e0, 
signal_index=4, argv=0x7ffe9cb172a0) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4151
        #14 0x00006f736e3273e3 in QMetaObject::activate (sender=0x56488e06c0e0, 
m=0x6f736ec1ec68 <QAbstractEventDispatcher::staticMetaObject>, 
local_signal_index=1, argv=0x0)
            at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4199
        #15 0x00006f736e243c79 in QAbstractEventDispatcher::awake 
(this=0x56488e06c0e0) at 
qtbase/src/corelib/Core_autogen/include/moc_qabstracteventdispatcher.cpp:129
        #16 0x00006f736e84d1e8 in QEventDispatcherGlib::processEvents 
(this=0x56488e06c0e0, flags=...) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:406
        #17 0x0000555758154088 in QPAEventDispatcherGlib::processEvents 
(this=0x56488e06c0e0, flags=...) at 
/home/michi/development/git/qt5/qtbase/src/gui/platform/unix/qeventdispatcher_glib.cpp:89
        #18 0x00006a0d3b6d9b82 in QtInstance::ImplYield (this=0x56488e111bf0, 
bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:464
        #19 0x00006a0d3b6dcc01 in QtInstance::DoYield (this=0x56488e111bf0, 
bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:475
        #20 0x00005abe4e4b26e6 in ImplYield (i_bWait=true, i_bAllEvents=false) 
at vcl/source/app/svapp.cxx:385
        #21 0x00005abe4e4b207f in Application::Yield () at 
vcl/source/app/svapp.cxx:473
        #22 0x00005abe4e4b1e60 in Application::Execute () at 
vcl/source/app/svapp.cxx:360
        #23 0x00004759668eccab in desktop::Desktop::Main (this=0x7ffe9cb18ec8) 
at desktop/source/app/app.cxx:1679
        #24 0x00005abe4e4d3bc6 in ImplSVMain () at vcl/source/app/svmain.cxx:230
        #25 0x00005abe4e4d57b9 in SVMain () at vcl/source/app/svmain.cxx:248
        #26 0x00004759669665da in soffice_main () at 
desktop/source/app/sofficemain.cxx:121
        #27 0x000056486abf0a6d in sal_main () at 
/home/michi/development/git/libreoffice/desktop/source/app/main.c:51
        #28 0x000056486abf0a47 in main (argc=1, argv=0x7ffe9cb190d8) at 
/home/michi/development/git/libreoffice/desktop/source/app/main.c:49
    
    The segfault happens when calling
    
        d->maybeSynthesizeContextMenuEvent(event);
    
    , i.e the virtual QWindowPrivate::maybeSynthesizeContextMenuEvent.
    This is because the QWidgetWindow object and its QWidgetPrivate
    have already been deleted when processing an earlier event
    triggered by the mouse click, see backtrace below.
    
    Not deleting the object right away but marking it for deletion later
    makes sure the object is still valid when the event gets processed,
    and then deleted afterwards.
    
    Backtrace of how the QWindowPrivate object got deleted earlier
    (reverse-debugged with rr) - see frame 17 for the dtor (i.e. the
    code that was adjusted in this commit now to fix the problem):
    
        Thread 1 hit Breakpoint 1.1, QWindowPrivate::~QWindowPrivate 
(this=0x564896397450) at 
/home/michi/development/git/qt5/qtbase/src/gui/kernel/qwindow.cpp:211
        211     QWindowPrivate::~QWindowPrivate()
        (rr) p this
        $6 = (QWindowPrivate *) 0x564896397450
        (rr) bt
        #0  QWindowPrivate::~QWindowPrivate (this=0x564896397450) at 
/home/michi/development/git/qt5/qtbase/src/gui/kernel/qwindow.cpp:211
        #1  0x000019667a96f039 in QWidgetWindowPrivate::~QWidgetWindowPrivate 
(this=0x564896397450) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:34
        #2  0x000019667a96f05d in QWidgetWindowPrivate::~QWidgetWindowPrivate 
(this=0x564896397450) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:34
        #3  0x00006f736e33a7e8 in QScopedPointerDeleter<QObjectData>::cleanup 
(pointer=0x564896397450) at qtbase/src/corelib/tools/qscopedpointer.h:24
        #4  0x00006f736e32e134 in QScopedPointer<QObjectData, 
QScopedPointerDeleter<QObjectData> >::~QScopedPointer (this=0x5648961bd088) at 
qtbase/src/corelib/tools/qscopedpointer.h:81
        #5  0x00006f736e31cdb2 in QObject::~QObject (this=0x5648961bd080) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:1149
        #6  0x00005557579435ec in QWindow::~QWindow (this=0x5648961bd080) at 
/home/michi/development/git/qt5/qtbase/src/gui/kernel/qwindow.cpp:206
        #7  0x000019667a969be6 in QWidgetWindow::~QWidgetWindow 
(this=0x5648961bd080) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:179
        #8  0x000019667a969c2d in QWidgetWindow::~QWidgetWindow 
(this=0x5648961bd080) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:160
        #9  0x000019667a915351 in QWidgetPrivate::deleteTLSysExtra 
(this=0x564894d40bf0) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:1711
        #10 0x000019667a914f86 in QWidget::destroy (this=0x56488f3e8100, 
destroyWindow=true, destroySubWindows=true) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:12612
        #11 0x000019667a914504 in QWidget::~QWidget (this=0x56488f3e8100) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:1565
        #12 0x000019667ad11705 in QDialog::~QDialog (this=0x56488f3e8100) at 
/home/michi/development/git/qt5/qtbase/src/widgets/dialogs/qdialog.cpp:394
        #13 0x000019667ad1174d in QDialog::~QDialog (this=0x56488f3e8100) at 
/home/michi/development/git/qt5/qtbase/src/widgets/dialogs/qdialog.cpp:386
        #14 0x00006a0d3b71e358 in std::default_delete<QDialog>::operator() 
(this=0x5648963f9fb0, __ptr=0x56488f3e8100) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/unique_ptr.h:93
        #15 0x00006a0d3b71e478 in std::__uniq_ptr_impl<QDialog, 
std::default_delete<QDialog> >::reset (this=0x5648963f9fb0, __p=0x0) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/unique_ptr.h:205
        #16 0x00006a0d3b71e40d in std::unique_ptr<QDialog, 
std::default_delete<QDialog> >::reset (this=0x5648963f9fb0, __p=0x0) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/unique_ptr.h:504
        #17 0x00006a0d3b71b550 in 
QtInstanceDialog::~QtInstanceDialog()::$_0::operator()() const 
(this=0x7ffe9cb13630) at vcl/qt6/../qt5/QtInstanceDialog.cxx:30
        #18 0x00006a0d3b71b525 in std::__invoke_impl<void, 
QtInstanceDialog::~QtInstanceDialog()::$_0&>(std::__invoke_other, 
QtInstanceDialog::~QtInstanceDialog()::$_0&) (__f=...)
            at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:61
        #19 0x00006a0d3b71b4d5 in std::__invoke_r<void, 
QtInstanceDialog::~QtInstanceDialog()::$_0&>(QtInstanceDialog::~QtInstanceDialog()::$_0&)
 (__fn=...) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:111
        #20 0x00006a0d3b71b3fd in std::_Function_handler<void(), 
QtInstanceDialog::~QtInstanceDialog()::$_0>::_M_invoke (__functor=...) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_function.h:290
        #21 0x00006a0d3b6e278e in std::function<void()>::operator() 
(this=0x7ffe9cb13630) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_function.h:591
        #22 0x00006a0d3b6da31a in QtInstance::RunInMainThread 
(this=0x56488e111bf0, func=...) at vcl/qt6/../qt5/QtInstance.cxx:226
        #23 0x00006a0d3b71947b in QtInstanceDialog::~QtInstanceDialog 
(this=0x5648963f9f90, vtt=0x6a0d3b98fec8 <VTT for QtInstanceDialog>) at 
vcl/qt6/../qt5/QtInstanceDialog.cxx:30
        #24 0x00006a0d3b7195a0 in QtInstanceDialog::~QtInstanceDialog 
(this=0x5648963f9f90) at vcl/qt6/../qt5/QtInstanceDialog.cxx:28
        #25 0x00006a0d3b7196a9 in QtInstanceDialog::~QtInstanceDialog 
(this=0x5648963f9f90) at vcl/qt6/../qt5/QtInstanceDialog.cxx:28
        #26 0x00005abe4e4746f8 in std::default_delete<weld::Dialog>::operator() 
(this=0x564896171890, __ptr=0x5648963fa1f8) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/unique_ptr.h:93
        #27 0x00005abe4e4faefd in std::_Sp_counted_deleter<weld::Dialog*, 
std::default_delete<weld::Dialog>, std::allocator<void>, 
(__gnu_cxx::_Lock_policy)2>::_M_dispose (this=0x564896171880)
            at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:527
        #28 0x00005abe4da1978a in 
std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release 
(this=0x564896171880) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:346
        #29 0x00005abe4da19706 in 
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count 
(this=0x5648961a7cb8) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:1069
        #30 0x00005abe4db3d6e9 in std::__shared_ptr<weld::Dialog, 
(__gnu_cxx::_Lock_policy)2>::~__shared_ptr (this=0x5648961a7cb0) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:1525
        #31 0x00005abe4db2e905 in std::shared_ptr<weld::Dialog>::~shared_ptr 
(this=0x5648961a7cb0) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr.h:175
        #32 0x00005abe4e4f6a7b in 
weld::GenericDialogController::~GenericDialogController (this=0x5648961a7c90) 
at vcl/source/app/weldutils.cxx:58
        #33 0x000000444e3b8ce9 in AboutDialog::~AboutDialog 
(this=0x5648961a7c90) at cui/source/dialogs/about.cxx:142
        #34 0x000000444e5787b6 in std::destroy_at<AboutDialog> 
(__location=0x5648961a7c90) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_construct.h:88
        #35 0x000000444e578795 in std::_Destroy<AboutDialog> 
(__pointer=0x5648961a7c90) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_construct.h:149
        #36 0x000000444e57862f in std::allocator_traits<std::allocator<void> 
>::destroy<AboutDialog> (__p=0x5648961a7c90) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/alloc_traits.h:708
        #37 std::_Sp_counted_ptr_inplace<AboutDialog, std::allocator<void>, 
(__gnu_cxx::_Lock_policy)2>::_M_dispose (this=0x5648961a7c80) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:616
        #38 0x00006a0d3b661e5a in 
std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release_last_use 
(this=0x5648961a7c80) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:175
        #39 0x00006a0d3b661e35 in 
std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release_last_use_cold 
(this=0x5648961a7c80) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:199
        #40 0x00006a0d3b661e11 in 
std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release 
(this=0x5648961a7c80) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:353
        #41 0x00006a0d3b661cf6 in 
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count 
(this=0x7ffe9cb13a30) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:1069
        #42 0x00006a0d3b71ea39 in std::__shared_ptr<weld::DialogController, 
(__gnu_cxx::_Lock_policy)2>::~__shared_ptr (this=0x7ffe9cb13a28) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:1525
        #43 0x00006a0d3b71da14 in std::__shared_ptr<weld::DialogController, 
(__gnu_cxx::_Lock_policy)2>::reset (this=0x7ffe9cb13ae8) at 
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:1643
        #44 0x00006a0d3b71ae1c in QtInstanceDialog::dialogFinished 
(this=0x5648963f9f90, nResult=7) at vcl/qt6/../qt5/QtInstanceDialog.cxx:198
        #45 0x00006a0d3b71e9a6 in 
QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, 
QtPrivate::List<int>, void, void (QtInstanceDialog::*)(int)>::call(void 
(QtInstanceDialog::*)(int), QtInstanceDialog*, 
void**)::{lambda()#1}::operator()() const (this=0x7ffe9cb13bd0) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
        #46 0x00006a0d3b71e8c9 in 
QtPrivate::FunctorCallBase::call_internal<void, 
QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, 
QtPrivate::List<int>, void, void (QtInstanceDialog::*)(int)>::call(void 
(QtInstanceDialog::*)(int), QtInstanceDialog*, void**)::{lambda()#1}>(void**, 
QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, 
QtPrivate::List<int>, void, void (QtInstanceDialog::*)(int)>::call(void 
(QtInstanceDialog::*)(int), QtInstanceDialog*, void**)::{lambda()#1}&&) 
(args=0x7ffe9cb13fa0, fn=...) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:65
        #47 0x00006a0d3b71e803 in 
QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, 
QtPrivate::List<int>, void, void (QtInstanceDialog::*)(int)>::call
            (f=&virtual QtInstanceDialog::dialogFinished(int), 
o=0x5648963f9f90, arg=0x7ffe9cb13fa0) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:126
        #48 0x00006a0d3b71e77d in QtPrivate::FunctionPointer<void 
(QtInstanceDialog::*)(int)>::call<QtPrivate::List<int>, void> (f=&virtual 
QtInstanceDialog::dialogFinished(int), o=0x5648963f9f90, arg=0x7ffe9cb13fa0)
            at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:174
        #49 0x00006a0d3b71e6a6 in QtPrivate::QCallableObject<void 
(QtInstanceDialog::*)(int), QtPrivate::List<int>, void>::impl (which=1, 
this_=0x5648961544d0, r=0x5648963f9f90, a=0x7ffe9cb13fa0, ret=0x0)
            at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:545
        #50 0x00006f736e271f82 in QtPrivate::QSlotObjectBase::call 
(this=0x5648961544d0, r=0x5648963f9f90, a=0x7ffe9cb13fa0) at 
qtbase/src/corelib/kernel/qobjectdefs_impl.h:461
        #51 0x00006f736e331854 in doActivate<false> (sender=0x56488f3e8100, 
signal_index=7, argv=0x7ffe9cb13fa0) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4139
        #52 0x00006f736e3273e3 in QMetaObject::activate (sender=0x56488f3e8100, 
m=0x19667b4289a8 <QDialog::staticMetaObject>, local_signal_index=0, 
argv=0x7ffe9cb13fa0)
            at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4199
        #53 0x000019667a86520b in QMetaObject::activate<void, int> 
(sender=0x56488f3e8100, mo=0x19667b4289a8 <QDialog::staticMetaObject>, 
local_signal_index=0, ret=0x0, args=@0x7ffe9cb13fe4: 7) at 
qtbase/src/corelib/kernel/qobjectdefs.h:306
        #54 0x000019667ad11f28 in QDialog::finished (this=0x56488f3e8100, 
_t1=7) at qtbase/src/widgets/Widgets_autogen/include/moc_qdialog.cpp:191
        #55 0x000019667ad11e55 in QDialog::done (this=0x56488f3e8100, r=7) at 
/home/michi/development/git/qt5/qtbase/src/widgets/dialogs/qdialog.cpp:617
        #56 0x00006a0d3b71b173 in QtInstanceDialog::handleButtonClick 
(rDialog=..., rButton=...) at vcl/qt6/../qt5/QtInstanceDialog.cxx:226
        #57 0x00006a0d3b658b0c in QtBuilder::tweakInsertedChild(QObject*, 
QObject*, std::basic_string_view<char, std::char_traits<char> >, 
std::basic_string_view<char, std::char_traits<char> >)::$_0::operator()() const 
(this=0x5648961351a0)
            at vcl/qt6/../qt5/QtBuilder.cxx:528
        #58 0x00006a0d3b658ae8 in 
QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, 
void, QtBuilder::tweakInsertedChild(QObject*, QObject*, 
std::basic_string_view<char, std::char_traits<char> >, 
std::basic_string_v--Type <RET> for more, q to quit, c to continue without 
paging--
        iew<char, std::char_traits<char> 
>)::$_0>::call(QtBuilder::tweakInsertedChild(QObject*, QObject*, 
std::basic_string_view<char, std::char_traits<char> >, 
std::basic_string_view<char, std::char_traits<char> >)::$_0&, 
void**)::{lambda()#1}::operator()() const (this=0x7ffe9cb14370) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:116
        #59 0x00006a0d3b658ac9 in 
QtPrivate::FunctorCallBase::call_internal<void, 
QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, 
void, QtBuilder::tweakInsertedChild(QObject*, QObject*, 
std::basic_string_view<char, std::char_traits<char> >, 
std::basic_string_view<char, std::char_traits<char> 
>)::$_0>::call(QtBuilder::tweakInsertedChild(QObject*, QObject*, 
std::basic_string_view<char, std::char_traits<char> >, 
std::basic_string_view<char, std::char_traits<char> >)::$_0&, 
void**)::{lambda()#1}>(void**, 
QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, 
void, QtBuilder::tweakInsertedChild(QObject*, QObject*, 
std::basic_string_view<char, std::char_traits<char> >, 
std::basic_string_view<char, std::char_traits<char> 
>)::$_0>::call(QtBuilder::tweakInsertedChild(QObject*, QObject*, 
std::basic_string_view<char, std::char_traits<char> >, 
std::basic_string_view<char, std::char_traits<char> >)::$_0&, 
void**)::{lambda()#1}&&) (args=0x7f
 fe9cb146d0, fn=...) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:65
        #60 0x00006a0d3b658a92 in 
QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, 
void, QtBuilder::tweakInsertedChild(QObject*, QObject*, 
std::basic_string_view<char, std::char_traits<char> >, 
std::basic_string_view<char, std::char_traits<char> 
>)::$_0>::call(QtBuilder::tweakInsertedChild(QObject*, QObject*, 
std::basic_string_view<char, std::char_traits<char> >, 
std::basic_string_view<char, std::char_traits<char> >)::$_0&, void**)
            (f=..., arg=0x7ffe9cb146d0) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:115
        #61 0x00006a0d3b658a41 in 
QtPrivate::FunctorCallable<QtBuilder::tweakInsertedChild(QObject*, QObject*, 
std::basic_string_view<char, std::char_traits<char> >, 
std::basic_string_view<char, std::char_traits<char> 
>)::$_0>::call<QtPrivate::List<>, void>(QtBuilder::tweakInsertedChild(QObject*, 
QObject*, std::basic_string_view<char, std::char_traits<char> >, 
std::basic_string_view<char, std::char_traits<char> >)::$_0&, void*, void**) 
(f=..., arg=0x7ffe9cb146d0)
            at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:337
        #62 0x00006a0d3b6589e8 in 
QtPrivate::QCallableObject<QtBuilder::tweakInsertedChild(QObject*, QObject*, 
std::basic_string_view<char, std::char_traits<char> >, 
std::basic_string_view<char, std::char_traits<char> >)::$_0, QtPrivate::List<>, 
void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) 
(which=1, this_=0x564896135190, r=0x56488f3e8100, a=0x7ffe9cb146d0, ret=0x0) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:547
        #63 0x00006f736e271f82 in QtPrivate::QSlotObjectBase::call 
(this=0x564896135190, r=0x56488f3e8100, a=0x7ffe9cb146d0) at 
qtbase/src/corelib/kernel/qobjectdefs_impl.h:461
        #64 0x00006f736e331854 in doActivate<false> (sender=0x56489581c360, 
signal_index=9, argv=0x7ffe9cb146d0) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4139
        #65 0x00006f736e3273e3 in QMetaObject::activate (sender=0x56489581c360, 
m=0x19667b414930 <QAbstractButton::staticMetaObject>, local_signal_index=2, 
argv=0x7ffe9cb146d0)
            at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4199
        #66 0x000019667a86538b in QMetaObject::activate<void, bool> 
(sender=0x56489581c360, mo=0x19667b414930 <QAbstractButton::staticMetaObject>, 
local_signal_index=2, ret=0x0, args=@0x7ffe9cb14717: false)
            at qtbase/src/corelib/kernel/qobjectdefs.h:306
        #67 0x000019667aab4f52 in QAbstractButton::clicked 
(this=0x56489581c360, _t1=false) at 
qtbase/src/widgets/Widgets_autogen/include/moc_qabstractbutton.cpp:253
        #68 0x000019667aab4e67 in QAbstractButtonPrivate::emitClicked 
(this=0x564893f024d0) at 
/home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:381
        #69 0x000019667aab4cc1 in QAbstractButtonPrivate::click 
(this=0x564893f024d0) at 
/home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:374
        #70 0x000019667aab616f in QAbstractButton::mouseReleaseEvent 
(this=0x56489581c360, e=0x7ffe9cb15ad0) at 
/home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:976
        #71 0x000019667a92c6fd in QWidget::event (this=0x56489581c360, 
event=0x7ffe9cb15ad0) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:8971
        #72 0x000019667aab5f8c in QAbstractButton::event (this=0x56489581c360, 
e=0x7ffe9cb15ad0) at 
/home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:933
        #73 0x000019667ac2dfb1 in QPushButton::event (this=0x56489581c360, 
e=0x7ffe9cb15ad0) at 
/home/michi/development/git/qt5/qtbase/src/widgets/widgets/qpushbutton.cpp:684
        #74 0x000019667a86fe10 in QApplicationPrivate::notify_helper 
(this=0x56488e07aae0, receiver=0x56489581c360, e=0x7ffe9cb15ad0) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3304
        #75 0x000019667a871ae2 in QApplication::notify (this=0x56488e067420, 
receiver=0x56489581c360, e=0x7ffe9cb15ad0) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:2781
        #76 0x00006f736e25acc9 in QCoreApplication::notifyInternal2 
(receiver=0x56489581c360, event=0x7ffe9cb15ad0) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1122
        #77 0x00006f736e25bb39 in QCoreApplication::sendSpontaneousEvent 
(receiver=0x56489581c360, event=0x7ffe9cb15ad0) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1578
        #78 0x000019667a870737 in QApplicationPrivate::sendMouseEvent
            (receiver=0x56489581c360, event=0x7ffe9cb15ad0, 
alienWidget=0x56489581c360, nativeWidget=0x56488f3e8100, 
buttonDown=0x19667b45b488 <qt_button_down>, lastMouseReceiver=..., 
spontaneous=true, onlyDispatchEnterLeave=false)
            at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:2362
        #79 0x000019667a96b8bb in QWidgetWindow::handleMouseEvent 
(this=0x5648961bd080, event=0x7ffe9cb16b98) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:664
        #80 0x000019667a96a145 in QWidgetWindow::event (this=0x5648961bd080, 
event=0x7ffe9cb16b98) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:292
        #81 0x000019667a86fe10 in QApplicationPrivate::notify_helper 
(this=0x56488e07aae0, receiver=0x5648961bd080, e=0x7ffe9cb16b98) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3304
        #82 0x000019667a873d2d in QApplication::notify (this=0x56488e067420, 
receiver=0x5648961bd080, e=0x7ffe9cb16b98) at 
/home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3254
        #83 0x00006f736e25acc9 in QCoreApplication::notifyInternal2 
(receiver=0x5648961bd080, event=0x7ffe9cb16b98) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1122
        #84 0x00006f736e25bb39 in QCoreApplication::sendSpontaneousEvent 
(receiver=0x5648961bd080, event=0x7ffe9cb16b98) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1578
        #85 0x0000555757871f72 in QGuiApplicationPrivate::processMouseEvent 
(e=0x5f6d64003360) at 
/home/michi/development/git/qt5/qtbase/src/gui/kernel/qguiapplication.cpp:2485
        #86 0x0000555757871136 in 
QGuiApplicationPrivate::processWindowSystemEvent (e=0x5f6d64003360) at 
/home/michi/development/git/qt5/qtbase/src/gui/kernel/qguiapplication.cpp:2212
        #87 0x0000555757958a4d in 
QWindowSystemInterface::sendWindowSystemEvents (flags=...) at 
/home/michi/development/git/qt5/qtbase/src/gui/kernel/qwindowsysteminterface.cpp:1113
        #88 0x00005557579588fe in 
QWindowSystemInterface::flushWindowSystemEvents (flags=...) at 
/home/michi/development/git/qt5/qtbase/src/gui/kernel/qwindowsysteminterface.cpp:1082
        #89 0x0000393946e55875 in 
QtWaylandClient::QWaylandDisplay::flushRequests (this=0x56488e0ca590) at 
/home/michi/development/git/qt5/qtwayland/src/client/qwaylanddisplay.cpp:524
        #90 0x0000393946e5a946 in 
QtWaylandClient::QWaylandDisplay::qt_static_metacall (_o=0x56488e0ca590, 
_c=QMetaObject::InvokeMetaMethod, _id=4, _a=0x7ffe9cb172a0)
            at 
qtwayland/src/client/WaylandClient_autogen/include/moc_qwaylanddisplay_p.cpp:95
        #91 0x00006f736e331954 in doActivate<false> (sender=0x56488e06c0e0, 
signal_index=4, argv=0x7ffe9cb172a0) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4151
        #92 0x00006f736e3273e3 in QMetaObject::activate (sender=0x56488e06c0e0, 
m=0x6f736ec1ec68 <QAbstractEventDispatcher::staticMetaObject>, 
local_signal_index=1, argv=0x0)
            at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4199
        #93 0x00006f736e243c79 in QAbstractEventDispatcher::awake 
(this=0x56488e06c0e0) at 
qtbase/src/corelib/Core_autogen/include/moc_qabstracteventdispatcher.cpp:129
        #94 0x00006f736e84d1e8 in QEventDispatcherGlib::processEvents 
(this=0x56488e06c0e0, flags=...) at 
/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:406
        #95 0x0000555758154088 in QPAEventDispatcherGlib::processEvents 
(this=0x56488e06c0e0, flags=...) at 
/home/michi/development/git/qt5/qtbase/src/gui/platform/unix/qeventdispatcher_glib.cpp:89
        #96 0x00006a0d3b6d9b82 in QtInstance::ImplYield (this=0x56488e111bf0, 
bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:464
        #97 0x00006a0d3b6dcc01 in QtInstance::DoYield (this=0x56488e111bf0, 
bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:475
        #98 0x00005abe4e4b26e6 in ImplYield (i_bWait=true, i_bAllEvents=false) 
at vcl/source/app/svapp.cxx:385
        #99 0x00005abe4e4b207f in Application::Yield () at 
vcl/source/app/svapp.cxx:473
        #100 0x00005abe4e4b1e60 in Application::Execute () at 
vcl/source/app/svapp.cxx:360
        #101 0x00004759668eccab in desktop::Desktop::Main (this=0x7ffe9cb18ec8) 
at desktop/source/app/app.cxx:1679
        #102 0x00005abe4e4d3bc6 in ImplSVMain () at 
vcl/source/app/svmain.cxx:230
        #103 0x00005abe4e4d57b9 in SVMain () at vcl/source/app/svmain.cxx:248
        #104 0x00004759669665da in soffice_main () at 
desktop/source/app/sofficemain.cxx:121
        #105 0x000056486abf0a6d in sal_main () at 
/home/michi/development/git/libreoffice/desktop/source/app/main.c:51
        #106 0x000056486abf0a47 in main (argc=1, argv=0x7ffe9cb190d8) at 
/home/michi/development/git/libreoffice/desktop/source/app/main.c:49
    
    [1] 
https://code.qt.io/cgit/qt/qtbase.git/commit/?id=84a5f50c7766c99f62b22bb4388137e0aa8dd13d
    
    Change-Id: I3f547c1b1c1581d2f3ae092f2034d930640b0f48
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/179312
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>
    Tested-by: Jenkins

diff --git a/vcl/inc/qt5/QtInstanceDialog.hxx b/vcl/inc/qt5/QtInstanceDialog.hxx
index 82acf2d6c1dd..76d3558369d9 100644
--- a/vcl/inc/qt5/QtInstanceDialog.hxx
+++ b/vcl/inc/qt5/QtInstanceDialog.hxx
@@ -17,7 +17,7 @@ class QtInstanceDialog : public QtInstanceWindow, public 
virtual weld::Dialog
 {
     Q_OBJECT
 
-    std::unique_ptr<QDialog> m_pDialog;
+    QDialog* m_pDialog;
     QWidget* m_pContentArea;
 
     // the DialogController/Dialog/function passed to the runAsync variants
diff --git a/vcl/qt5/QtInstanceDialog.cxx b/vcl/qt5/QtInstanceDialog.cxx
index a975403fbda4..0a622728fb79 100644
--- a/vcl/qt5/QtInstanceDialog.cxx
+++ b/vcl/qt5/QtInstanceDialog.cxx
@@ -22,12 +22,17 @@ QtInstanceDialog::QtInstanceDialog(QDialog* pDialog)
     , m_pContentArea(nullptr)
     , m_aRunAsyncFunc(nullptr)
 {
+    assert(m_pDialog);
 }
 
 QtInstanceDialog::~QtInstanceDialog()
 {
     SolarMutexGuard g;
-    GetQtInstance().RunInMainThread([&] { m_pDialog.reset(); });
+
+    GetQtInstance().RunInMainThread([&] {
+        m_pDialog->hide();
+        m_pDialog->deleteLater();
+    });
 }
 
 bool QtInstanceDialog::runAsync(const std::shared_ptr<weld::DialogController>& 
rxOwner,
@@ -46,7 +51,7 @@ bool QtInstanceDialog::runAsync(const 
std::shared_ptr<weld::DialogController>& r
 
     m_xRunAsyncDialogController = rxOwner;
     m_aRunAsyncFunc = func;
-    connect(m_pDialog.get(), &QDialog::finished, this, 
&QtInstanceDialog::dialogFinished);
+    connect(m_pDialog, &QDialog::finished, this, 
&QtInstanceDialog::dialogFinished);
     m_pDialog->open();
 
     return true;
@@ -69,7 +74,7 @@ bool QtInstanceDialog::runAsync(std::shared_ptr<Dialog> 
const& rxSelf,
 
     m_xRunAsyncDialog = rxSelf;
     m_aRunAsyncFunc = func;
-    connect(m_pDialog.get(), &QDialog::finished, this, 
&QtInstanceDialog::dialogFinished);
+    connect(m_pDialog, &QDialog::finished, this, 
&QtInstanceDialog::dialogFinished);
     m_pDialog->open();
 
     return true;
@@ -182,7 +187,7 @@ void QtInstanceDialog::dialogFinished(int nResult)
         return;
     }
 
-    disconnect(m_pDialog.get(), &QDialog::finished, this, 
&QtInstanceDialog::dialogFinished);
+    disconnect(m_pDialog, &QDialog::finished, this, 
&QtInstanceDialog::dialogFinished);
 
     // use local variables for these, as members might have got de-allocated 
by the time they're reset
     std::shared_ptr<weld::Dialog> xRunAsyncDialog = m_xRunAsyncDialog;

Reply via email to