-
-
Notifications
You must be signed in to change notification settings - Fork 745
Commit 33eea7b
committed
tdf#130857 qt weld: Block toggled signal for new entry
When the TreeView has special checkboxes enabled,
block signals while calling QStandardItem::setCheckable
for the item in the first column. This prevents triggering
the QAbstractItemModel::dataChanged signal which would trigger
weld::TreeView::signal_toggled from
QtInstanceTreeView::handleDataChanged for the newly
inserted row.
Since the row is new, there is no logical change
from a previous value from the weld API perspective.
This fixes a crash otherwise seen with upcoming
commit
Change-Id: I6262b0e9d235f9efc6cde81614d42ba28025989d
Author: Michael Weghorn <[email protected]>
Date: Mon Oct 6 11:28:33 2025 +0200
tdf#130857 qt weld: Support Writer "Caption" dialog
when triggering the then newly supported dialog.
Backtrace:
Thread 1 received signal SIGSEGV, Segmentation fault.
rtl::OUString::isEmpty (this=0x18) at include/rtl/ustring.hxx:839
839 return pData->length == 0;
(rr) bt
#0 rtl::OUString::isEmpty (this=0x18) at include/rtl/ustring.hxx:839
#1 0x00007fd750a9fb07 in SwCaptionOptPage::UpdateEntry (this=0x55d1ea326dc0, nSelEntry=0) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1235
#2 0x00007fd750aa4e42 in SwCaptionOptPage::ToggleEntryHdl (this=0x55d1ea326dc0, rRowCol={...}) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1344
#3 0x00007fd750a9ce4d in SwCaptionOptPage::LinkStubToggleEntryHdl (instance=0x55d1ea326dc0, data={...}) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1342
#4 0x00007fd78ef17411 in Link<std::pair<weld::TreeIter const&, int> const&, void>::Call (this=0x55d1ea332d70, data={...}) at include/tools/link.hxx:105
#5 0x00007fd78ef112f1 in weld::TreeView::signal_toggled (this=0x55d1ea332d00, rIterCol={...}) at include/vcl/weld.hxx:1011
#6 0x00007fd78eef8507 in QtInstanceTreeView::handleDataChanged (this=0x55d1ea332b50, rTopLeft=..., rBottomRight=..., rRoles=...) at vcl/qt6/../qt5/QtInstanceTreeView.cxx:1214
#7 0x00007fd78ef17f4a in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtInstanceTreeView*, void**)::{lambda()#1}::operator()() const (this=0x7ffe16a0ef90)
at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
#8 0x00007fd78ef17eb9 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtInstanceTreeView*, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtInstanceTreeView*, void**)::{lambda()#1}&&) (args=0x7ffe16a0f360, fn=...)
at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:65
#9 0x00007fd78ef17e83 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call
(f=(void (QtInstanceTreeView::*)(QtInstanceTreeView * const, const QModelIndex &, const QModelIndex &, const QList<int> &)) 0x7fd78eef83b0 <QtInstanceTreeView::handleDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55d1ea332b50, arg=0x7ffe16a0f360) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:126
#10 0x00007fd78ef17dfd in QtPrivate::FunctionPointer<void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call<QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void>
(f=(void (QtInstanceTreeView::*)(QtInstanceTreeView * const, const QModelIndex &, const QModelIndex &, const QList<int> &)) 0x7fd78eef83b0 <QtInstanceTreeView::handleDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55d1ea332b50, arg=0x7ffe16a0f360) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:174
#11 0x00007fd78ef17d26 in QtPrivate::QCallableObject<void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void>::impl
(which=1, this_=0x55d1ea270ae0, r=0x55d1ea332b50, a=0x7ffe16a0f360, ret=0x0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:545
#12 0x00007fd78dce95e2 in QtPrivate::QSlotObjectBase::call (this=0x55d1ea270ae0, r=0x55d1ea332b50, a=0x7ffe16a0f360) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:461
#13 0x00007fd78df1400f in doActivate<false> (sender=0x55d1ea25a160, signal_index=3, argv=0x7ffe16a0f360) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4342
#14 0x00007fd78df0a353 in QMetaObject::activate (sender=0x55d1ea25a160, m=0x7fd78e85ee68 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, argv=0x7ffe16a0f360)
at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4402
#15 0x00007fd78e36b5ce in QMetaObject::activate<void, QModelIndex, QModelIndex, QList<int> > (sender=0x55d1ea25a160, mo=0x7fd78e85ee68 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, ret=0x0, args=..., args=..., args=...)
at qtbase/src/corelib/kernel/qobjectdefs.h:319
#16 0x00007fd78e3667f0 in QAbstractItemModel::dataChanged (this=0x55d1ea25a160, _t1=..., _t2=..., _t3=...) at qtbase/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:658
#17 0x00007fd78e3f83c4 in QSortFilterProxyModelPrivate::_q_sourceDataChanged (this=0x55d1e2894d60, source_top_left=..., source_bottom_right=..., roles=...)
at /home/michi/development/git/qt5/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp:1528
#18 0x00007fd78e43c83e in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QSortFilterProxyModelPrivate*, void**)::{lambda()#1}::operator()() const
(this=0x7ffe16a0f8a0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
#19 0x00007fd78e43c79d in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QSortFilterProxyModelPrivate*, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QSortFilterProxyModelPrivate*, void**)::{lambda()#1}&&)
(args=0x7ffe16a0fc80, fn=...) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:65
#20 0x00007fd78e43c757 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call
(f=(void (QSortFilterProxyModelPrivate::*)(QSortFilterProxyModelPrivate * const, const QModelIndex &, const QModelIndex &, const QList<int> &)) 0x7fd78e3f74a0 <QSortFilterProxyModelPrivate::_q_sourceDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55d1e2894d60, arg=0x7ffe16a0fc80) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:126
#21 0x00007fd78e43c6c1 in QtPrivate::FunctionPointer<void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call<QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void>
(f=(void (QSortFilterProxyModelPrivate::*)(QSortFilterProxyModelPrivate * const, const QModelIndex &, const QModelIndex &, const QList<int> &)) 0x7fd78e3f74a0 <QSortFilterProxyModelPrivate::_q_sourceDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55d1e2894d60, arg=0x7ffe16a0fc80) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:174
#22 0x00007fd78e43c5f0 in QtPrivate::QPrivateSlotObject<void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void>::impl (which=1, this_=0x55d1ea25a960, r=0x55d1ea25a160, a=0x7ffe16a0fc80, ret=0x0) at qtbase/src/corelib/kernel/qobject_p.h:272
#23 0x00007fd78dce95e2 in QtPrivate::QSlotObjectBase::call (this=0x55d1ea25a960, r=0x55d1ea25a160, a=0x7ffe16a0fc80) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:461
#24 0x00007fd78df1400f in doActivate<false> (sender=0x55d1ea259540, signal_index=3, argv=0x7ffe16a0fc80) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4342
#25 0x00007fd78df0a353 in QMetaObject::activate (sender=0x55d1ea259540, m=0x7fd78e85ee68 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, argv=0x7ffe16a0fc80)
at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4402
#26 0x00007fd78e36b5ce in QMetaObject::activate<void, QModelIndex, QModelIndex, QList<int> > (sender=0x55d1ea259540, mo=0x7fd78e85ee68 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, ret=0x0, args=..., args=..., args=...)
at qtbase/src/corelib/kernel/qobjectdefs.h:319
#27 0x00007fd78e3667f0 in QAbstractItemModel::dataChanged (this=0x55d1ea259540, _t1=..., _t2=..., _t3=...) at qtbase/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:658
#28 0x00007fd78d23d7cd in QStandardItemModelPrivate::itemChanged (this=0x55d1ea259fb0, item=0x55d1ea28adf0, roles=...) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:568
#29 0x00007fd78d240701 in QStandardItem::setData (this=0x55d1ea28adf0, value=..., role=10) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:909
#30 0x00007fd78d240ccd in QStandardItem::setCheckable (this=0x55d1ea28adf0, checkable=true) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:1345
#31 0x00007fd78ef0387f in QtInstanceTreeView::insert(weld::TreeIter const*, int, rtl::OUString const*, rtl::OUString const*, rtl::OUString const*, VirtualDevice*, bool, weld::TreeIter*)::$_0::operator()() const (this=0x55d1ea28a600)
at vcl/qt6/../qt5/QtInstanceTreeView.cxx:88
#32 0x00007fd78ef03355 in std::__invoke_impl<void, QtInstanceTreeView::insert(weld::TreeIter const*, int, rtl::OUString const*, rtl::OUString const*, rtl::OUString const*, VirtualDevice*, bool, weld::TreeIter*)::$_0&>(std::__invoke_other, QtInstanceTreeView::insert(weld::TreeIter const*, int, rtl::OUString const*, rtl::OUString const*, rtl::OUString const*, VirtualDevice*, bool, weld::TreeIter*)::$_0&) (__f=...)
at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:63
#33 0x00007fd78ef03315 in std::__invoke_r<void, QtInstanceTreeView::insert(weld::TreeIter const*, int, rtl::OUString const*, rtl::OUString const*, rtl::OUString const*, VirtualDevice*, bool, weld::TreeIter*)::$_0&>(QtInstanceTreeView::insert(weld::TreeIter const*, int, rtl::OUString const*, rtl::OUString const*, rtl::OUString const*, VirtualDevice*, bool, weld::TreeIter*)::$_0&) (__fn=...)
at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:113
#34 0x00007fd78ef031fd in std::_Function_handler<void(), QtInstanceTreeView::insert(weld::TreeIter const*, int, rtl::OUString const*, rtl::OUString const*, rtl::OUString const*, VirtualDevice*, bool, weld::TreeIter*)::$_0>::_M_invoke
(__functor=...) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:292
#35 0x00007fd78ee2adde in std::function<void()>::operator() (this=0x7ffe16a10278) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:593
#36 0x00007fd78ee2200f in QtInstance::RunInMainThread (this=0x55d1e1053a60, func=...) at vcl/qt6/../qt5/QtInstance.cxx:205
#37 0x00007fd78eef9580 in QtInstanceTreeView::insert (this=0x55d1ea332b50, pParent=0x0, nPos=0, pStr=0x0, pId=0x0, pIconName=0x0, pImageSurface=0x0, bChildrenOnDemand=false, pRet=0x0) at vcl/qt6/../qt5/QtInstanceTreeView.cxx:62
#38 0x00007fd78eef9735 in virtual thunk to QtInstanceTreeView::insert(weld::TreeIter const*, int, rtl::OUString const*, rtl::OUString const*, rtl::OUString const*, VirtualDevice*, bool, weld::TreeIter*) ()
at /home/michi/development/git/libreoffice/instdir/program/libvclplug_qt6lo.so
#39 0x00007fd750a91799 in weld::TreeView::insert (this=0x55d1ea332d00, nRow=-1, pRet=0x0) at include/vcl/weld.hxx:1053
#40 0x00007fd750a90c92 in weld::TreeView::append (this=0x55d1ea332d00, pRet=0x0) at include/vcl/weld.hxx:1056
#41 0x00007fd750a9e2e9 in SwCaptionOptPage::Reset (this=0x55d1ea326dc0, rSet=0x7ffe16a10990) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1096
#42 0x00007fd79c8bdd00 in SfxSingleTabDialogController::SetTabPage (this=0x7ffe16a10938, xTabPage=std::unique_ptr<SfxTabPage> = {...}) at /home/michi/development/git/libreoffice/sfx2/source/dialog/basedlgs.cxx:273
#43 0x00007fd750a99f2d in SwCaptionOptDlg::SwCaptionOptDlg (this=0x7ffe16a10938, pParent=0x55d1e7e35f78, rSet=SfxItemSet of pool 0x55d1e2a38060 with parent 0x0 and Which ranges: [(1, 160), (1000, 1252), (4021, 4078)])
at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:854
#44 0x00007fd750c21914 in SwCaptionDialog::CaptionHdl (this=0x7fd77c003ea0) at /home/michi/development/git/libreoffice/sw/source/ui/frmdlg/cption.cxx:374
#45 0x00007fd750c2006d in SwCaptionDialog::LinkStubCaptionHdl (instance=0x7fd77c003ea0, data=...) at /home/michi/development/git/libreoffice/sw/source/ui/frmdlg/cption.cxx:371
#46 0x00007fd7976aa801 in Link<weld::Button&, void>::Call (this=0x55d1e7e35748, data=...) at include/tools/link.hxx:105
#47 0x00007fd79768582c in weld::Button::signal_clicked (this=0x55d1e7e35740) at include/vcl/weld.hxx:1563
[...]
Change-Id: I7ced40096c5d8cf840db3a185688017e0fdae692
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191954
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <[email protected]>1 parent 184bc3c commit 33eea7bCopy full SHA for 33eea7b
File tree
Expand file treeCollapse file tree
1 file changed
+4
-0
lines changedOpen diff view settings
Filter options
- vcl/qt5
Expand file treeCollapse file tree
1 file changed
+4
-0
lines changedOpen diff view settings
Collapse file
vcl/qt5/QtInstanceTreeView.cxx
Copy file name to clipboardExpand all lines: vcl/qt5/QtInstanceTreeView.cxx+4Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
85 | 85 | | |
86 | 86 | | |
87 | 87 | | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
88 | 91 | | |
| 92 | + | |
89 | 93 | | |
90 | 94 | | |
91 | 95 | | |
| |||
0 commit comments