include/vcl/weld/ComboBox.hxx | 8 +++++--- include/vcl/weld/EntryTreeView.hxx | 12 ++++++------ vcl/inc/jsdialog/jsdialogbuilder.hxx | 13 +++++++++---- vcl/inc/qt5/QtInstanceComboBox.hxx | 5 +++-- vcl/inc/salvtables.hxx | 14 ++++++++------ vcl/jsdialog/jsdialogbuilder.cxx | 12 ++++++------ vcl/qt5/QtInstanceBuilder.cxx | 1 + vcl/qt5/QtInstanceComboBox.cxx | 4 ++-- vcl/source/app/salvtables.cxx | 9 +++++---- vcl/source/weld/ComboBox.cxx | 8 ++++++++ vcl/unx/gtk3/gtkinst.cxx | 4 ++-- 11 files changed, 55 insertions(+), 35 deletions(-)
New commits: commit de055cfc35c9387e0149f60382f8ae497f242c00 Author: Michael Weghorn <[email protected]> AuthorDate: Fri Jan 16 17:08:16 2026 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Sat Jan 17 06:39:13 2026 +0100 tdf#130857 weld: Block signals in ComboBox::insert As is the case in other weld methods, signals about ComboBox changes are not supposed to be emitted when the change happens programatically and not by manual user interaction. Therefore, disable notify events in ComboBox::insert by renaming the actual toolkit implementations to do_insert and making the weld::ComboBox::insert base class method block signals while calling the virtual methods. See also e.g. weld::TreeView::insert which uses the same approach. The GTK implementation was already blocking signals because it calls GtkInstanceComboBox::insert_including_mru which in turn blocks signals during insertion. This fixes a nullptr deref seen with the qt6 VCL plugin and env var SAL_VCL_QT_USE_WELDED_WIDGETS=1 in a WIP branch to declare support for native widgets in the dialog triggered as follows: * start Writer * "Insert" -> "Chart" * right-click on the X axes to open the context menu * activate the "Format Axis" context menu entry Backtrace: Thread 1 "soffice.bin" received signal SIGSEGV, Segmentation fault. 0x00007ffff2525a54 in SvxNumberFormatShell::LanguageChanged (this=0x0, eLangType=..., rFmtSelPos=@0x7fffffff79ee: 0, rFmtEntries=std::__debug::vector of length 0, capacity 0) at /home/michi/development/git/libreoffice/svx/source/items/numfmtsh.cxx:190 190 eCurLanguage = eLangType; (gdb) bt #0 0x00007ffff2525a54 in SvxNumberFormatShell::LanguageChanged (this=0x0, eLangType=..., rFmtSelPos=@0x7fffffff79ee: 0, rFmtEntries=std::__debug::vector of length 0, capacity 0) at /home/michi/development/git/libreoffice/svx/source/items/numfmtsh.cxx:190 #1 0x00007fff8a6c5bfc in SvxNumberFormatTabPage::UpdateFormatListBox_Impl (this=0x5555606d5ea0, bCat=false, bUpdateEdit=true) at /home/michi/development/git/libreoffice/cui/source/tabpages/numfmt.cxx:990 #2 0x00007fff8a6caa4a in SvxNumberFormatTabPage::SelFormatHdl_Impl (this=0x5555606d5ea0, pLb=0x555560788f98) at /home/michi/development/git/libreoffice/cui/source/tabpages/numfmt.cxx:1240 #3 0x00007fff8a6cab98 in SvxNumberFormatTabPage::SelFormatListBoxHdl_Impl (this=0x5555606d5ea0, rLb=...) at /home/michi/development/git/libreoffice/cui/source/tabpages/numfmt.cxx:1131 #4 0x00007fff8a6c43bd in SvxNumberFormatTabPage::LinkStubSelFormatListBoxHdl_Impl (instance=0x5555606d5ea0, data=...) at /home/michi/development/git/libreoffice/cui/source/tabpages/numfmt.cxx:1129 #5 0x00007ffff115bb01 in Link<weld::ComboBox&, void>::Call (this=0x555560788f18, data=...) at include/tools/link.hxx:105 #6 0x00007ffff114e85b in SvxLanguageBox::ChangeHdl (this=0x555560788f10, rControl=...) at /home/michi/development/git/libreoffice/svx/source/dialog/langbox.cxx:534 #7 0x00007ffff114e51d in SvxLanguageBox::LinkStubChangeHdl (instance=0x555560788f10, data=...) at /home/michi/development/git/libreoffice/svx/source/dialog/langbox.cxx:464 #8 0x00007fffe58a4371 in Link<weld::ComboBox&, void>::Call (this=0x555560789150, data=...) at include/tools/link.hxx:105 #9 0x00007fffe58a3f88 in weld::ComboBox::signal_changed (this=0x555560789108) at include/vcl/weld/ComboBox.hxx:63 #10 0x00007fffe58988dd in QtInstanceComboBox::signalChanged (this=0x555560788f60) at vcl/qt6/../qt5/QtInstanceComboBox.cxx:432 #11 0x00007fffe58a4791 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceComboBox::*)()>::call(void (QtInstanceComboBox::*)(), QtInstanceComboBox*, void**)::{lambda()#1}::operator()() const (this=0x7fffffff7e10) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127 #12 0x00007fffe58a46c9 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceComboBox::*)()>::call(void (QtInstanceComboBox::*)(), QtInstanceComboBox*, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceComboBox::*)()>::call(void (QtInstanceComboBox::*)(), QtInstanceComboBox*, void**)::{lambda()#1}&&) (args=0x7fffffff81f0, fn=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:65 #13 0x00007fffe58a45fb in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceComboBox::*)()>::call(void (QtInstanceComboBox::*)(), QtInstanceComboBox*, void**) (f=(void (QtInstanceComboBox::*)(QtInstanceComboBox * const)) 0x7fffe58988a0 <QtInstanceComboBox::signalChanged()>, o=0x555560788f60, arg=0x7fffffff81f0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:126 #14 0x00007fffe58a457d in QtPrivate::FunctionPointer<void (QtInstanceComboBox::*)()>::call<QtPrivate::List<>, void>(void (QtInstanceComboBox::*)(), QtInstanceComboBox*, void**) (f=(void (QtInstanceComboBox::*)(QtInstanceComboBox * const)) 0x7fffe58988a0 <QtInstanceComboBox::signalChanged()>, o=0x555560788f60, arg=0x7fffffff81f0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:174 #15 0x00007fffe58a44a6 in QtPrivate::QCallableObject<void (QtInstanceComboBox::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x5555607893d0, r=0x555560788f60, a=0x7fffffff81f0, ret=0x0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:545 #16 0x00007fffe46ea402 in QtPrivate::QSlotObjectBase::call (this=0x5555607893d0, r=0x555560788f60, a=0x7fffffff81f0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:461 #17 0x00007fffe491b872 in doActivate<false> (sender=0x55556077ac40, signal_index=13, argv=0x7fffffff81f0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4371 #18 0x00007fffe4911c63 in QMetaObject::activate (sender=0x55556077ac40, m=0x7fffe33803b8 <QComboBox::staticMetaObject>, local_signal_index=6, argv=0x7fffffff81f0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4431 #19 0x00007fffe28859eb in QMetaObject::activate<void, QString> (sender=0x55556077ac40, mo=0x7fffe33803b8 <QComboBox::staticMetaObject>, local_signal_index=6, ret=0x0, args=...) at qtbase/src/corelib/kernel/qobjectdefs.h:321 #20 0x00007fffe2a40f41 in QComboBox::currentTextChanged (this=0x55556077ac40, _t1=...) at qtbase/src/widgets/Widgets_autogen/include/moc_qcombobox.cpp:376 #21 0x00007fffe2a3e3ad in QComboBoxPrivate::updateCurrentText (this=0x55556077c400, text=...) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qcombobox.cpp:3210 #22 0x00007fffe2a3e68e in QComboBoxPrivate::emitCurrentIndexChanged (this=0x55556077c400, index=...) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qcombobox.cpp:1695 #23 0x00007fffe2a3973b in QComboBoxPrivate::setCurrentIndex (this=0x55556077c400, mi=...) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qcombobox.cpp:2480 #24 0x00007fffe2a38b6a in QComboBox::setCurrentIndex (this=0x55556077ac40, index=0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qcombobox.cpp:2427 #25 0x00007fffe2a3e550 in QComboBoxPrivate::rowsInserted (this=0x55556077c400, parent=..., start=0, end=0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qcombobox.cpp:1399 #26 0x00007fffe2a57482 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, int, int>, void, void (QComboBoxPrivate::*)(QModelIndex const&, int, int)>::call(void (QComboBoxPrivate::*)(QModelIndex const&, int, int), QComboBoxPrivate*, void**)::{lambda()#1}::operator()() const (this=0x7fffffff85c0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:127 #27 0x00007fffe2a573dd in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, int, int>, void, void (QComboBoxPrivate::*)(QModelIndex const&, int, int)>::call(void (QComboBoxPrivate::*)(QModelIndex const&, int, int), QComboBoxPrivate*, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, int, int>, void, void (QComboBoxPrivate::*)(QModelIndex const&, int, int)>::call(void (QComboBoxPrivate::*)(QModelIndex const&, int, int), QComboBoxPrivate*, void**)::{lambda()#1}&&) (args=0x7fffffff89c0, fn=...) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:65 #28 0x00007fffe2a57397 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, int, int>, void, void (QComboBoxPrivate::*)(QModelIndex const&, int, int)>::call (f=(void (QComboBoxPrivate::*)(QComboBoxPrivate * const, const QModelIndex &, int, int)) 0x7fffe2a3e3c0 <QComboBoxPrivate::rowsInserted(QModelIndex const&, int, int)>, o=0x55556077c400, arg=0x7fffffff89c0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:126 #29 0x00007fffe2a57301 in QtPrivate::FunctionPointer<void (QComboBoxPrivate::*)(QModelIndex const&, int, int)>::call<QtPrivate::List<QModelIndex const&, int, int>, void> (f=(void (QComboBoxPrivate::*)(QComboBoxPrivate * const, const QModelIndex &, int, int)) 0x7fffe2a3e3c0 <QComboBoxPrivate::rowsInserted(QModelIndex const&, int, int)>, o=0x55556077c400, arg=0x7fffffff89c0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:174 #30 0x00007fffe2a57230 in QtPrivate::QPrivateSlotObject<void (QComboBoxPrivate::*)(QModelIndex const&, int, int), QtPrivate::List<QModelIndex const&, int, int>, void>::impl (which=1, this_=0x55556077cd80, r=0x55556077ac40, a=0x7fffffff89c0, ret=0x0) at qtbase/src/corelib/kernel/qobject_p.h:272 #31 0x00007fffe46ea402 in QtPrivate::QSlotObjectBase::call (this=0x55556077cd80, r=0x55556077ac40, a=0x7fffffff89c0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:461 #32 0x00007fffe491b872 in doActivate<false> (sender=0x555560766e90, signal_index=13, argv=0x7fffffff89c0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4371 #33 0x00007fffe4911c63 in QMetaObject::activate (sender=0x555560766e90, m=0x7fffe527bdf0 <QAbstractItemModel::staticMetaObject>, local_signal_index=10, argv=0x7fffffff89c0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4431 #34 0x00007fffe4d77bf5 in QMetaObject::activate<void, QModelIndex, int, int, QAbstractItemModel::QPrivateSignal> (sender=0x555560766e90, mo=0x7fffe527bdf0 <QAbstractItemModel::staticMetaObject>, local_signal_index=10, ret=0x0, args=..., args=@0x7fffffff8a30: 0, args=@0x7fffffff8a2c: 0, args=...) at qtbase/src/corelib/kernel/qobjectdefs.h:321 #35 0x00007fffe4d6b8ca in QAbstractItemModel::rowsInserted (this=0x555560766e90, _t1=..., _t2=0, _t3=0, _t4=...) at qtbase/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:690 #36 0x00007fffe4d6b846 in QAbstractItemModel::endInsertRows (this=0x555560766e90) at /home/michi/development/git/qt5/qtbase/src/corelib/itemmodels/qabstractitemmodel.cpp:2922 #37 0x00007fffe3c56a98 in QStandardItemModelPrivate::rowsInserted (this=0x555560775680, parent=0x55556077c9b0, row=0, count=1) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:625 #38 0x00007fffe3c56d93 in QStandardItemPrivate::insertRows (this=0x55556077c010, row=0, count=1, items=...) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:497 #39 0x00007fffe3c58bdd in QStandardItem::insertRow (this=0x55556077c9b0, row=0, items=...) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:1601 #40 0x00007fffe3c5aa3f in QStandardItemModel::insertRow (this=0x555560766e90, row=0, items=...) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:2680 #41 0x00007fffe2a4b5ea in QStandardItemModel::insertRow (this=0x555560766e90, arow=0, aitem=0x55556078ad80) at qtbase/src/gui/itemmodels/qstandarditemmodel.h:401 #42 0x00007fffe2a419f7 in QComboBox::insertItem (this=0x55556077ac40, index=0, icon=..., text=..., userData=...) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qcombobox.cpp:2593 #43 0x00007fffe57c1ea7 in QComboBox::insertItem (this=0x55556077ac40, aindex=0, atext=..., auserData=...) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qcombobox.h:228 #44 0x00007fffe589ccd3 in QtInstanceComboBox::insert(int, rtl::OUString const&, rtl::OUString const*, rtl::OUString const*, VirtualDevice*)::$_0::operator()() const (this=0x55556078b1a0) at vcl/qt6/../qt5/QtInstanceComboBox.cxx:45 #45 0x00007fffe589cba5 in std::__invoke_impl<void, QtInstanceComboBox::insert(int, rtl::OUString const&, rtl::OUString const*, rtl::OUString const*, VirtualDevice*)::$_0&>(std::__invoke_other, QtInstanceComboBox::insert(int, rtl::OUString const&, rtl::OUString const*, rtl::OUString const*, VirtualDevice*)::$_0&) (__f=...) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:63 #46 0x00007fffe589cb65 in std::__invoke_r<void, QtInstanceComboBox::insert(int, rtl::OUString const&, rtl::OUString const*, rtl::OUString const*, VirtualDevice*)::$_0&>(QtInstanceComboBox::insert(int, rtl::OUString const&, rtl::OUString const*, rtl::OUString const*, VirtualDevice*)::$_0&) (__fn=...) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:113 #47 0x00007fffe589ca4d in std::_Function_handler<void(), QtInstanceComboBox::insert(int, rtl::OUString const&, rtl::OUString const*, rtl::OUString const*, VirtualDevice*)::$_0>::_M_invoke (__functor=...) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:292 #48 0x00007fffe584803e in std::function<void()>::operator() (this=0x7fffffff9210) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:593 #49 0x00007fffe583f17f in QtInstance::RunInMainThread (this=0x5555555f8540, func=...) at vcl/qt6/../qt5/QtInstance.cxx:206 #50 0x00007fffe5898fcf in QtInstanceComboBox::insert (this=0x555560788f60, nPos=0, rStr="Default - English (UK)", pId=0x7fffffff9558, pIconName=0x0, pImageSurface=0x0) at vcl/qt6/../qt5/QtInstanceComboBox.cxx:37 #51 0x00007ffff115d8fb in weld::ComboBox::insert (this=0x555560789108, pos=-1, rItem=...) at include/vcl/weld/ComboBox.hxx:89 #52 0x00007ffff115af02 in weld::ComboBox::append (this=0x555560789108, rItem=...) at include/vcl/weld/ComboBox.hxx:96 #53 0x00007ffff114d012 in SvxLanguageBox::SetLanguageList (this=0x555560788f10, nLangList=(SvxLanguageListFlags::ALL | SvxLanguageListFlags::ONLY_KNOWN), bHasLangNone=false, bLangNoneIsLangAll=false, bCheckSpellAvail=false, bDefaultLangExist=true, eDefaultLangType=..., nDefaultType=4) at /home/michi/development/git/libreoffice/svx/source/dialog/langbox.cxx:323 #54 0x00007fff8a6c405e in SvxNumberFormatTabPage::Init_Impl (this=0x5555606d5ea0) at /home/michi/development/git/libreoffice/cui/source/tabpages/numfmt.cxx:318 #55 0x00007fff8a6c2e3d in SvxNumberFormatTabPage::SvxNumberFormatTabPage (this=0x5555606d5ea0, pPage=0x555560718098, pController=0x55555a7234c0, rCoreAttrs=SfxItemSet of pool 0x55555b593c40 with parent 0x0 and Which ranges: [(17, 18), (40, 70), (1000, 1012), (4021, 4079), (10085, 10085), (10932, 10932), (11090, 11090)] = {...}) at /home/michi/development/git/libreoffice/cui/source/tabpages/numfmt.cxx:247 #56 0x00007fff8a6cc2ee in std::make_unique<SvxNumberFormatTabPage, weld::Container*&, weld::DialogController*&, SfxItemSet const&> (__args=@0x7fffffffa160: 0x555560718098, __args=@0x7fffffffa158: 0x55555a7234c0, __args=SfxItemSet of pool 0x55555b593c40 with parent 0x0 and Which ranges: [(17, 18), (40, 70), (1000, 1012), (4021, 4079), (10085, 10085), (10932, 10932), (11090, 11090)] = {...}) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/unique_ptr.h:1084 #57 0x00007fff8a6c46d9 in SvxNumberFormatTabPage::Create (pPage=0x555560718098, pController=0x55555a7234c0, rAttrSet=0x55555b5c41f0) at /home/michi/development/git/libreoffice/cui/source/tabpages/numfmt.cxx:326 #58 0x00007ffff399ed1d in SfxTabDialogController::CreatePages (this=0x55555a7234c0) at /home/michi/development/git/libreoffice/sfx2/source/dialog/tabdlg.cxx:946 #59 0x00007ffff399fd19 in SfxTabDialogController::Start_Impl (this=0x55555a7234c0) at /home/michi/development/git/libreoffice/sfx2/source/dialog/tabdlg.cxx:1034 #60 0x00007ffff39a011e in SfxTabDialogController::runAsync (rController=std::shared_ptr<SfxTabDialogController> (use count 3, weak count 1) = {...}, rFunc=...) at /home/michi/development/git/libreoffice/sfx2/source/dialog/tabdlg.cxx:1091 #61 0x00007fff8b0da287 in chart::ChartController::executeDlg_ObjectProperties_withUndoGuard (this=0x55555c98cd40, xUndoGuard=std::shared_ptr<chart::UndoGuard> (empty) = {...}, rObjectCID="CID/D=0:CS=0:Axis=0,0", bSuccessOnUnchanged=false) at /home/michi/development/git/libreoffice/chart2/source/controller/main/ChartController_Properties.cxx:778 #62 0x00007fff8b0d94fc in chart::ChartController::executeDlg_ObjectProperties (this=0x55555c98cd40, rSelectedObjectCID="CID/D=0:CS=0:Axis=0,0") at /home/michi/development/git/libreoffice/chart2/source/controller/main/ChartController_Properties.cxx:695 #63 0x00007fff8b0d7368 in chart::ChartController::executeDispatch_FormatObject (this=0x55555c98cd40, rDispatchCommand=u"FormatAxis") at /home/michi/development/git/libreoffice/chart2/source/controller/main/ChartController_Properties.cxx:651 #64 0x00007fff8b0a72a3 in chart::ChartController::dispatch (this=0x55555c98cd40, rURL=..., rArgs=empty uno::Sequence) at /home/michi/development/git/libreoffice/chart2/source/controller/main/ChartController.cxx:1226 #65 0x00007fff8b1512fc in chart::ControllerCommandDispatch::dispatch (this=0x55555b6ae620, URL=..., Arguments=empty uno::Sequence) at /home/michi/development/git/libreoffice/chart2/source/controller/main/ControllerCommandDispatch.cxx:933 #66 0x00007ffff4b03874 in framework::(anonymous namespace)::AsyncMenuExecute (data=0x55555b573710) at /home/michi/development/git/libreoffice/framework/source/uielement/menubarmanager.cxx:793 #67 0x00007fffedc46db1 in Link<void*, void>::Call (this=0x55555b574058, data=0x55555b573710) at include/tools/link.hxx:105 #68 0x00007fffedc426d1 in ImplHandleUserEvent (pSVEvent=0x55555b574050) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2314 #69 0x00007fffedc3f5ff in ImplWindowFrameProc (_pWindow=0x555556d919d0, nEvent=SalEvent::UserEvent, pEvent=0x55555b574050) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2871 #70 0x00007fffe582034c in SalFrame::CallCallback (this=0x555556949a50, nEvent=SalEvent::UserEvent, pEvent=0x55555b574050) at vcl/inc/salframe.hxx:310 #71 0x00007fffe58421df in QtInstance::ProcessEvent (this=0x5555555f8540, aEvent=...) at vcl/qt6/../qt5/QtInstance.cxx:600 #72 0x00007fffee22366d in SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const (this=0x7fffffffb990) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:119 #73 0x00007fffee22353b in SalUserEventList::DispatchUserEvents (this=0x5555555f85b0, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:120 #74 0x00007fffe583e921 in QtInstance::ImplYield (this=0x5555555f8540, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:496 #75 0x00007fffe5841da1 in QtInstance::DoYield (this=0x5555555f8540, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:518 #76 0x00007fffee2ee966 in InnerYield (i_bWait=true, i_bAllEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:389 #77 0x00007fffee2ee1ef in Application::Yield () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:502 #78 0x00007fffee2edfd0 in Application::Execute () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:364 #79 0x00007ffff7b228b5 in desktop::Desktop::Main (this=0x7fffffffd540) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1681 #80 0x00007fffee3179d6 in ImplSVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:230 #81 0x00007fffee3194f9 in SVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:248 #82 0x00007ffff7b9c86a in soffice_main () at /home/michi/development/git/libreoffice/desktop/source/app/sofficemain.cxx:122 #83 0x0000555555555a2d in sal_main () at /home/michi/development/git/libreoffice/desktop/source/app/main.c:51 #84 0x0000555555555a07 in main (argc=2, argv=0x7fffffffd748) at /home/michi/development/git/libreoffice/desktop/source/app/main.c:49 Change-Id: I5ecf1c0e0f60b5f215bb21894e98f93ce4516e07 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197468 Tested-by: Jenkins Reviewed-by: Michael Weghorn <[email protected]> diff --git a/include/vcl/weld/ComboBox.hxx b/include/vcl/weld/ComboBox.hxx index fbdc2b8d205d..adeef50a86e3 100644 --- a/include/vcl/weld/ComboBox.hxx +++ b/include/vcl/weld/ComboBox.hxx @@ -75,13 +75,15 @@ protected: Link<vcl::RenderContext&, Size> m_aGetSizeHdl; Size signal_custom_get_size(vcl::RenderContext& rDevice) { return m_aGetSizeHdl.Call(rDevice); } + virtual void do_insert(int pos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, VirtualDevice* pImageSurface) + = 0; virtual void do_set_active(int pos) = 0; virtual void do_set_active_id(const OUString& rStr) = 0; public: - virtual void insert(int pos, const OUString& rStr, const OUString* pId, - const OUString* pIconName, VirtualDevice* pImageSurface) - = 0; + void insert(int pos, const OUString& rStr, const OUString* pId, const OUString* pIconName, + VirtualDevice* pImageSurface); virtual void insert_vector(const std::vector<weld::ComboBoxEntry>& rItems, bool bKeepExisting) = 0; void insert(int pos, const weld::ComboBoxEntry& rItem) diff --git a/include/vcl/weld/EntryTreeView.hxx b/include/vcl/weld/EntryTreeView.hxx index 4383f239da5c..29341defe8b2 100644 --- a/include/vcl/weld/EntryTreeView.hxx +++ b/include/vcl/weld/EntryTreeView.hxx @@ -29,6 +29,12 @@ protected: std::unique_ptr<Entry> m_xEntry; std::unique_ptr<TreeView> m_xTreeView; + virtual void do_insert(int pos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, VirtualDevice* pImageSurface) override + { + m_xTreeView->insert(pos, rStr, pId, pIconName, pImageSurface); + } + public: EntryTreeView(std::unique_ptr<Entry> xEntry, std::unique_ptr<TreeView> xTreeView); @@ -43,12 +49,6 @@ public: m_xTreeView->thaw(); } - virtual void insert(int pos, const OUString& rStr, const OUString* pId, - const OUString* pIconName, VirtualDevice* pImageSurface) override - { - m_xTreeView->insert(pos, rStr, pId, pIconName, pImageSurface); - } - virtual int get_count() const override { return m_xTreeView->n_children(); } virtual void clear() override { m_xTreeView->clear(); } diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index f2d978c57e1b..a6ba49019389 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -551,11 +551,13 @@ public: class JSListBox final : public JSWidget<SalInstanceComboBoxWithoutEdit, ::ListBox> { +protected: + virtual void do_insert(int pos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, VirtualDevice* pImageSurface) override; + public: JSListBox(JSDialogSender* pSender, ::ListBox* pListBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership); - virtual void insert(int pos, const OUString& rStr, const OUString* pId, - const OUString* pIconName, VirtualDevice* pImageSurface) override; virtual void remove(int pos) override; virtual void do_set_active(int pos) override; }; @@ -563,11 +565,14 @@ public: class JSComboBox final : public JSWidget<SalInstanceComboBoxWithEdit, ::ComboBox>, public OnDemandRenderingHandler { +protected: + virtual void do_insert(int pos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, VirtualDevice* pImageSurface) override; + public: JSComboBox(JSDialogSender* pSender, ::ComboBox* pComboBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership); - virtual void insert(int pos, const OUString& rStr, const OUString* pId, - const OUString* pIconName, VirtualDevice* pImageSurface) override; + virtual void remove(int pos) override; void set_entry_text_without_notify(const OUString& rText); virtual void set_entry_text(const OUString& rText) override; diff --git a/vcl/inc/qt5/QtInstanceComboBox.hxx b/vcl/inc/qt5/QtInstanceComboBox.hxx index 8b6ed5bd541d..1286e4ddfd8c 100644 --- a/vcl/inc/qt5/QtInstanceComboBox.hxx +++ b/vcl/inc/qt5/QtInstanceComboBox.hxx @@ -22,11 +22,12 @@ class QtInstanceComboBox : public QtInstanceWidget, public virtual weld::ComboBo QComboBox* m_pComboBox; bool m_bSorted; + virtual void do_insert(int nPos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, VirtualDevice* pImageSurface) override; + public: QtInstanceComboBox(QComboBox* pComboBox); - virtual void insert(int nPos, const OUString& rStr, const OUString* pId, - const OUString* pIconName, VirtualDevice* pImageSurface) override; virtual void insert_vector(const std::vector<weld::ComboBoxEntry>& rItems, bool bKeepExisting) override; diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index 37af5460a424..be5c78a3f31a 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -929,6 +929,10 @@ class SalInstanceComboBoxWithoutEdit : public SalInstanceComboBox<ListBox> private: DECL_LINK(SelectHdl, ListBox&, void); +protected: + virtual void do_insert(int pos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, VirtualDevice* pImageSurface) override; + public: SalInstanceComboBoxWithoutEdit(ListBox* pListBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership); @@ -937,9 +941,6 @@ public: virtual void remove(int pos) override; - virtual void insert(int pos, const OUString& rStr, const OUString* pId, - const OUString* pIconName, VirtualDevice* pImageSurface) override; - virtual void insert_separator(int pos, const OUString& /*rId*/) override; virtual bool has_entry() const override; @@ -1001,6 +1002,10 @@ private: WeldTextFilter m_aTextFilter; bool m_bInSelect; +protected: + virtual void do_insert(int pos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, VirtualDevice* pImageSurface) override; + public: SalInstanceComboBoxWithEdit(::ComboBox* pComboBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership); @@ -1015,9 +1020,6 @@ public: virtual void remove(int pos) override; - virtual void insert(int pos, const OUString& rStr, const OUString* pId, - const OUString* pIconName, VirtualDevice* pImageSurface) override; - virtual void insert_separator(int pos, const OUString& /*rId*/) override; virtual void set_entry_text(const OUString& rText) override; diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index 772ab1b28e69..12be503b6834 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -1247,10 +1247,10 @@ JSListBox::JSListBox(JSDialogSender* pSender, ::ListBox* pListBox, SalInstanceBu { } -void JSListBox::insert(int pos, const OUString& rStr, const OUString* pId, - const OUString* pIconName, VirtualDevice* pImageSurface) +void JSListBox::do_insert(int pos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, VirtualDevice* pImageSurface) { - SalInstanceComboBoxWithoutEdit::insert(pos, rStr, pId, pIconName, pImageSurface); + SalInstanceComboBoxWithoutEdit::do_insert(pos, rStr, pId, pIconName, pImageSurface); sendUpdate(); } @@ -1273,10 +1273,10 @@ JSComboBox::JSComboBox(JSDialogSender* pSender, ::ComboBox* pComboBox, SalInstan { } -void JSComboBox::insert(int pos, const OUString& rStr, const OUString* pId, - const OUString* pIconName, VirtualDevice* pImageSurface) +void JSComboBox::do_insert(int pos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, VirtualDevice* pImageSurface) { - SalInstanceComboBoxWithEdit::insert(pos, rStr, pId, pIconName, pImageSurface); + SalInstanceComboBoxWithEdit::do_insert(pos, rStr, pId, pIconName, pImageSurface); sendUpdate(); } diff --git a/vcl/qt5/QtInstanceComboBox.cxx b/vcl/qt5/QtInstanceComboBox.cxx index 724e757839f5..335079e9d681 100644 --- a/vcl/qt5/QtInstanceComboBox.cxx +++ b/vcl/qt5/QtInstanceComboBox.cxx @@ -30,8 +30,8 @@ QtInstanceComboBox::QtInstanceComboBox(QComboBox* pComboBox) &QtInstanceComboBox::signalChanged); } -void QtInstanceComboBox::insert(int nPos, const OUString& rStr, const OUString* pId, - const OUString* pIconName, VirtualDevice* pImageSurface) +void QtInstanceComboBox::do_insert(int nPos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, VirtualDevice* pImageSurface) { SolarMutexGuard g; GetQtInstance().RunInMainThread([&] { diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 30b33ca1d1f7..3d0458101750 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -6051,8 +6051,9 @@ OUString SalInstanceComboBoxWithoutEdit::get_active_text() const void SalInstanceComboBoxWithoutEdit::remove(int pos) { m_xComboBox->RemoveEntry(pos); } -void SalInstanceComboBoxWithoutEdit::insert(int pos, const OUString& rStr, const OUString* pId, - const OUString* pIconName, VirtualDevice* pImageSurface) +void SalInstanceComboBoxWithoutEdit::do_insert(int pos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, + VirtualDevice* pImageSurface) { auto nInsertPos = pos == -1 ? COMBOBOX_APPEND : pos; sal_Int32 nInsertedAt; @@ -6206,8 +6207,8 @@ OUString SalInstanceComboBoxWithEdit::get_active_text() const { return m_xComboB void SalInstanceComboBoxWithEdit::remove(int pos) { m_xComboBox->RemoveEntryAt(pos); } -void SalInstanceComboBoxWithEdit::insert(int pos, const OUString& rStr, const OUString* pId, - const OUString* pIconName, VirtualDevice* pImageSurface) +void SalInstanceComboBoxWithEdit::do_insert(int pos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, VirtualDevice* pImageSurface) { auto nInsertPos = pos == -1 ? COMBOBOX_APPEND : pos; sal_Int32 nInsertedAt; diff --git a/vcl/source/weld/ComboBox.cxx b/vcl/source/weld/ComboBox.cxx index 00304e52cf4f..3f6149776ea6 100644 --- a/vcl/source/weld/ComboBox.cxx +++ b/vcl/source/weld/ComboBox.cxx @@ -11,6 +11,14 @@ namespace weld { +void weld::ComboBox::insert(int pos, const OUString& rStr, const OUString* pId, + const OUString* pIconName, VirtualDevice* pImageSurface) +{ + disable_notify_events(); + do_insert(pos, rStr, pId, pIconName, pImageSurface); + enable_notify_events(); +} + void weld::ComboBox::set_active(int pos) { disable_notify_events(); diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index ea044f8c2d38..77108fb7e20d 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -20152,7 +20152,7 @@ public: remove_including_mru(pos); } - virtual void insert(int pos, const OUString& rText, const OUString* pId, const OUString* pIconName, VirtualDevice* pImageSurface) override + virtual void do_insert(int pos, const OUString& rText, const OUString* pId, const OUString* pIconName, VirtualDevice* pImageSurface) override { insert_including_mru(include_mru(pos), rText, pId, pIconName, pImageSurface); } @@ -22104,7 +22104,7 @@ public: remove_including_mru(pos); } - virtual void insert(int pos, const OUString& rText, const OUString* pId, const OUString* pIconName, VirtualDevice* pImageSurface) override + virtual void do_insert(int pos, const OUString& rText, const OUString* pId, const OUString* pIconName, VirtualDevice* pImageSurface) override { insert_including_mru(include_mru(pos), rText, pId, pIconName, pImageSurface); } commit 1ca26c761a8e2f4e87f39e9af6bcbe3dfb7e3c4d Author: Michael Weghorn <[email protected]> AuthorDate: Fri Jan 16 16:30:33 2026 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Sat Jan 17 06:39:06 2026 +0100 tdf#130857 qt weld: Support chart "Insert Titles" dialog This means that native Qt widgets are used for that dialog now when using the qt5 or qt6 VCL plugin and starting LO with environment variable SAL_VCL_QT_USE_WELDED_WIDGETS=1 set. The dialog can be triggered like this: * start Writer * "Insert" -> "Chart" * right-click on the background of the chart and select the "Insert Titles" context menu entry Change-Id: I6c8f3262977f01f99e3862cac726ed8e7c399cad Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197464 Tested-by: Jenkins Reviewed-by: Michael Weghorn <[email protected]> diff --git a/vcl/qt5/QtInstanceBuilder.cxx b/vcl/qt5/QtInstanceBuilder.cxx index ade726cd52c1..c6c222aa5a68 100644 --- a/vcl/qt5/QtInstanceBuilder.cxx +++ b/vcl/qt5/QtInstanceBuilder.cxx @@ -163,6 +163,7 @@ bool QtInstanceBuilder::IsUIFileSupported(const OUString& rUIFile, const weld::W u"modules/scalc/ui/ztestdialog.ui"_ustr, u"modules/schart/ui/charttypedialog.ui"_ustr, u"modules/schart/ui/insertaxisdlg.ui"_ustr, + u"modules/schart/ui/inserttitledlg.ui"_ustr, u"modules/sdraw/ui/dlgsnap.ui"_ustr, u"modules/sdraw/ui/insertlayer.ui"_ustr, u"modules/simpress/ui/customslideshows.ui"_ustr,
