Commit Graph
6898 Commits
Author SHA1 Message Date
Dan Williams e4e60f2769 vcl: standardize Reset dialog button response code
Qt plugin automatically orders buttons for each platform based on
the button's role, which we derive from the Gtk .ui file's
action-widget response code. But to do that conversion from response
code to Qt button role, we need a standard response.

Without a standard response, the button has no role, and gets ordered
to the right of OK/Cancel buttons on Mac. With the correct role, it
is correctly placed far-left along with the Help button.

Change-Id: I16d3126d4999649e7aa6e72ec5e7b1a25f48c2a3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210223
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Reviewed-by: Dan Williams <dcbw@libreoffice.org>
Tested-by: Jenkins
2026-09-08 13:42:17 +02:00
Michael Weghorn d8a676c2ed a11y: Drop misleading mention of XServiceInfo in AccessibleBrowseBoxTableBase
AccessibleBrowseBoxTableBase does not implement the
XServiceInfo interface. The corresponding comment/doc
seems to have been wrong ever since

    commit e7a5ee68de
    Author: Jens-Heiner Rechtien <hr@openoffice.org>
    Date:   Wed Jun 27 14:18:49 2007 +0000

        INTEGRATION: CWS a11ysep (1.1.2); FILE ADDED
        2005/09/28 11:39:30 fs 1.1.2.2: manual resync (files have been moved herein from another location): licence change
        2005/03/07 08:27:24 fs 1.1.2.1: #i44293# moved implementations herein from svtools module

, so drop it.

Presumably, it was copy pasted from elsewhere, as
the same comments were seen elsewhere (where XServiceInfo
was actually implemented, however) until it was cleaned up
recently, e.g. in

    Change-Id: Iff25d87496bd35c2d5894ee21a104ede0dbd9e13
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Wed Sep 2 10:06:04 2026 +0200

        a11y: Stop declaring AccessibleContext support in AccessibleBrowseBoxBase

Change-Id: I4ab8bf5daee69490288a83cdbb3d6400d7bbafaa
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210408
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
2026-09-03 09:22:41 +02:00
Michael Weghorn 939a77b14c [API CHANGE] a11y: Drop com.sun.star.awt.AccessibleWindow
Drop the unpublished service
"com.sun.star.awt.AccessibleWindow"
because it's unused. (The IDL file only documents some
internal implementation details of the a11y classes
implementing the service.)

Change-Id: I958aeb6c6baaa48e2e02ab170b17db5c3510379b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210406
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-09-03 09:22:26 +02:00
Michael Weghorn f4b5869832 a11y: Stop declaring AccessibleContext support in AccessibleBrowseBoxBase
The com.sun.star.accessibility.AccessibleContext UNO service
is unnecessary and not really used for implementing a11y support,
apart from some a11y implementations declaring support for it.
What is relevant is the com.sun.star.accessibility.XAccessibleContext
interface instead.

Stop declaring support for the com.sun.star.accessibility.AccessibleContext
service in AccessibleBrowseBoxBase (and drop related
XServiceInfo::getImplementationName overrides in subclasses),
in preparation of dropping the service altogether in an upcoming
commit.

Change-Id: Id6072c6ca066c9eda8e682ccfd6240e74d7307ab
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210401
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-09-03 09:20:46 +02:00
Andrea Gelmini bfb4b0059f Fix typos
Change-Id: I570d70b3307a7a65dacbc4177ef004763f1e8b9b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210447
Tested-by: Jenkins
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2026-09-03 08:51:42 +02:00
Andrea Gelmini c664918e40 Fix typos
Change-Id: I4209ef12af9e6cecb97e290a35a9de4d5f738ad5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210164
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
Tested-by: Jenkins
2026-08-29 16:20:13 +02:00
Michael Weghorn ef7971f80c Use QueryDialog directly instead of via cui abstraction
Now that previous commit

    Change-Id: I57bdade32c21c7ab40c5a4c90bd86e8dea5d2fad
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Thu Aug 27 19:00:42 2026 +0200

        Move QueryDialog to svtools

moved QueryDialog to svtools, use it directly instead
of via the extra AbstractQueryDialog abstraction.

This simplifies the code and rules out one potential cause
for the crash seen in crash reports like [1] (see backtrace below).

From looking at the backtrace and code, I don't currently see anything
that looks problematic to me and could result in a null dialog or button
in a proper installation. Simplifying this seems a good idea anyway, and
rules out a null dialog.
Related discussion: [2]

The dialog can e.g. be triggered like this:

* start Writer
* Ctrl+Shift+S for "Save As"
* select "Text (.txt)" for the file type
* press OK

(Resetting the profile ensures the dialog gets shown
in case the "Don't show again" checkbox has been ticked
previously.)

Backtrace from [1]:

    0 	mergedlo.dll 	static void `anonymous namespace'::AbstractQueryDialog_Impl::SetYesLabel(const class rtl::OUString & const) 	cui/source/factory/dlgfact.cxx:1562
    1 	mergedlo.dll 	static void `anonymous namespace'::AbstractQueryDialog_Impl::SetYesLabel(const class rtl::OUString & const) 	cui/source/factory/dlgfact.cxx:1562
    2 	mergedlo.dll 	ConfirmationDlg::Query<officecfg::Office::Common::Save::Document::WarnAlienFormat>(weld::Window *,rtl::OUString const &,rtl::OUString const &,rtl::OUString const &,rtl::OUString const &,rtl::OUString const &) 	include/svtools/confirmationdlg.hxx:32
    3 	mergedlo.dll 	ConfirmationDlg::Query<officecfg::Office::Common::Save::Document::WarnAlienFormat>(weld::Window *,rtl::OUString const &,rtl::OUString const &,rtl::OUString const &,rtl::OUString const &,rtl::OUString const &) 	include/svtools/confirmationdlg.hxx:24
    4 	mergedlo.dll 	SfxStoringHelper::WarnUnacceptableFormat(com::sun::star::uno::Reference<com::sun::star::frame::XModel2> const &,std::basic_string_view<char16_t,std::char_traits<char16_t> >,std::basic_string_view<char16_t,std::char_traits<char16_t> >,rtl::OUString const &,bool) 	sfx2/source/doc/guisaveas.cxx:2114
    5 	mergedlo.dll 	ModelData_Impl::CheckFilter(rtl::OUString const &) 	sfx2/source/doc/guisaveas.cxx:861
    6 	mergedlo.dll 	com::sun::star::uno::cppu_detail_getUnoType(com::sun::star::uno::RuntimeException const *) 	E:/build/workdir/UnoApiHeadersTarget/udkapi/normal/com/sun/star/uno/RuntimeException.hpp:89
    7 	ntdll.dll 	0x3c3a0
    8 	mergedlo.dll 	ModelData_Impl::CheckFilter(rtl::OUString const &) 	sfx2/source/doc/guisaveas.cxx:781
    9 	mergedlo.dll 	SfxStoringHelper::FinishGUIStoreModel(std::_List_const_iterator<std::_List_val<std::_List_simple_types<std::pair<comphelper::OUStringAndHashCode const ,com::sun::star::uno::Any> > > > &,ModelData_Impl &,bool,short,com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const &,bool,bool,bool,std::basic_string_view<char16_t,std::char_traits<char16_t> >,std::basic_string_view<char16_t,std::char_traits<char16_t> >,com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> &,rtl::OUString,SignatureState) 	sfx2/source/doc/guisaveas.cxx:1680
    10 	cppu3.dll 	typelib_typedescriptionreference_release 	cppu/source/typelib/typelib.cxx:2145
    11 	cppu3.dll 	cppu::_destructData(void *,_typelib_TypeDescriptionReference *,_typelib_TypeDescription *,void (*)(void *)) 	cppu/source/uno/destr.hxx:312
    12 	cppu3.dll 	cppu::_destructData(void *,_typelib_TypeDescriptionReference *,_typelib_TypeDescription *,void (*)(void *)) 	cppu/source/uno/destr.hxx:308
    13 	ucrtbase.dll 	0x1364b
    14 	sal3.dll 	rtl_uString_assign 	sal/rtl/ustring.cxx:1169
    15 	sal3.dll 	rtl_uString_release 	sal/rtl/ustring.cxx:1118
    16 	mergedlo.dll 	SfxStoringHelper::FinishGUIStoreModel(std::_List_const_iterator<std::_List_val<std::_List_simple_types<std::pair<comphelper::OUStringAndHashCode const ,com::sun::star::uno::Any> > > > &,ModelData_Impl &,bool,short,com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const &,bool,bool,bool,std::basic_string_view<char16_t,std::char_traits<char16_t> >,std::basic_string_view<char16_t,std::char_traits<char16_t> >,com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> &,rtl::OUString,SignatureState) 	sfx2/source/doc/guisaveas.cxx:1620
    17 	mergedlo.dll 	SfxStoringHelper::GUIStoreModel(com::sun::star::uno::Reference<com::sun::star::frame::XModel2> const &,std::basic_string_view<char16_t,std::char_traits<char16_t> >,com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> &,bool,SignatureState,SignatureState,bool) 	sfx2/source/doc/guisaveas.cxx:1605
    18 	mergedlo.dll 	SvtSecurityOptions::SetTrustedAuthors(std::vector<SvtSecurityOptions::Certificate,std::allocator<SvtSecurityOptions::Certificate> > const &) 	unotools/source/config/securityoptions.cxx:283
    19 	ntdll.dll 	0x3ccea
    20 	ucrtbase.dll 	0x1f038
    21 	ntdll.dll 	0x3b041
    22 	cppu3.dll 	uno_type_sequence_construct 	cppu/source/uno/sequence.cxx:668
    23 	mergedlo.dll 	SfxObjectShell::ExecFile_Impl(SfxRequest &) 	sfx2/source/doc/objserv.cxx:1150
    24 	mergedlo.dll 	static lo_initialize$catch$194() 	desktop/source/lib/init.cxx:8401
    25 	mergedlo.dll 	static lo_initialize$catch$194() 	desktop/source/lib/init.cxx:8401
    26 	cppu3.dll 	cppu::icopyConstructSequence(_sal_Sequence *,_typelib_TypeDescriptionReference *,void (*)(void *),_uno_Mapping *) 	cppu/source/uno/copy.hxx:398
    27 	cppu3.dll 	cppu::_copyConstructAnyFromData(_uno_Any *,void *,_typelib_TypeDescriptionReference *,_typelib_TypeDescription *,void (*)(void *),_uno_Mapping *) 	cppu/source/uno/copy.hxx:231
    28 	cppu3.dll 	cppu::_copyConstructAny(_uno_Any *,void *,_typelib_TypeDescriptionReference *,_typelib_TypeDescription *,void (*)(void *),_uno_Mapping *) 	cppu/source/uno/copy.hxx:284
    29 	cppu3.dll 	uno_type_any_assign 	cppu/source/uno/any.cxx:38
    30 	salhelper3MSC.dll 	salhelper::SimpleReferenceObject::release() 	include/salhelper/simplereferenceobject.hxx:80
    31 	mergedlo.dll 	configmgr::Access::getByNameFast(rtl::OUString const &,com::sun::star::uno::Any &) 	configmgr/source/access.cxx:393
    32 	ntdll.dll 	0x3b041
    33 	ucrtbase.dll 	0x1364b
    34 	cppu3.dll 	cppu::_type_equals(_typelib_TypeDescriptionReference const *,_typelib_TypeDescriptionReference const *) 	cppu/source/uno/prim.hxx:144
    35 	cppu3.dll 	cppu::_assignData(void *,_typelib_TypeDescriptionReference *,_typelib_TypeDescription *,void *,_typelib_TypeDescriptionReference *,_typelib_TypeDescription *,void * (*)(void *,_typelib_TypeDescriptionReference *),void (*)(void *),void (*)(void *)) 	cppu/source/uno/assign.hxx:387
    36 	sal3.dll 	rtl_uString_release 	sal/rtl/ustring.cxx:1118
    37 	cppu3.dll 	typelib_typedescription_release 	cppu/source/typelib/typelib.cxx:1313
    38 	cppu3.dll 	typelib_typedescriptionreference_release 	cppu/source/typelib/typelib.cxx:2145
    39 	ntdll.dll 	0x3d6da
    40 	ntdll.dll 	0x3ccea
    41 	mergedlo.dll 	FontMetricData::ShouldNotUseUnderlineMetrics() 	vcl/source/font/fontmetric.cxx:186
    42 	mergedlo.dll 	OutputDevice::InitFont() 	vcl/source/outdev/font.cxx:668
    43 	ntdll.dll 	0x3c3a0
    44 	i18nlangtag.dll 	LanguageTag::LanguageTag(LanguageTag const &) 	include/i18nlangtag/languagetag.hxx:142
    45 	mergedlo.dll 	o3tl::cow_wrapper<ImplFont,o3tl::RefCountingPolicy_t<unsigned __int64> >::make_unique() 	include/o3tl/cow_wrapper.hxx:298
    46 	ucrtbase.dll 	0x276aa
    47 	mergedlo.dll 	vcl::Font::SetFontSize(Size const &) 	vcl/source/font/font.cxx:156
    48 	ucrtbase.dll 	0x1364b
    49 	sal3.dll 	rtl_uString_release 	sal/rtl/ustring.cxx:1118
    50 	mergedlo.dll 	o3tl::cow_wrapper<ImplFont,o3tl::RefCountingPolicy_t<unsigned __int64> >::release() 	include/o3tl/cow_wrapper.hxx:201
    51 	mergedlo.dll 	o3tl::cow_wrapper<ImplFont,o3tl::RefCountingPolicy_t<unsigned __int64> >::release() 	include/o3tl/cow_wrapper.hxx:198
    52 	mergedlo.dll 	ImpEditEngine::RecalcFormatterFontMetrics(FormatterFontMetric &,SvxFont &) 	editeng/source/editeng/impedit3.cxx:3182
    53 	ucrtbase.dll 	0x272e4
    54 	mergedlo.dll 	SfxItemSet::Get(unsigned short,bool) 	svl/source/items/itemset.cxx:965
    55 	ucrtbase.dll 	0x27691
    56 	mergedlo.dll 	ImpEditEngine::GetJustification(long) 	editeng/source/editeng/impedit2.cxx:2077
    57 	mergedlo.dll 	o3tl::cow_wrapper<ImplFont,o3tl::RefCountingPolicy_t<unsigned __int64> >::release() 	include/o3tl/cow_wrapper.hxx:198
    58 	mergedlo.dll 	ImpEditEngine::CreateAndInsertEmptyLine(ParaPortion &) 	editeng/source/editeng/impedit3.cxx:1994
    59 	mergedlo.dll 	SfxItemPool::GetUserOrPoolDefaultItem(unsigned short) 	svl/source/items/itempool.cxx:723
    60 	mergedlo.dll 	SfxItemSet::Get(unsigned short,bool) 	svl/source/items/itemset.cxx:965
    61 	mergedlo.dll 	ParaPortionList::GetPos(ParaPortion const *) 	editeng/source/editeng/editdoc.cxx:496
    62 	mergedlo.dll 	ImpEditEngine::CalcHeight(ParaPortion &) 	editeng/source/editeng/impedit2.cxx:4791
    63 	mergedlo.dll 	ImpEditEngine::FinishCreateLines(ParaPortion &) 	editeng/source/editeng/impedit3.cxx:2003
    64 	mergedlo.dll 	ImpEditEngine::FinishCreateLines(ParaPortion &) 	editeng/source/editeng/impedit3.cxx:1999
    65 	mergedlo.dll 	ImpEditEngine::CreateLines(long,unsigned long) 	editeng/source/editeng/impedit3.cxx:670
    66 	mergedlo.dll 	static lo_initialize$catch$194() 	desktop/source/lib/init.cxx:8401
    67 	mergedlo.dll 	static lo_destroy$dtor$0()
    68 	mergedlo.dll 	boost::locale::gnu_gettext::mo_file::value(unsigned int) 	E:/build/workdir/UnpackedTarball/boost/libs/locale/src/shared/message.cpp:196
    69 	mergedlo.dll 	boost::locale::gnu_gettext::mo_file::find(char const *,char const *) 	E:/build/workdir/UnpackedTarball/boost/libs/locale/src/shared/message.cpp:145
    70 	ucrtbase.dll 	0x11966
    71 	sal3.dll 	rtl_uString_ImplAlloc(long) 	sal/rtl/ustring.cxx:1109
    72 	mergedlo.dll 	static lo_initialize$catch$194() 	desktop/source/lib/init.cxx:8401
    73 	ntdll.dll 	0x3d6da
    74 	ntdll.dll 	0x3d6da
    75 	mergedlo.dll 	SfxItemPool::GetUserOrPoolDefaultItem(unsigned short) 	svl/source/items/itempool.cxx:723
    76 	mergedlo.dll 	SfxItemSet::Get(unsigned short,bool) 	svl/source/items/itemset.cxx:965
    77 	mergedlo.dll 	SfxItemSet::Get(unsigned short,bool) 	svl/source/items/itemset.cxx:935
    78 	mergedlo.dll 	ImpEditEngine::CalcVertLineSpacing(Point &) 	editeng/source/editeng/impedit3.cxx:4436
    79 	mergedlo.dll 	SfxItemPool::GetUserOrPoolDefaultItem(unsigned short) 	svl/source/items/itempool.cxx:723
    80 	mergedlo.dll 	SfxItemSet::Get(unsigned short,bool) 	svl/source/items/itemset.cxx:965
    81 	mergedlo.dll 	SfxItemSet::Get(unsigned short,bool) 	svl/source/items/itemset.cxx:935
    82 	mergedlo.dll 	ImpEditEngine::IterateLineAreas(std::function<ImpEditEngine::CallbackResult > const &,ImpEditEngine::IterFlag) 	editeng/source/editeng/impedit2.cxx:3417
    83 	mergedlo.dll 	_std_minmax_8i 	D:/a/_work/1/s/src/vctools/crt/github/stl/src/vector_algorithms.cpp:2451
    84 	mergedlo.dll 	SfxItemSet::Get(unsigned short,bool) 	svl/source/items/itemset.cxx:965
    85 	mergedlo.dll 	RectangleTemplateBase::Union(RectangleTemplateBase const &) 	tools/source/generic/gen.cxx:88
    86 	mergedlo.dll 	ImpEditEngine::CalcVertLineSpacing(Point &) 	editeng/source/editeng/impedit3.cxx:4436
    87 	mergedlo.dll 	SfxItemSet::Get(unsigned short,bool) 	svl/source/items/itemset.cxx:965
    88 	ntdll.dll 	0x3c3a0
    89 	mergedlo.dll 	ImpEditEngine::IterateLineAreas(std::function<ImpEditEngine::CallbackResult > const &,ImpEditEngine::IterFlag) 	editeng/source/editeng/impedit2.cxx:3417
    90 	ntdll.dll 	0x3b041
    91 	ucrtbase.dll 	0x1364b
    92 	mergedlo.dll 	std::allocator<long>::deallocate(long * const,unsigned __int64) 	C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.44.35207/include/xmemory:985
    93 	mergedlo.dll 	std::allocator<long>::deallocate(long * const,unsigned __int64) 	C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.44.35207/include/xmemory:982
    94 	mergedlo.dll 	ImpEditEngine::FormatDoc() 	editeng/source/editeng/impedit3.cxx:412
    95 	mergedlo.dll 	ImpEditEngine::CallStatusHdl() 	editeng/source/editeng/impedit3.cxx:4368
    96 	mergedlo.dll 	ImpEditEngine::UpdateViews(EditView *) 	editeng/source/editeng/impedit3.cxx:188
    97 	mergedlo.dll 	ImpEditEngine::UpdateViews(EditView *) 	editeng/source/editeng/impedit3.cxx:155
    98 	mergedlo.dll 	ImpEditEngine::SetUpdateLayout(bool,EditView *,bool) 	editeng/source/editeng/impedit3.cxx:4247
    99 	mergedlo.dll 	EditEngine::SetUpdateLayout(bool,bool) 	editeng/source/editeng/editeng.cxx:800
    100 	sal3.dll 	rtl_uString_release 	sal/rtl/ustring.cxx:1118
    101 	sclo.dll 	ScInputHandler::EnterHandler2(ScEnterMode,bool,rtl::OUString,rtl::OUString const &) 	sc/source/ui/app/inputhdl.cxx:3646
    102 	mergedlo.dll 	static lo_initialize$catch$194() 	desktop/source/lib/init.cxx:8401
    103 	mergedlo.dll 	static lo_initialize$catch$194() 	desktop/source/lib/init.cxx:8401
    104 	mergedlo.dll 	static lo_initialize$catch$194() 	desktop/source/lib/init.cxx:8401
    105 	ucrtbase.dll 	0x11966
    106 	ntdll.dll 	0x633f2
    107 	ntdll.dll 	0x3c3a0
    108 	ucrtbase.dll 	0x1364b
    109 	mergedlo.dll 	static lo_initialize$catch$194() 	desktop/source/lib/init.cxx:8401
    110 	mergedlo.dll 	ContentNode::GetExpandedText(long,long) 	editeng/source/editeng/ContentNode.cxx:472
    111 	sal3.dll 	rtl_uString_release 	sal/rtl/ustring.cxx:1118
    112 	mergedlo.dll 	EditEngine::GetText(long) 	editeng/source/editeng/editeng.cxx:946
    113 	ntdll.dll 	0x3b041
    114 	mergedlo.dll 	static lo_initialize$catch$194() 	desktop/source/lib/init.cxx:8401
    115 	ucrtbase.dll 	0x1364b
    116 	sclo.dll 	ScInputHandler::EnterHandler2(ScEnterMode,bool,rtl::OUString,rtl::OUString const &) 	sc/source/ui/app/inputhdl.cxx:3333
    117 	sal3.dll 	rtl_uString_release 	sal/rtl/ustring.cxx:1119
    118 	sal3.dll 	rtl_uString_release 	sal/rtl/ustring.cxx:1118
    119 	sclo.dll 	ScInputHandler::EnterHandler(ScEnterMode,bool) 	sc/source/ui/app/inputhdl.cxx:3329
    120 	mergedlo.dll 	static void xmloff::token::`dynamic initializer for 'aTokenList''() 	xmloff/source/core/xmltoken.cxx:3474
    121 	ntdll.dll 	0x53850
    122 	KERNELBASE.dll 	0x2931b
    123 	VCRUNTIME140.dll 	0x48a9
    124 	ntdll.dll 	0x53850
    125 	ucrtbase.dll 	0x1f038
    126 	mergedlo.dll 	SfxInterface::GetSlot(unsigned short) 	sfx2/source/control/objface.cxx:163
    127 	mergedlo.dll 	SfxInterface::GetSlot(unsigned short) 	sfx2/source/control/objface.cxx:157
    128 	mergedlo.dll 	SfxObjectShell::ExecFile_Impl(SfxRequest &) 	sfx2/source/doc/objserv.cxx:557
    129 	mergedlo.dll 	SfxShell::ExecuteSlot(SfxRequest &,SfxInterface const *) 	sfx2/source/control/shell.cxx:475
    130 	sclo.dll 	SfxStubScTabViewShellExecuteSave(SfxShell *,SfxRequest &) 	E:/build/workdir/SdiTarget/sc/sdi/scslots.hxx:1584
    131 	sclo.dll 	SfxStubScTabViewShellExecuteSave(SfxShell *,SfxRequest &) 	E:/build/workdir/SdiTarget/sc/sdi/scslots.hxx:1584
    132 	mergedlo.dll 	SfxDispatcher::Call_Impl(SfxShell &,SfxSlot const &,SfxRequest &,bool) 	sfx2/source/control/dispatch.cxx:258
    133 	mergedlo.dll 	SfxDispatcher::Call_Impl(SfxShell &,SfxSlot const &,SfxRequest &,bool) 	sfx2/source/control/dispatch.cxx:219
    134 	mergedlo.dll 	SfxBindings::Execute_Impl(SfxRequest &,SfxSlot const *,SfxShell &) 	sfx2/source/control/bindings.cxx:1051
    135 	mergedlo.dll 	operator new(unsigned __int64) 	D:/a/_work/1/s/src/vctools/crt/vcstartup/src/heap/new_scalar.cpp:36
    136 	mergedlo.dll 	cppu::PartialWeakComponentImplHelper<com::sun::star::lang::XServiceInfo,com::sun::star::frame::XFrame2,com::sun::star::awt::XWindowListener,com::sun::star::awt::XTopWindowListener,com::sun::star::awt::XFocusListener,com::sun::star::document::XActionLockable,com::sun::star::util::XCloseable,com::sun::star::frame::XComponentLoader,com::sun::star::frame::XTitle,com::sun::star::frame::XTitleChangeBroadcaster,com::sun::star::beans::XPropertySet,com::sun::star::beans::XPropertySetInfo>::acquire() 	include/cppuhelper/compbase.hxx:83
    137 	mergedlo.dll 	SfxUnoFrameItem::SfxUnoFrameItem(SfxUnoFrameItem const &)
    138 	mergedlo.dll 	struct std::pair<std::_List_node<std::pair<unsigned short const ,SfxPoolItem const *>,void *> *,bool> std::_Hash<std::_Umap_traits<unsigned short,SfxPoolItem const *,std::_Uhash_compare<unsigned short,std::hash<unsigned short>,std::equal_to<unsigned short> >,std::allocator<std::pair<unsigned short const ,SfxPoolItem const *> >,0> >::_Try_emplace<unsigned short const &>(const unsigned short & const) 	C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.44.35207/include/xhash:707
    139 	mergedlo.dll 	SfxUnoFrameItem::SfxUnoFrameItem(SfxUnoFrameItem const &)
    140 	mergedlo.dll 	SfxItemSet::SfxItemSet(SfxItemSet const &) 	svl/source/items/itemset.cxx:270
    141 	mergedlo.dll 	SfxBindings::Execute_Impl(SfxRequest &,SfxSlot const *,SfxShell &) 	sfx2/source/control/bindings.cxx:965
    142 	mergedlo.dll 	SfxDispatchController_Impl::dispatch(com::sun::star::util::URL const &,com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const &,com::sun::star::uno::Reference<com::sun::star::frame::XDispatchResultListener> const &) 	sfx2/source/control/unoctitm.cxx:737
    143 	cppu3.dll 	cppu::_copyConstructAnyFromData(_uno_Any *,void *,_typelib_TypeDescriptionReference *,_typelib_TypeDescription *,void (*)(void *),_uno_Mapping *) 	cppu/source/uno/copy.hxx:250
    144 	cppu3.dll 	cppu::_assignData(void *,_typelib_TypeDescriptionReference *,_typelib_TypeDescription *,void *,_typelib_TypeDescriptionReference *,_typelib_TypeDescription *,void * (*)(void *,_typelib_TypeDescriptionReference *),void (*)(void *),void (*)(void *)) 	cppu/source/uno/assign.hxx:417
    145 	cppu3.dll 	static void typelib_typedescription_destructExtendedMembers(struct _typelib_TypeDescription *) 	cppu/source/typelib/typelib.cxx:1308
    146 	mergedlo.dll 	static class std::unique_ptr<com::sun::star::uno::ContextLayer,std::default_delete<com::sun::star::uno::ContextLayer> > `anonymous namespace'::EnsureJavaContext() 	sfx2/source/control/unoctitm.cxx:229
    147 	mergedlo.dll 	SfxDispatchController_Impl::dispatch(com::sun::star::util::URL const &,com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const &,com::sun::star::uno::Reference<com::sun::star::frame::XDispatchResultListener> const &) 	sfx2/source/control/unoctitm.cxx:572
    148 	mergedlo.dll 	static class std::unique_ptr<com::sun::star::uno::ContextLayer,std::default_delete<com::sun::star::uno::ContextLayer> > `anonymous namespace'::EnsureJavaContext() 	sfx2/source/control/unoctitm.cxx:229
    149 	mergedlo.dll 	SfxOfficeDispatch::dispatch(com::sun::star::util::URL const &,com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const &) 	sfx2/source/control/unoctitm.cxx:256
    150 	mergedlo.dll 	static void framework::`anonymous namespace'::AsyncMenuExecute(void *, void *) 	framework/source/uielement/menubarmanager.cxx:793
    151 	mergedlo.dll 	static void framework::`anonymous namespace'::AsyncMenuExecute(void *, void *) 	framework/source/uielement/menubarmanager.cxx:789
    152 	mergedlo.dll 	ImplWindowFrameProc(vcl::Window *,SalEvent,void const *) 	vcl/source/window/winproc.cxx:2871
    153 	vclplug_winlo.dll 	static bool ImplHandleMouseMsg(struct HWND__ *, unsigned int, unsigned __int64, __int64) 	vcl/win/window/salframe.cxx:3311
    154 	ntdll.dll 	0x3365b
    155 	ntdll.dll 	0x3d809
    156 	user32.dll 	0x1b5e9
    157 	mergedlo.dll 	SalFrame::CallCallback(SalEvent,void const *) 	vcl/inc/salframe.hxx:311
    158 	mergedlo.dll 	SalFrame::CallCallback(SalEvent,void const *) 	vcl/inc/salframe.hxx:311
    159 	vclplug_winlo.dll 	static __int64 SalFrameWndProc(struct HWND__ *, unsigned int, unsigned __int64, __int64, bool & const) 	vcl/win/window/salframe.cxx:6136
    160 	user32.dll 	0x13b04
    161 	skialo.dll 	static void `anonymous namespace'::RasterWindowContext_win::onSwapBuffers(const struct SkIRect *) 	E:/build/workdir/UnpackedTarball/skia/tools/window/win/RasterWindowContext_win.cpp:89
    162 	mergedlo.dll 	static lo_initialize$catch$194() 	desktop/source/lib/init.cxx:8401
    163 	ntdll.dll 	0x2e71a
    164 	ntdll.dll 	0x28b33
    165 	vclplug_winlo.dll 	static __int64 SalFrameWndProc(struct HWND__ *, unsigned int, unsigned __int64, __int64, bool & const) 	vcl/win/window/salframe.cxx:5738
    166 	vclplug_winlo.dll 	SalFrameWndProcW(HWND__ *,unsigned int,unsigned __int64,__int64) 	vcl/win/window/salframe.cxx:6145
    167 	vclplug_winlo.dll 	SalFrameWndProcW(HWND__ *,unsigned int,unsigned __int64,__int64) 	vcl/win/window/salframe.cxx:6140
    168 	user32.dll 	0x18eb8
    169 	vclplug_winlo.dll 	WinSalYieldMutex::doRelease(bool) 	vcl/win/app/salinst.cxx:150
    170 	msvcp140.dll 	0x1285b
    171 	user32.dll 	0x18bec
    172 	vclplug_winlo.dll 	static __int64 SalFrameWndProc(struct HWND__ *, unsigned int, unsigned __int64, __int64, bool & const) 	vcl/win/window/salframe.cxx:6137
    173 	user32.dll 	0x18771
    174 	vclplug_winlo.dll 	static __int64 SalFrameWndProc(struct HWND__ *, unsigned int, unsigned __int64, __int64, bool & const) 	vcl/win/window/salframe.cxx:6137
    175 	mergedlo.dll 	OpenGLContext::prepareForYield() 	vcl/source/opengl/OpenGLContext.cxx:377
    176 	vclplug_winlo.dll 	ImplSalYield(bool,bool) 	vcl/win/app/salinst.cxx:409
    177 	mergedlo.dll 	static lo_initialize$catch$194() 	desktop/source/lib/init.cxx:8401
    178 	sal3.dll 	osl_setCondition 	sal/osl/w32/conditn.cxx:55
    179 	vclplug_winlo.dll 	WinSalInstance::DoYield(bool,bool) 	vcl/win/app/salinst.cxx:484
    180 	vclplug_winlo.dll 	WinSalInstance::DoYield(bool,bool) 	vcl/win/app/salinst.cxx:468
    181 	mergedlo.dll 	static bool InnerYield(bool, bool) 	vcl/source/app/svapp.cxx:389
    182 	mergedlo.dll 	static lo_initialize$catch$194() 	desktop/source/lib/init.cxx:8401
    183 	mergedlo.dll 	static bool InnerYield(bool, bool) 	vcl/source/app/svapp.cxx:376
    184 	mergedlo.dll 	Application::Execute() 	vcl/source/app/svapp.cxx:364
    185 	mergedlo.dll 	desktop::Desktop::Main() 	desktop/source/app/app.cxx:1679
    186 	mergedlo.dll 	static lo_initialize$catch$194() 	desktop/source/lib/init.cxx:8401
    187 	MSVCP140_1.dll 	0x11ef
    188 	ucrtbase.dll 	0x20475
    189 	mergedlo.dll 	operator<<<char,std::char_traits<char> >(std::basic_ostream<char,std::char_traits<char> > &,FontMetric const &) 	include/vcl/metric.hxx:107
    190 	mergedlo.dll 	static lo_initialize$catch$194() 	desktop/source/lib/init.cxx:8401
    191 	sal3.dll 	rtl_uString_release 	sal/rtl/ustring.cxx:1118
    192 	mergedlo.dll 	InitVCL() 	vcl/source/app/svmain.cxx:371
    193 	mergedlo.dll 	desktop::Desktop::Main() 	desktop/source/app/app.cxx:1304
    194 	mergedlo.dll 	ImplSVMainRun() 	vcl/source/app/svmain.cxx:234
    195 	mergedlo.dll 	soffice_main 	desktop/source/app/sofficemain.cxx:122
    196 	ntdll.dll 	0x53850
    197 	ucrtbase.dll 	0x20400
    198 	mergedlo.dll 	static `desktop::CallbackFlushHandler::CallbackData::CallbackData'::`1'::dtor$0()
    199 	mergedlo.dll 	soffice_main 	desktop/source/app/sofficemain.cxx:59
    200 	soffice.bin 	main 	desktop/source/app/main.c:49
    201 	soffice.bin 	static int __scrt_common_main_seh() 	D:/a/_work/1/s/src/vctools/crt/vcstartup/src/startup/exe_common.inl:288
    202 	soffice.bin 	mainCRTStartup 	D:/a/_work/1/s/src/vctools/crt/vcstartup/src/startup/exe_main.cpp:16
    203 	kernel32.dll 	0x1259d
    204 	ntdll.dll 	0x5af78

[1] https://crashreport.libreoffice.org/stats/crash_details/6812315d-e79b-46ce-893d-688d6908c41c
[2] https://gerrit.libreoffice.org/c/core/+/203572/comment/95fcd0be_db5a3d02/

Change-Id: Ia30eecd2667d15220b9f7824faea5adc04c94e93
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210137
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
2026-08-27 23:36:19 +02:00
Andrea Gelmini 7dcc068124 Fix typos
Change-Id: I170af8cd8bcbc969631ee603f20efcf40b68e517
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210038
Tested-by: Julien Nabet <serval2412@yahoo.fr>
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2026-08-27 15:00:22 +02:00
Jesus Solis 39dcff4a99 tdf#156931 add import support for JPEG XL image format
Change-Id: I5b8c70d5739fdc91b0ca30fbaa780a5c7004741d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208352
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-08-26 11:43:32 +02:00
Heiko Tietze 7ae474d17c Resolves tdf#173189 - Preselect entry in col/row width/height dialogs
Change-Id: I7c0be29c6342cb36c503426ce7763f64740e5045
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209452
Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org>
Tested-by: Jenkins
2026-08-23 09:38:22 +02:00
Andrea Gelmini 4f86cfa577 Fix typos
Change-Id: Ic09e8f2877a7106eb074586662d1733828d85197
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209422
Tested-by: Jenkins
Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
2026-08-21 14:19:46 +02:00
Caolán McNamara 1bc7372569 share the four copies of SanitizePaletteIndex
Signed-off-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Change-Id: Iaf7640a2be687edda1ed31932eae7c19b4678ec5
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/9266
Reviewed-by: Noel Grandin <noel.grandin@collabora.com>
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
(cherry picked from commit af2c9801021e42e0d327994cde0a8529450c6135)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209448
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-08-21 12:19:24 +02:00
Xisco Fauli 0c91381485 loplugin:unusedmethods
Change-Id: I17586b49f970be17c5f6d2823d4a973521b2ed62
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209407
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Tested-by: Jenkins
2026-08-21 09:31:35 +02:00
Michael Stahl 91970e690b vcl: PDF export: fix encrypted /Length in PDFObjectCopier
`PDFObjectCopier::copyExternalResource` is a bit more complicated but
try to get the correct length; naively always using
`calculateStreamSize` breaks `testMultiPagePDF` and `testReexportPDF`
so do it only when it changes (i.e. encryption is enabled).

Signed-off-by: Michael Stahl <michael.stahl@collabora.com>
Change-Id: Idb0c892f2da03a6e7dd5a2ba8d242c10c2e0d90a
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/8629
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
(cherry picked from commit 05d5a6e4b5b921e1e21c3c52e85dabd7c76a2024)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209325
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Tested-by: Jenkins
2026-08-19 16:15:35 +02:00
Neil Roberts 9dd7345159 tdf#173043 Add translator comments to strings containing “outline”
The word “outline” in LibreOffice can refer to either the lines of the
shape of something or an overview of something. When the string is quite
short it’s difficult for translators to know which meaning is intended.
There seems to be quite a lot of cases where the translators have got
this wrong. In order to help them this patch adds translator comments to
a bunch of the strings to explain which meaning should be used.

Change-Id: I4b75cc829128633bc9382817fc574d55a09af8a4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209037
Tested-by: Jenkins
Reviewed-by: Neil Roberts <nroberts@libreoffice.org>
2026-08-09 12:12:44 +02:00
Karthik b7b2913bdc tdf#172730: Add a fast scanline paths for premultiplied 32-bit bitmaps
Since BitmapEx was unified into a single premultiplied 32-bit BGRA
Bitmap, converting such a bitmap runs a per-pixel loop that builds a
BitmapColor and dispatches through the `GetPixelFromData` /
`SetPixelOnData`, (un)premultiplying one channel at a time.

Add a fast scanline path for the common case, a premultiplied 32-bit
truecolor bitmap (ABGR/ARGB/BGRA/RGBA). It resolves each channel's
byte offset once and then moves the scanline bytes directly, using the
premultiply / unpremultiply lookup tables.

Signed-off-by: Karthik <karthik.godha@collabora.com>
Change-Id: Ie8ee47055bdffca9e06d48955fdc0b61b34e08ac
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/6752
Reviewed-by: Michael Stahl <michael.stahl@collabora.com>
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
(cherry picked from commit 54c68922eaa2d2c4e20e10091ad4911e8d32aed2)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208641
Tested-by: Jenkins
2026-07-30 18:08:49 +02:00
Julien Nabet f601364f2d tdf#172937: let's compare colors instead of index of colors
Index retrieved corresponded to blue value, that's why:
-the right circle of the first line
-the two circles from left of the second line
-the second circle of the last line
were modified.

Change-Id: I57a5334ca11f5b987d4125c88810991f83d44d42
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208817
Tested-by: Jenkins
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2026-07-30 08:22:14 +02:00
Caolán McNamara 3e786a9ee5 ofz: svm, count the nesting depth in one place
An EPS substitute metafile and the old SVGDI path each began a fresh
count, so nesting through those never reached the depth limit.

Signed-off-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Change-Id: I1bb8e9017d1d9b14a845debd45a32f6adf6e57d0
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/7844
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Noel Grandin <noel.grandin@collabora.com>
(cherry picked from commit 4ef8520cdd767478d280ed179c7ff56254aa5cf1)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208693
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Tested-by: Jenkins
2026-07-28 10:12:50 +02:00
Michael Weghorn 94df4ecce4 tdf#130857 weld: Block signals in ComboBox::set_entry_text
As is the case for other weld methods modifying the widget
state, signals about a change of the combobox entry text
are not supposed to be emitted when the change happens
programatically and not by manual user interaction.

Therefore, disable notify events in weld::ComboBox::set_entry_text
by renaming the actual toolkit-specific implementations to
do_set_entry_text and making the weld::ComboBox::set_entry_text
base class method block signals while calling
the virtual methods.

This aligns the behavior of the Qt implementation
with the other ones. For example, the GtkInstanceComboBox
implementation is already blocking the corresponding GTK
signals.

This fixes an issue seen with the qt6 VCL when
support for native Qt widgets is enabled
(SAL_VCL_QT_USE_WELDED_WIDGETS=1)
for the following scenario:

* start Calc
* insert "1" into all of the cells A1:A3
* select A1:A3
* "Data" -> "Pivot Table" -> "Insert or Edit..."
* in the "Select Source" dialog, press OK to confirm "Current Selection"
* in the "Pivot Table Layout" dialog, drag and drop "1" from
  "Available Fields" to "Column Fields"
* press OK
* "Data" -> "Pivot Table" -> "Calculated Field"

(Support for using native Qt widgets will be
enabled in an upcoming commit, now that this issue
is fixed.)

Without this change in place, the "Add" button
would be missing its label, due it being set
to an empty string like this when a dummy entry
is set in the combobox (see frame 50 in the below backtrace):

Backtrace:

    1 QtInstanceButton::set_label QtInstanceButton.cxx 32 0x7fffe4c7350c
    2 ScPivotCalcFieldDlg::CalcFieldNameSelected PivotCalcFieldDialog.cxx 583 0x7fff872b453a
    3 ScPivotCalcFieldDlg::LinkStubCalcFieldNameSelected PivotCalcFieldDialog.cxx 547 0x7fff872b026d
    4 Link<weld::ComboBox&, void>::Call link.hxx 105 0x7fffe4c87f81
    5 weld::ComboBox::signal_changed ComboBox.hxx 71 0x7fffe4c87b98
    6 QtInstanceComboBox::signalChanged QtInstanceComboBox.cxx 431 0x7fffe4c7c05d
    7 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceComboBox:: *)()>::call(void (QtInstanceComboBox:: *)(), QtInstanceComboBox *, void * *)::{lambda()#1}::operator()() const qobjectdefs_impl.h 128 0x7fffe4c883a1
    8 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}&&) qobjectdefs_impl.h 66 0x7fffe4c882d9
    9 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceComboBox:: *)()>::call(void (QtInstanceComboBox:: *)(), QtInstanceComboBox *, void * *) qobjectdefs_impl.h 127 0x7fffe4c8820b
    10 QtPrivate::FunctionPointer<void (QtInstanceComboBox:: *)()>::call<QtPrivate::List<>, void>(void (QtInstanceComboBox:: *)(), QtInstanceComboBox *, void * *) qobjectdefs_impl.h 175 0x7fffe4c8818d
    11 QtPrivate::QCallableObject<void (QtInstanceComboBox:: *)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void * *, bool *) qobjectdefs_impl.h 546 0x7fffe4c880b6
    12 QtPrivate::QSlotObjectBase::call qobjectdefs_impl.h 462 0x7fffe3aefbf2
    13 doActivate<false> qobject.cpp 4406 0x7fffe3d2691c
    14 QMetaObject::activate qobject.cpp 4467 0x7fffe3d1c8c3
    15 QMetaObject::activate<void, QString> qobjectdefs.h 320 0x7fffe1c8842b
    16 QComboBox::editTextChanged moc_qcombobox.cpp 338 0x7fffe1e46cae
    17 QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QString const&>, void, void (QComboBox:: *)(QString const&)>::call(void (QComboBox:: *)(QString const&), QComboBox *, void * *)::{lambda()#1}::operator()() const qobjectdefs_impl.h 128 0x7fffe1e579f8
    18 QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QString const&>, void, void (QComboBox:: *)(QString const&)>::call(void (QComboBox:: *)(QString const&), QComboBox *, void * *)::{lambda()#1}>(void * *, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QString const&>, void, void (QComboBox:: *)(QString const&)>::call(void (QComboBox:: *)(QString const&), QComboBox *, void * *)::{lambda()#1}&&) qobjectdefs_impl.h 66 0x7fffe1e5796d
    19 QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QString const&>, void, void (QComboBox:: *)(QString const&)>::call qobjectdefs_impl.h 127 0x7fffe1e57927
    20 QtPrivate::FunctionPointer<void (QComboBox:: *)(QString const&)>::call<QtPrivate::List<QString const&>, void> qobjectdefs_impl.h 175 0x7fffe1e57891
    21 QtPrivate::QCallableObject<void (QComboBox:: *)(QString const&), QtPrivate::List<QString const&>, void>::impl qobjectdefs_impl.h 546 0x7fffe1e577bb
    22 QtPrivate::QSlotObjectBase::call qobjectdefs_impl.h 462 0x7fffe3aefbf2
    23 doActivate<false> qobject.cpp 4406 0x7fffe3d2691c
    24 QMetaObject::activate qobject.cpp 4467 0x7fffe3d1c8c3
    25 QMetaObject::activate<void, QString> qobjectdefs.h 320 0x7fffe1c8842b
    26 QLineEdit::textChanged moc_qlineedit.cpp 333 0x7fffe1ee36ce
    27 QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QString const&>, void, void (QLineEdit:: *)(QString const&)>::call(void (QLineEdit:: *)(QString const&), QLineEdit *, void * *)::{lambda()#1}::operator()() const qobjectdefs_impl.h 128 0x7fffe1ef1bf8
    28 QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QString const&>, void, void (QLineEdit:: *)(QString const&)>::call(void (QLineEdit:: *)(QString const&), QLineEdit *, void * *)::{lambda()#1}>(void * *, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QString const&>, void, void (QLineEdit:: *)(QString const&)>::call(void (QLineEdit:: *)(QString const&), QLineEdit *, void * *)::{lambda()#1}&&) qobjectdefs_impl.h 66 0x7fffe1ef1b6d
    29 QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QString const&>, void, void (QLineEdit:: *)(QString const&)>::call qobjectdefs_impl.h 127 0x7fffe1ef1b27
    30 QtPrivate::FunctionPointer<void (QLineEdit:: *)(QString const&)>::call<QtPrivate::List<QString const&>, void> qobjectdefs_impl.h 175 0x7fffe1ef1a91
    31 QtPrivate::QCallableObject<void (QLineEdit:: *)(QString const&), QtPrivate::List<QString const&>, void>::impl qobjectdefs_impl.h 546 0x7fffe1ef19bb
    32 QtPrivate::QSlotObjectBase::call qobjectdefs_impl.h 462 0x7fffe3aefbf2
    33 doActivate<false> qobject.cpp 4406 0x7fffe3d2691c
    34 QMetaObject::activate qobject.cpp 4467 0x7fffe3d1c8c3
    35 QMetaObject::activate<void, QString> qobjectdefs.h 320 0x7fffe1c8842b
    36 QWidgetLineControl::textChanged moc_qwidgetlinecontrol_p.cpp 211 0x7fffe1efa5f1
    37 QWidgetLineControl::finishChange qwidgetlinecontrol.cpp 716 0x7fffe1ef7ce6
    38 QWidgetLineControl::internalSetText qwidgetlinecontrol.cpp 752 0x7fffe1ef944b
    39 QWidgetLineControl::setText qwidgetlinecontrol_p.h 221 0x7fffe1ee64c8
    40 QLineEditPrivate::setText qlineedit_p.cpp 265 0x7fffe1eeba7a
    41 QLineEdit::setText qlineedit.cpp 292 0x7fffe1edbd6e
    42 QComboBox::setEditText qcombobox.cpp 3243 0x7fffe1e47433
    43 QtInstanceComboBox::set_entry_text(rtl::OUString const&)::$_0::operator()() const QtInstanceComboBox.cxx 233 0x7fffe4c84c66
    44 std::__invoke_impl<void, QtInstanceComboBox::set_entry_text(rtl::OUString const&)::$_0&>(std::__invoke_other, QtInstanceComboBox::set_entry_text(rtl::OUString const&)::$_0&) invoke.h 63 0x7fffe4c84c15
    45 std::__invoke_r<void, QtInstanceComboBox::set_entry_text(rtl::OUString const&)::$_0&>(QtInstanceComboBox::set_entry_text(rtl::OUString const&)::$_0&) invoke.h 113 0x7fffe4c84bc5
    46 std::_Function_handler<void(), QtInstanceComboBox::set_entry_text(rtl::OUString const&)::$_0>::_M_invoke std_function.h 292 0x7fffe4c84add
    47 std::function<void()>::operator() std_function.h 593 0x7fffe4c3446e
    48 QtInstance::RunInMainThread QtInstance.cxx 216 0x7fffe4c2bbef
    49 QtInstanceComboBox::set_entry_text QtInstanceComboBox.cxx 233 0x7fffe4c7e87a
->  50 ScPivotCalcFieldDlg::AddDummyNewField PivotCalcFieldDialog.cxx 182 0x7fff872b08f7
    51 ScPivotCalcFieldDlg::ScPivotCalcFieldDlg PivotCalcFieldDialog.cxx 81 0x7fff872afca8
    52 std::_Construct<ScPivotCalcFieldDlg, weld::Window *&, ScViewData&, ScDPObject const *&> stl_construct.h 133 0x7fff6ef40f43
    53 std::allocator_traits<std::allocator<void>>::construct<ScPivotCalcFieldDlg, weld::Window *&, ScViewData&, ScDPObject const *&> alloc_traits.h 805 0x7fff6ef40b85
    54 std::_Sp_counted_ptr_inplace<ScPivotCalcFieldDlg, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<weld::Window *&, ScViewData&, ScDPObject const *&> shared_ptr_base.h 606 0x7fff6ef40b85
    55 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<ScPivotCalcFieldDlg, std::allocator<void>, weld::Window *&, ScViewData&, ScDPObject const *&> shared_ptr_base.h 970 0x7fff6ef4090f
    56 std::__shared_ptr<ScPivotCalcFieldDlg, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<void>, weld::Window *&, ScViewData&, ScDPObject const *&> shared_ptr_base.h 1719 0x7fff6ef4083c
    57 std::shared_ptr<ScPivotCalcFieldDlg>::shared_ptr<std::allocator<void>, weld::Window *&, ScViewData&, ScDPObject const *&> shared_ptr.h 463 0x7fff6ef407ba
    58 std::make_shared<ScPivotCalcFieldDlg, weld::Window *&, ScViewData&, ScDPObject const *&> shared_ptr.h 1007 0x7fff6ef40749
    59 vcl::AbstractDialogImpl_BASE<AbstractScPivotCalcFieldDlg, ScPivotCalcFieldDlg, std::shared_ptr, true>::make_dialog<weld::Window *&, ScViewData&, ScDPObject const *&> abstdlgimpl.hxx 63 0x7fff6ef406c0
    60 AbstractDialogImpl_BASE<weld::Window *&, ScViewData&, ScDPObject const *&> abstdlgimpl.hxx 42 0x7fff6ef40417
    61 AbstractDialogImpl_BASE scdlgfact.cxx 546 0x7fff6ef21995
    62 VclPtr<(anonymous namespace)::AbstractScPivotCalcFieldDlg_Impl>::Create<weld::Window *&, ScViewData&, ScDPObject const *&> vclptr.hxx 153 0x7fff6ef15d98
    63 ScAbstractDialogFactory_Impl::CreateScPivotCalcFieldDlg scdlgfact.cxx 553 0x7fff6ef15cdd
    64 ScPivotShell::Execute pivotsh.cxx 89 0x7fff87aa613b
    65 SfxStubScPivotShellExecute scslots.hxx 5362 0x7fff87aa5fc5
    66 SfxDispatcher::Call_Impl dispatch.cxx 258 0x7ffff37c5b2e
    67 SfxDispatcher::Execute_ dispatch.cxx 757 0x7ffff37ca1f6
    68 SfxBindings::Execute_Impl bindings.cxx 1047 0x7ffff37b20ae
    69 SfxDispatchController_Impl::dispatch unoctitm.cxx 737 0x7ffff388e2bd
    70 SfxOfficeDispatch::dispatch unoctitm.cxx 256 0x7ffff388cd74
    71 framework::(anonymous namespace)::AsyncMenuExecute menubarmanager.cxx 793 0x7ffff4d551a4
    72 Link<void *, void>::Call link.hxx 105 0x7fffedaaaf41
    73 ImplHandleUserEvent winproc.cxx 2314 0x7fffedaa6881
    74 ImplWindowFrameProc winproc.cxx 2869 0x7fffedaa37b5
    75 SalFrame::CallCallback salframe.hxx 309 0x7fffe4c0cc3c
    76 QtInstance::ProcessEvent QtInstance.cxx 564 0x7fffe4c2ea4f
    77 SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const salusereventlist.cxx 119 0x7fffee07d4ed
    78 SalUserEventList::DispatchUserEvents salusereventlist.cxx 120 0x7fffee07d3c4
    79 QtInstance::ImplYield QtInstance.cxx 458 0x7fffe4c2b3b1
    80 QtInstance::DoYield QtInstance.cxx 480 0x7fffe4c2e611
    81 InnerYield svapp.cxx 389 0x7fffee146746
    82 Application::Yield svapp.cxx 502 0x7fffee145fcf
    83 Application::Execute svapp.cxx 364 0x7fffee145db0
    84 desktop::Desktop::Main app.cxx 1679 0x7ffff7b1f0f5
    85 ImplSVMainRun svmain.cxx 234 0x7fffee16f92c
    86 SalInstance::SVMainRun salinst.hxx 108 0x7fffe4c36b41
    87 ImplSVMain svmain.cxx 221 0x7fffee16ee52
    88 SVMain svmain.cxx 252 0x7fffee1709e9
    89 soffice_main sofficemain.cxx 122 0x7ffff7b9916a
    90 sal_main main.c 51 0x5555555559fd
    91 main main.c 49 0x5555555559d7

Change-Id: Id396e1bcb6e87b8b864257b167f534eb45895d99
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208571
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-07-27 20:21:33 +02:00
Andras Timar b2828755fc cool#16022 pass PDF password through to the version downgrade on import
Opening a password-protected PDF that is newer than version 1.6
failed with "loadComponentFromURL returned an empty reference":
the correct password was rejected. Online exports encrypted PDFs
as 1.7 by default, so this hit every password-protected PDF it
produced.

On import a too-new PDF is downgraded to 1.6 by
convertToHighestSupported, which for an encrypted stream has to
decrypt it (saveWithVersion with security removed). That needs
the password, but the Draw import path (SdPdfFilter::Import ->
ImportPDFUnloaded -> createBinaryDataContainer) passed neither
a password nor an interaction handler, so the downgrade bailed
out ("no Int handler for pass"), returned an empty container and
the load failed.

Thread the password already collected during type detection
(medium SID_PASSWORD), plus the interaction handler, from
SdPdfFilter down to convertToHighestSupported and pre-seed its
password loop with it. Passing the known password matters: the
kit treats a second password callback as a wrong-password retry
and aborts, so re-prompting via the handler alone would turn the
correct password into a spurious rejection.

Add a unit test covering ImportPDFUnloaded on an encrypted 1.7 PDF:
it yields no pages without a password and one page with the right one.

Fixes https://github.com/CollaboraOnline/online/issues/16022

Signed-off-by: Andras Timar <andras.timar@collabora.com>
Change-Id: I6d605c3495a6af2f1763fda2b8f57a058f70c402
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/7711
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
(cherry picked from commit 1f96e3d85a55bc1d6cf437fc96f729b44dbf8ce2)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208625
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-07-27 15:47:20 +02:00
Michael Weghorn b0818120ae weld: Make weld::Widget::m_aSizeAllocateHdl private
Use the existing weld::Widget::signal_size_allocate
method to call the handler from subclasses.

Change-Id: I8494195ec7a7a5a063f423889252b46d36607620
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208453
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-07-24 14:35:38 +02:00
Aya Jamal b4912a455c tdf#103680: Implement GetOpenTypeMathConstant in outdev
Change-Id: Ie92745bdb529a41b6250bfa82ec6d4a6f1c60950
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208005
Tested-by: Jenkins
Reviewed-by: Khaled Hosny <khaled@libreoffice.org>
2026-07-22 12:41:11 +02:00
Michael Weghorn 7c7f950dd8 vcl: Drop NotebookBar::{m_pViewShell,m_rDisposeLink}
By now, NotebookBar::m_pViewShell is always null and
NotebookBar::m_rDisposeLink is unset.

The method NotebookBar::SetDisposeCallback which would
have set both members was dropped in

    commit 6f81bce807
    Date:   Wed Jun 3 12:34:28 2026 +0200

        loplugin:unusedmethods

, so drop the now pointless members altogether.

Change-Id: Ib6392c22094601ebcc2349938e553a845fe0be06
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208273
Tested-by: Jenkins
Reviewed-by: Dan Williams <dcbw@libreoffice.org>
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-07-21 07:10:55 +02:00
Michael Weghorn fbeacc3ca9 vcl: Drop NotebookBar::{m_xVclContentArea,m_bIsWelded}
NotebookBar::m_bIsWelded is always false and
NotebookBar::m_bIsWelded is always an empty reference
by now, see also previous commit

    Change-Id: Ic637b1e7026509b0736d877c88cf7bd6ca50b54c
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Mon Jul 20 10:24:31 2026 +0200

        vcl: Drop obsolete LibreOfficeKit path in NotebookBar ctor

. Therefore, drop them and related logic altogether.

Change-Id: I2a4c21728759207158f8f62049fe9edd85fac239
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208271
Tested-by: Jenkins
Reviewed-by: Dan Williams <dcbw@libreoffice.org>
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-07-21 07:10:46 +02:00
Aya Jamal 92d2a4bec5 tdf#103680: Implement SupportsOpenTypeMath in outdev
Change-Id: I425735e91ce83c6c2225ad562c3549067b80f053
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207987
Tested-by: Jenkins
Reviewed-by: Khaled Hosny <khaled@libreoffice.org>
2026-07-20 15:13:17 +02:00
Michael Weghorn 0d237be3f8 vcl: Merge the two SystemWindow::GetWindowState variants
After previous commit

    Change-Id: Iea0a2d64a552ff27ff5f8595f6d4379b6b224f94
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Wed Jul 15 21:50:13 2026 +0200

        vcl: Consolidate SystemWindow::GetWindowState callers

, only the variant directly returning the vcl::WindowData
is used outside of the class.

Cosolidate the two methods by merging them.

Change-Id: I0fb094a8ed583a9700ff64e34ebce86826320aa4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208172
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-07-19 19:30:51 +02:00
Michael Weghorn 3471de2f73 vcl: Consolidate SystemWindow::GetWindowState callers
Switch/Simplify the 2 remaining callers of the variant with the
vcl::WindowData in/out param to use the one that takes the mask
and returns the vcl::WindowData.

Make the other variant private as it's by now only used
inside of the SystemWindow class itself.

Change-Id: Iea0a2d64a552ff27ff5f8595f6d4379b6b224f94
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208171
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-07-19 19:30:44 +02:00
Christopher Sherlock 9a3ad0812d vcl: simplify B2DPolygon scaling and fix asymmetric DPI issues
Simplifies OutputDevice::ImplLogicToDevicePixel for B2DPolygons by
delegating coordinate transformation to the CoordinateMapper. By using
LogicToDevicePixelX and LogicToDevicePixelY, we eliminate redundant
if/else branching and ensure that window and pixel offsets are
consistently applied across both axes.

This refactoring also addresses systemic X/Y scaling mix-ups where the
horizontal scaler was being used for vertical coordinates, a bug
identified through failures in PDF export integration tests.

Changes:
* Simplified B2DPolygon transformation loop in map.cxx.
* Removed private visibility (SAL_DLLPRIVATE) from the B2DPolyPolygon
  overload of LogicToPixel to allow for external unit testing.
* Added a new unit test fixture 'testB2DPolygonAsymmetricDPI' in
  vclmaptest.cxx to verify scaling accuracy on asymmetric displays
  (e.g., 100x200 DPI) and prevent future axis-specific regressions.

Change-Id: I718df9af8e5d8b2a446be74223047bdaa20ed148
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207555
Tested-by: Jenkins
Reviewed-by: Dan Williams <dcbw@libreoffice.org>
2026-07-16 13:47:42 +02:00
Dan Williams ddfc4058cf vcl/qt: enable Qt6 plugin for Mac
Change-Id: Ia42b606681c70e1bd7426a830e6a063acd32c826
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207980
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
Reviewed-by: Dan Williams <dcbw@libreoffice.org>
2026-07-15 16:51:07 +02:00
Michael Weghorn fdaffd9aa6 vcl: Make WindowData ctor taking string explicit
Usually, vcl::WindowData should be used directly
now, see also previous commit

    Change-Id: I5bc4caeb49d0ab2bbc4fa597a5ef19d86d3aac2c
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Tue Jul 14 21:23:36 2026 +0200

        Use vcl::WindowData instead of string for window state in more places

. For those cases where a WindowData object shall be created
from a string object, don't implicitly do it, but require to
call the ctor explicitly.

(Nothing is currently implicitly doing it anyway.)

Change-Id: Iac18cda2c8674757a8be724fad80e6ae55101e39
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208126
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-07-15 14:46:06 +02:00
Michael Weghorn c8c367b31a Use vcl::WindowData instead of string for window state in more places
vcl::WindowData is used to manage/store various state
information for windows. It can be (de)serialized to/from string.

So far, both the weld::Window API to get/set window state
as well as the SvtViewOptions API were based on the string
representation.

Switch those and various related places to using vcl::WindowData
instead to use a stronger/more specific type than just OUString
in various places across the code base.

Do the string (de)serialization where necessary, but otherwise
prefer to use vcl::WindowData directly.

Calling weld::Window::set_window_state with a WindowData
param that doesn't indicate that anything should be set
(i.e. whose mask is vcl::WindowDataMask::NONE) should
have no effect, so drop extra checks that were previously
checking whether the string representation was empty
and skipping the call to weld::Window::set_window_state in
that case.

No change in user-observable behavior intended or
seen in a quick test.

Change-Id: I5bc4caeb49d0ab2bbc4fa597a5ef19d86d3aac2c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208125
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-07-15 14:45:49 +02:00
Khaled Hosny ef3c39851d vcl: Rename Font::Set/GetAverageFontWidth to Set/GetFontWidth
It is a misnomer now, so return to the original name.

Also drop the redundant private Font::GetAverageFontSize().

Change-Id: I67495fa675091b459a4e90ac09665489cc61fdd9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207991
Tested-by: Jenkins
Reviewed-by: Khaled Hosny <khaled@libreoffice.org>
2026-07-14 00:16:59 +02:00
Khaled Hosny ed9e0a730e tdf#172647: Respect when building embedded font URL
Without that, subfamilies that has the same weight and italic will get
the same file URL.

Change-Id: If698b137d0f9ce478bed99bbc091963b02b82619
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207553
Reviewed-by: Khaled Hosny <khaled@libreoffice.org>
Tested-by: Khaled Hosny <khaled@libreoffice.org>
2026-07-14 00:16:00 +02:00
Khaled Hosny 2ce2aafc65 tdf#172647: Resolve and match fonts by their typographic names
Identify a font by its typographic family (name ID 16) and subfamily
(name ID 17), falling back to legacy names (name ID 1 and 2), so we can
interoperate with systems that use legacy names, while using typographic
names internally.

Change-Id: Ie51c8c14fe91e7e314d9a4b4808485ea4483b524
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207546
Tested-by: Khaled Hosny <khaled@libreoffice.org>
Reviewed-by: Khaled Hosny <khaled@libreoffice.org>
2026-07-14 00:14:34 +02:00
Michael Weghorn 359132df0f weld: Unify/deduplicate Entry/TextView text change signalling
weld::Entry and weld::TextView are implementing the
same logic for calling a callback/handler when the
text changes.

Now that

    Change-Id: I5572fc88caf577fae9a23a39f1ec4f2179935a99
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Thu Jul 9 14:04:00 2026 +0200

        weld: Pass weld::TextWidget& in text change callback/handler

has prepared for that step, deduplicate the logic by
moving it to the shared weld::TextWidget base class,
which will also make sure the logic stays in sync
for both classes.

Change-Id: I69d4b85923fea05383c78f9145fee72b2bd62684
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207937
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
2026-07-10 18:17:36 +02:00
Michael Weghorn f1f6a505a0 weld: Pass weld::TextWidget& in text change callback/handler
Switch the weld::Entry and weld::TextView handlers
that are called when the text changes due to user
interaction to pass a weld::TextWidget& param
instead of a weld::Entry& and weld::TextView&
one respectively.
Adjust related methods across the code base accordingly.

This unifies the behavior for both of these
weld::TextWidget subclasses and prepares for
deduplicating the logic and moving it to the
common base class in an upcoming commit.

That will also ensure they stay in sync.
(Change also motivated by the fact that their behavior was
differing before

    Change-Id: I03d2a13cd84d53d806eb9e363f49c4b6be28d938
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Thu Jul 9 13:08:58 2026 +0200

        tdf#130857 weld: Don't signal about programmatic TextView text change
.)

Change-Id: I5572fc88caf577fae9a23a39f1ec4f2179935a99
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207936
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-07-10 18:17:27 +02:00
Michael Weghorn 33f87e112a tdf#130857 weld: Don't signal about programmatic TextView text change
As is the case in other weld methods, signals about
the change of the weld::TextView text are not supposed to be
emitted when the change happens programatically and not by manual
user interaction.

Therefore, check in weld::TextView::signal_changed
whether notifications are currently disabled, and only
call the callback if that's not the case.

This aligns the behavior of the Qt implementation
with the other ones. (For example for the gtk implementation,
the call to GtkInstanceEditable::disable_notify_events
in GtkInstanceEditable::do_set_text would already
prevent signals from being emitted when the text is
set programmatically.)

This also matches the implementation for weld::Entry::signal_changed.

Without this commit in place, the user list treeview in
the Calc "Sort Lists" option page would be disabled/greyed out in
a WIP branch with the qt6 vcl plugin where support for using native
Qt widgets is enabled, while that's not the case for gtk3 or the
gen vcl plugin.

The tab page can be triggered like this:

* start Calc
* insert something into cells A1:B2
* select cells A1:B2
* "Tools" -> "Options..."
* "LibreOfficeDev Calc" -> "Sort Lists"

Backtrace showing how setting the text (frame 35)
previously resulted in the signal getting emitted
(frame 5) for that case and how that would result
in the treeview being set to disabled (frame 1):

    1 QtInstanceWidget::set_sensitive QtInstanceWidget.cxx 47 0x7f9c33f3cfd0
    2 ScTpUserLists::EdEntriesModHdl tpusrlst.cxx 711 0x7f9b4302aa5b
    3 ScTpUserLists::LinkStubEdEntriesModHdl tpusrlst.cxx 688 0x7f9b4302659d
    4 Link<weld::TextView&, void>::Call link.hxx 105 0x7f9c33eff711
->  5 weld::TextView::signal_changed TextView.hxx 25 0x7f9c33eff3bc
    6 QtInstanceTextView::handleTextChanged QtInstanceTextView.cxx 206 0x7f9c33ef994d
    7 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceTextView:: *)()>::call(void (QtInstanceTextView:: *)(), QtInstanceTextView *, void * *)::{lambda()#1}::operator()() const qobjectdefs_impl.h 128 0x7f9c33effb31
    8 QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceTextView:: *)()>::call(void (QtInstanceTextView:: *)(), QtInstanceTextView *, void * *)::{lambda()#1}>(void * *, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceTextView:: *)()>::call(void (QtInstanceTextView:: *)(), QtInstanceTextView *, void * *)::{lambda()#1}&&) qobjectdefs_impl.h 66 0x7f9c33effa69
    9 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceTextView:: *)()>::call(void (QtInstanceTextView:: *)(), QtInstanceTextView *, void * *) qobjectdefs_impl.h 127 0x7f9c33eff99b
    10 QtPrivate::FunctionPointer<void (QtInstanceTextView:: *)()>::call<QtPrivate::List<>, void>(void (QtInstanceTextView:: *)(), QtInstanceTextView *, void * *) qobjectdefs_impl.h 175 0x7f9c33eff91d
    11 QtPrivate::QCallableObject<void (QtInstanceTextView:: *)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void * *, bool *) qobjectdefs_impl.h 546 0x7f9c33eff846
    12 QtPrivate::QSlotObjectBase::call qobjectdefs_impl.h 462 0x7f9c32cefc02
    13 doActivate<false> qobject.cpp 4406 0x7f9c32f23d2c
    14 QMetaObject::activate qobject.cpp 4467 0x7f9c32f19cd3
    15 QPlainTextEdit::textChanged moc_qplaintextedit.cpp 371 0x7f9c311ef4d6
    16 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QPlainTextEdit:: *)()>::call(void (QPlainTextEdit:: *)(), QPlainTextEdit *, void * *)::{lambda()#1}::operator()() const qobjectdefs_impl.h 128 0x7f9c311fa5e5
    17 QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QPlainTextEdit:: *)()>::call(void (QPlainTextEdit:: *)(), QPlainTextEdit *, void * *)::{lambda()#1}>(void * *, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QPlainTextEdit:: *)()>::call(void (QPlainTextEdit:: *)(), QPlainTextEdit *, void * *)::{lambda()#1}&&) qobjectdefs_impl.h 66 0x7f9c311fa56d
    18 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QPlainTextEdit:: *)()>::call(void (QPlainTextEdit:: *)(), QPlainTextEdit *, void * *) qobjectdefs_impl.h 127 0x7f9c311fa52f
    19 QtPrivate::FunctionPointer<void (QPlainTextEdit:: *)()>::call<QtPrivate::List<>, void>(void (QPlainTextEdit:: *)(), QPlainTextEdit *, void * *) qobjectdefs_impl.h 175 0x7f9c311fa4a1
    20 QtPrivate::QCallableObject<void (QPlainTextEdit:: *)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void * *, bool *) qobjectdefs_impl.h 546 0x7f9c311fa3cb
    21 QtPrivate::QSlotObjectBase::call qobjectdefs_impl.h 462 0x7f9c32cefc02
    22 doActivate<false> qobject.cpp 4406 0x7f9c32f23d2c
    23 QMetaObject::activate qobject.cpp 4467 0x7f9c32f19cd3
    24 QWidgetTextControl::textChanged moc_qwidgettextcontrol_p.cpp 406 0x7f9c312456f6
    25 QWidgetTextControlPrivate::setContent qwidgettextcontrol.cpp 485 0x7f9c31245136
    26 QWidgetTextControl::setPlainText qwidgettextcontrol.cpp 1189 0x7f9c3124ca04
    27 QPlainTextEdit::setPlainText qplaintextedit.cpp 1621 0x7f9c311f1005
    28 QtInstanceTextView::do_set_text(rtl::OUString const&)::$_0::operator()() const QtInstanceTextView.cxx 39 0x7f9c33efbde6
    29 std::__invoke_impl<void, QtInstanceTextView::do_set_text(rtl::OUString const&)::$_0&>(std::__invoke_other, QtInstanceTextView::do_set_text(rtl::OUString const&)::$_0&) invoke.h 63 0x7f9c33efbd95
    30 std::__invoke_r<void, QtInstanceTextView::do_set_text(rtl::OUString const&)::$_0&>(QtInstanceTextView::do_set_text(rtl::OUString const&)::$_0&) invoke.h 113 0x7f9c33efbd45
    31 std::_Function_handler<void(), QtInstanceTextView::do_set_text(rtl::OUString const&)::$_0>::_M_invoke std_function.h 292 0x7f9c33efbc5d
    32 std::function<void()>::operator() std_function.h 593 0x7f9c33e30bae
    33 QtInstance::RunInMainThread QtInstance.cxx 216 0x7f9c33e2836f
    34 QtInstanceTextView::do_set_text QtInstanceTextView.cxx 39 0x7f9c33efa26a
->  35 weld::TextWidget::set_text TextWidget.cxx 27 0x7f9c3d8ea1a1
    36 ScTpUserLists::UpdateEntries tpusrlst.cxx 289 0x7f9b430270c3
    37 ScTpUserLists::LbSelectHdl tpusrlst.cxx 461 0x7f9b4302a7b3
    38 ScTpUserLists::LinkStubLbSelectHdl tpusrlst.cxx 443 0x7f9b4302653d
    39 Link<weld::ItemView&, void>::Call link.hxx 105 0x7f9c3d8e6f01
    40 weld::ItemView::signal_selection_changed ItemView.cxx 25 0x7f9c3d8e6578
    41 QtInstanceItemView::handleSelectionChanged QtInstanceItemView.cxx 266 0x7f9c33eb376d
    42 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceItemView:: *)()>::call(void (QtInstanceItemView:: *)(), QtInstanceItemView *, void * *)::{lambda()#1}::operator()() const qobjectdefs_impl.h 128 0x7f9c33eba8c1
    43 QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceItemView:: *)()>::call(void (QtInstanceItemView:: *)(), QtInstanceItemView *, void * *)::{lambda()#1}>(void * *, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceItemView:: *)()>::call(void (QtInstanceItemView:: *)(), QtInstanceItemView *, void * *)::{lambda()#1}&&) qobjectdefs_impl.h 66 0x7f9c33eba859
    44 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceItemView:: *)()>::call(void (QtInstanceItemView:: *)(), QtInstanceItemView *, void * *) qobjectdefs_impl.h 127 0x7f9c33eba81b
    45 QtPrivate::FunctionPointer<void (QtInstanceItemView:: *)()>::call<QtPrivate::List<>, void>(void (QtInstanceItemView:: *)(), QtInstanceItemView *, void * *) qobjectdefs_impl.h 175 0x7f9c33eba79d
    46 QtPrivate::QCallableObject<void (QtInstanceItemView:: *)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void * *, bool *) qobjectdefs_impl.h 546 0x7f9c33eba6c6
    47 QtPrivate::QSlotObjectBase::call qobjectdefs_impl.h 462 0x7f9c32cefc02
    48 doActivate<false> qobject.cpp 4406 0x7f9c32f23d2c
    49 QMetaObject::activate qobject.cpp 4467 0x7f9c32f19cd3
    50 QMetaObject::activate<void, QItemSelection, QItemSelection> qobjectdefs.h 320 0x7f9c3340a2b5
    51 QItemSelectionModel::selectionChanged moc_qitemselectionmodel.cpp 389 0x7f9c333fd106
    52 QItemSelectionModel::emitSelectionChanged qitemselectionmodel.cpp 2034 0x7f9c333fefbf
    53 QItemSelectionModel::select qitemselectionmodel.cpp 1380 0x7f9c333fe889
    54 QTreeViewPrivate::select qtreeview.cpp 4039 0x7f9c3146d62c
    55 QTreeView::setSelection qtreeview.cpp 2430 0x7f9c3146cdee
    56 QAbstractItemView::mousePressEvent qabstractitemview.cpp 1886 0x7f9c3134de3a
    57 QTreeView::mousePressEvent qtreeview.cpp 2009 0x7f9c314696dc
    58 QWidget::event qwidget.cpp 8989 0x7f9c30e75b91
    59 QFrame::event qframe.cpp 522 0x7f9c30f2ed98
    60 QAbstractScrollArea::viewportEvent qabstractscrollarea.cpp 1068 0x7f9c30f28c77
    61 QAbstractItemView::viewportEvent qabstractitemview.cpp 1826 0x7f9c3134d7a5
    62 QTreeView::viewportEvent qtreeview.cpp 1339 0x7f9c314650ef
    63 QAbstractScrollAreaPrivate::viewportEvent qabstractscrollarea_p.h 75 0x7f9c30f2bf0d
    64 QAbstractScrollAreaFilter::eventFilter qabstractscrollarea_p.h 88 0x7f9c30f2ab92
    65 QCoreApplicationPrivate::sendThroughObjectEventFilters qcoreapplication.cpp 1266 0x7f9c32e3c82d
    66 QApplicationPrivate::notify_helper qapplication.cpp 3258 0x7f9c30db3e9e
    67 QApplication::notify qapplication.cpp 2744 0x7f9c30db5b5c
    68 QCoreApplication::notifyInternal2 qcoreapplication.cpp 1129 0x7f9c32e3c329
    69 QCoreApplication::sendSpontaneousEvent qcoreapplication.cpp 1588 0x7f9c32e3d029
    70 QApplicationPrivate::sendMouseEvent qapplication.cpp 2343 0x7f9c30db47e3
    71 QWidgetWindow::handleMouseEvent qwidgetwindow.cpp 696 0x7f9c30eb5afd
    72 QWidgetWindow::event qwidgetwindow.cpp 301 0x7f9c30eb4167
    73 QApplicationPrivate::notify_helper qapplication.cpp 3264 0x7f9c30db3ec0
    74 QApplication::notify qapplication.cpp 3214 0x7f9c30db7dbf
    75 QCoreApplication::notifyInternal2 qcoreapplication.cpp 1129 0x7f9c32e3c329
    76 QCoreApplication::sendSpontaneousEvent qcoreapplication.cpp 1588 0x7f9c32e3d029
    77 QGuiApplicationPrivate::processMouseEvent qguiapplication.cpp 2513 0x7f9c31c7a4f7
    78 QGuiApplicationPrivate::processWindowSystemEvent qguiapplication.cpp 2237 0x7f9c31c79631
    79 QWindowSystemInterface::sendWindowSystemEvents qwindowsysteminterface.cpp 1112 0x7f9c31d67d8d
    80 userEventSourceDispatch qeventdispatcher_glib.cpp 39 0x7f9c325d210b
    81 g_main_dispatch gdb 0x7f9c377065ce
    82 g_main_context_iterate_unlocked.isra gdb 0x7f9c3770995f
    83 g_main_context_iteration gdb 0x7f9c3770a0f0
    84 QEventDispatcherGlib::processEvents qeventdispatcher_glib.cpp 402 0x7f9c334d8f6b
    85 QPAEventDispatcherGlib::processEvents qeventdispatcher_glib.cpp 90 0x7f9c325d1f08
    86 QEventLoop::processEvents qeventloop.cpp 109 0x7f9c32e57600
    87 QEventLoop::exec qeventloop.cpp 198 0x7f9c32e57853
    88 QDialog::exec qdialog.cpp 588 0x7f9c31279640
    89 QtInstanceDialog::run QtInstanceDialog.cxx 152 0x7f9c33e88644
    90 weld::DialogController::run DialogController.cxx 18 0x7f9c3d8e384e
    91 OfaTreeOptionsDialog::run treeopt.cxx 2499 0x7f9b43bef7e7
    92 vcl::AbstractDialogImpl_BASE<VclAbstractDialog, OfaTreeOptionsDialog, std::unique_ptr, false>::Execute abstdlgimpl.hxx 46 0x7f9b43a54e21
    93 SfxApplication::OfaExec_Impl appserv.cxx 1672 0x7f9c42a948df
    94 SfxStubSfxApplicationOfaExec_Impl sfxslots.hxx 1316 0x7f9c42a6c365
    95 SfxDispatcher::Call_Impl dispatch.cxx 258 0x7f9c42bc48ee
    96 SfxDispatcher::Execute_ dispatch.cxx 757 0x7f9c42bc8fb6
    97 SfxBindings::Execute_Impl bindings.cxx 1047 0x7f9c42bb0e6e
    98 SfxDispatchController_Impl::dispatch unoctitm.cxx 737 0x7f9c42c8d07d
    99 SfxOfficeDispatch::dispatch unoctitm.cxx 256 0x7f9c42c8bb34
    100 framework::(anonymous namespace)::AsyncMenuExecute menubarmanager.cxx 793 0x7f9c44154fe4
    101 Link<void *, void>::Call link.hxx 105 0x7f9c3ceaaf91
    102 ImplHandleUserEvent winproc.cxx 2314 0x7f9c3cea68d1
    103 ImplWindowFrameProc winproc.cxx 2871 0x7f9c3cea37ff
    104 SalFrame::CallCallback salframe.hxx 311 0x7f9c33e094ec
    105 QtInstance::ProcessEvent QtInstance.cxx 562 0x7f9c33e2b1cf
    106 SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const salusereventlist.cxx 119 0x7f9c3d479cfd
    107 SalUserEventList::DispatchUserEvents salusereventlist.cxx 120 0x7f9c3d479bd4
    108 QtInstance::ImplYield QtInstance.cxx 456 0x7f9c33e27b31
    109 QtInstance::DoYield QtInstance.cxx 478 0x7f9c33e2ad91
    110 InnerYield svapp.cxx 389 0x7f9c3d545b76
    111 Application::Yield svapp.cxx 502 0x7f9c3d5453ff
    112 Application::Execute svapp.cxx 364 0x7f9c3d5451e0
    113 desktop::Desktop::Main app.cxx 1679 0x7f9c46f1f0f5
    114 ImplSVMainRun svmain.cxx 234 0x7f9c3d56ed5c
    115 SalInstance::SVMainRun salinst.hxx 108 0x7f9c33e33281
    116 ImplSVMain svmain.cxx 221 0x7f9c3d56e282
    117 SVMain svmain.cxx 252 0x7f9c3d56fe19
    118 soffice_main sofficemain.cxx 122 0x7f9c46f9916a
    119 sal_main main.c 51 0x55e2df71b9fd
    120 main main.c 49 0x55e2df71b9d7

With this commit in place, the issue is gone and the
treeview can be interacted with as expected also for
the case of qt6 with native Qt widgets.

Change-Id: I03d2a13cd84d53d806eb9e363f49c4b6be28d938
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207926
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-07-10 14:26:26 +02:00
Neil Roberts 64df8d7617 tdf#172670 TreeView: Make iter_n_children return 0 with children on demand
On at least the GTK and gen plugins, iter_n_children was returning 1
when the node has children on demand but then iter_children will return
false in order to ignore the dummy node. This was causing an infinite
recursion when iter_previous is called and the previous node has
on-demand children because that uses the result of iter_n_children to
determine if the node has children and then uses iter_children to move
to a child node without checking the return value. That meant the
iterator wouldn’t move and it would keep searching from the same place
forever.

This patch fixes it by making iter_n_children non-virtual and making it
bail out early with 0 if the node has children on demand. Otherwise it
will ask the backend via a virtual function which has been renamed to
do_iter_n_children so that it is similar to how do_iter_children works.

Change-Id: Ie9a3d5d51c9eae0789048fa5240441663642595d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207589
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
2026-07-08 09:48:49 +02:00
Christopher Sherlock 079ead79bf vcl: migrate scalar Logic-to-Device pixel mapping to CoordinateMapper
This commit finalizes the migration of the core scalar coordinate
transformations by moving the logic out of OutputDevice and entirely
into CoordinateMapper.

To clearly separate the public API (which handles MapMode state
branching) from the internal math engine (which unconditionally
applies offsets and scaling), the mapping operations have been
explicitly split.

- Removed ImplLogicXToDevicePixel() and ImplLogicYToDevicePixel()
  from OutputDevice.
- Added LogicToDevicePixelX() and LogicToDevicePixelY() to
  CoordinateMapper to act as the primary state-checking API.
- Added ImplCalcDevicePixelX() and ImplCalcDevicePixelY() to
  CoordinateMapper to isolate the raw transformation math.
- Updated all scalar call sites across vcl (bitmap, map, mask,
  outdev, pixel, rect) to route their math through the mpMapper
  instance.

Change-Id: Ibb23aec54dd6eab6e3a753c2a61f8e023aa03883
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/203650
Reviewed-by: Dan Williams <dcbw@libreoffice.org>
Tested-by: Jenkins
2026-07-07 18:09:18 +02:00
Christopher Sherlock c928d5bc07 vcl: Rename Y-axis origin methods to Get/SetDeviceOriginY
Completes the deprecation of legacy coordinate subsystem naming by
renaming GetOutOffYPixel() and SetOutOffYPixel() to
GetDeviceOriginY() and SetDeviceOriginY() across OutputDevice,
Window, and CoordinateMapper.

This unifies axis naming conventions following previous X-axis
refactoring passes, clarifying that these fields represent the
physical origin offsets of the device rendering canvas.

This patch also moves view transformation logic inline from outdev/map
to CoordinateMapper, and wraps sprawling multi-line logic formulas
across mapping routines to clean up formatting boundaries.

Key changes:
* include/vcl/outdev.hxx / window.hxx: Updated public declarations
  to replace GetOutOffYPixel with GetDeviceOriginY.
* vcl/inc/CoordinateMapper.hxx: Migrated view transformation cache State
  members and mapping calculation methods into the mapper object.
* Global adjustments: Patched all related coordinate offset reads
  and tracking writes throughout desktop, editeng, sc, svx, and vcl.

Change-Id: I28fec54a7f3312cc41ada2de38b26351c0a65527
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/203646
Tested-by: Jenkins
Reviewed-by: Dan Williams <dcbw@libreoffice.org>
2026-07-07 14:22:05 +02:00
Christopher Sherlock 90951d958c vcl: rename X-axis origin methods to Get/SetDeviceOriginX
Rename GetOutOffXPixel() and SetOutOffXPixel() to GetDeviceOriginX()
and SetDeviceOriginX() across OutputDevice, Window, and CoordinateMapper.

The legacy "OutOff" naming convention obscured the difference between
system-level window positioning offsets and internal content scrolling
(SetPixelOffset). The new nomenclature explicitly communicates that
these metrics strictly govern the device coordinate space origin.

This patch focuses strictly on the X-axis coordinate reads and cleans
up duplicated formatting signatures inside the CoordinateMapper header.

Impacted modules:
* include/vcl: Update public declarations in outdev.hxx and window.hxx.
* vcl/inc: Clean up CoordinateMapper.hxx whitespace and scaling hooks.
* Global: Patch dependent pixel coordinate reads across desktop, editeng,
  sc, sfx2, svx, and vcl.

Change-Id: I546e1d255887e3b280ff15caca2e27ef10de52d7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/206509
Reviewed-by: Dan Williams <dcbw@libreoffice.org>
Tested-by: Jenkins
2026-07-07 14:14:50 +02:00
Michael Weghorn 2dca1c0f02 weld: Rename TreeView *_column_clicked methods to *_column_header_clicked
Rename weld::TreeView::connect_column_clicked
and weld::TreeView::signal_column_clicked to make
clear that they are not about a click anywhere in a
column, but about the column *header* being clicked.

The GTK 4 doc for the corresponding
GtkTreeViewColumn::clicked signal [1] by which the API
was apparently inspired is clear about this:

> Emitted when the column’s header has been clicked.

[1] https://docs.gtk.org/gtk4/signal.TreeViewColumn.clicked.html

Change-Id: I0b4b337b5ca938bb1526d9857ed2b0b244daf23c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207591
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-07-03 22:26:00 +02:00
Heiko Tietze 08f5d410a4 Related tdf#121174 - Make module-specific colos non-configurable
Colors were introduced as ThemeColors since they are not entirely application
colors (but also not really UI-related) and because svtools:: is not accessiblke
in vcl. This patch makes the colors hard-coded therefore, still allowing to
disable it but only via expert setting NotebookbarColorTransparency.
It also enables the colors on macOS following the positive feedback.

Change-Id: Iece63d440349b0c42ea6dbc1dad36f0b1e7120a0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207476
Tested-by: Jenkins
Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org>
2026-06-30 10:04:33 +02:00
Xisco Fauli 00aebb5e88 loplugin:unusedmethods
Change-Id: I5eec1b68efc285995db3b5825699c07fa006cb35
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207375
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Tested-by: Jenkins
2026-06-29 10:16:53 +02:00
Mike Kaganski 50935f0fd9 vcl, sd: import PDF /IRT threaded comments and /State resolved flag
Extend PDFGraphicAnnotation with the raw PDF fields — /IRT, /RT,
/State, /StateModel, and /F plus each annotation's pdfium index —
that are needed to reconstruct a thread on the sd side.

The sd PDF filter uses them to:
  - mark every imported PDF annotation as threaded (any PDF comment
    can be replied to / resolved);
  - link replies to their parent via /IRT (page-scoped per spec);
  - collapse Acrobat-style state-change annotations into the target's
    IsResolved flag — /IRT + /State + /StateModel, with /F carrying
    the Hidden | NoZoom | NoRotate bits.

Only /StateModel = "Review" with /State = "Completed" maps to
resolved; other state models are discarded. /RT = "Group" is honoured
as a grouping relationship, not a reply. Acrobat's per-user state
model (each reviewer maintains their own state-change pointing at the
same target) is collapsed to a single boolean per comment — resolved
if any reviewer's latest state is Completed. The mapping is lossy;
the in-code comment on StateChange documents the trade-off.

Also make newly added comments threaded (allowing to resolve), when
the document is PDF.

Signed-off-by: Mike Kaganski <mike.kaganski@collabora.com>
Change-Id: I88e2bbe1202ada7b2e21a3ed90f2eb28760dcd6f
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/1455
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
(cherry picked from commit 72a729882982ebf29cbbc5bdf5000621b53b2d8a)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207212
Tested-by: Jenkins
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2026-06-28 13:38:25 +02:00
Michael Weghorn 798b5e5204 tdf#130857 gtk weld: Don't interpret toggle renderer by itself as expander col
The ui-rules-enforcer check newly introduded in earlier commit

    commit e6b2af1cf8
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Fri Jun 19 08:58:59 2026 +0200

        tdf#130857 ui-rules-enforcer: Check that special toggle renderer not by itself

was used to identify cases where the first GtkTreeViewColumn
in a GtkTreeView in a .ui file only contained a
single GtkCellRendererToggle and no other renderers.

Quoting from the commit message:

> If the special toggle renderer is used in the first
> column, the next "real" renderer still uses column index 0
> in the weld API.
> That makes sense if the renderer is actually
> in the first column still, but is rather
> non-obvious/confusing if that's not the case.
> (The GtkInstanceTreeView ctor currently unconditionally
> considers a GtkCellRendererToggle to be a special
> expander column when it is the first renderer in
> the first column, regardless of whether more
> renderers are there or not.)

> Ensure that the special toggle renderer
> is not in a column by itself, but accompanied
> by at least another renderer by adding a corresponding
> check to the ui-rules-enforcer.
>
> Since the special toggle button is to toggle an
> entry on/off, it also makes sense if it is in the
> same column as the icon or text that it enables/disables.
> If the purpose is to be for a whole row and the check
> button should be in its own column, then it would in my opinion
> make more sense to also use a regular column index of 0 instead
> of the "expander toggle column" feature. Allowing to do that
> would require more rework (as it would break the
> current assumption/logic in the GtkInstanceTreeView ctor
> as described above). If there are any cases where it
> makes sense to have the renderer in its own column
> by itself, supporting that use case with a column
> index of 0 (instead of the current -1) should be easier to
> implement in the future once all cases where different columns
> don't make sense have been handled first. (Then, the logic
> in the GtkInstanceTreeView ctor can be adjusted without
> breaking those.)

All occurences that this new rule has found were
already addressed, i.e. there is currently no
case where the first column contains only a GtkCellRendererToggle.

Prepare for/take the next step: Allowing to use a colum only
containing a single GtkCellRendererToggle again, but then accessing
it using a regular column index of 0 instead of the special
column index of -1, as already outlined as a potential way forward
in that earlier commit.
(This way, column index 0 will be used for the first column,
column index 1 will be used for the second column, etc. which
is reasonably straightforward and doesn't break the
corresponding assumption in the qt weld implementation
any more).

To do so, adjust the logic in the GtkInstanceTreeView
ctor to only enable the special toggle column feature if
a GtkCellRendererToggle is the first renderer in the
first column *and* it is followed by another cell renderer
for the actual content (that is accessible by column index 0
in the weld API).
This also matches what is already checked for the special
pixbuf "expander" column, see the

    else if (GTK_IS_CELL_RENDERER_PIXBUF(pCellRenderer))

just below the modified line.

Drop the new ui-rules-enforcer rule introduced by the above-mentioned
e6b2af1cf8 again as
a first column only containing a toggle button is now
valid with the new semantics.

Extend the weld::TreeView::enable_toggle_buttons
doc a bit to make clear the requirements on the
definition in the .ui file.

This will be used in upcoming commits to simplify/streamline
existing UI like the one in the Java options page
(SvxJavaOptionsPage) where the .ui file
(cui/uiconfig/ui/optadvancedpage.ui) contains
two toggle renderers in the first column, but only
one of them is actually used and the implementation
in SvxJavaOptionsPage only makes use of column indices
-1 (for the special toggle column), 1 (for the "Vendor"
column) and 2 (for the "Version" column) and the
other renderer is not used in practice.
Presumably, the special toggle button feature was only
used because using it was mandatory in the past to be
able to use radio buttons at all.
That is no longer the case since

    Change-Id: I098feb474162d61c5452c3496293a420118e2f4f
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Wed Jun 24 15:42:40 2026 +0200

        tdf#130857 weld: Have separate method to set treeview toggle button type

, so move forward with the intention to make the whole
mapping between cell renderers in the .ui file, columns
in the .ui file and column indices in the weld API
more straightforward/less confusing
(e.g. by being able to drop renderers in the .ui file
that have no actual equivalent in the implementation
of the UI using the treeview).

Change-Id: Ic5bbe4ab71ba255ba16bb0a9176ee4c3a8827fe8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207254
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-06-25 18:24:25 +02:00
Michael Weghorn 14cfde3c60 tdf#130857 weld: Have separate method to set treeview toggle button type
So far, weld::TreeView::enable_toggle_buttons was doing
two things:

* enable a special "toggle button column" to be accessed
  with a special column index of -1 in the weld::TreeView
  API (as documented)

* switch the type of *all* toggle buttons used in all cells/columns
  of the TreeView to the type passed as a parameter
  (not only set the type of the toggle buttons for the
  special toggle button column at index -1)

Untangle these 2 things by splitting this to two methods:

* weld::TreeView::enable_toggle_buttons now only enables
  the special toggle button column at index -1.

* The new weld::TreeView::set_toggle_button_type sets
  the type of all toggle buttons used in the table.

This makes the API clearer and will allow using one of the
two without necessarily also using the other, which will
allow further simplification/improvements in upcoming
commits.

It could also make it easier to support only setting
the type of single columns to use radio buttons in the
future (i.e. have one column using radio buttons and
another one using check buttons in the same table), but
that would require further rework in the underlying
toolkit-specific implementations (in particular the vcl one).

One case where mixing the two things together results
in non-optimal behavior is the "Assign Styles" dialog
with the vcl implementation:

While the special toggle column with index -1 isn't
actually used, the SwAddStylesDlg_Impl ctor still
calls weld::TreeView::enable_toggle_buttons, presumably
only to enable the use of radio buttons for the actually
used toggle columns at the end.
As a consequence, the style names in the first column
are indented for no good reason (but only to leave space
for drawing the toggle buttons for the special toggle
button column that was enabled without actually being
needed).
This will be adjusted in an upcoming commit.

Initially, just replace all callers of
weld::TreeView::enable_toggle_buttons passing
weld::ColumnToggleType::Radio for the type with
calls to both methods, to keep the existing behavior
and be able to further look into further improvements
separately.

Change-Id: I098feb474162d61c5452c3496293a420118e2f4f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207250
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
2026-06-25 18:23:52 +02:00
Michael Weghorn 35e2a8f8c6 tdf#130857 weld: Add default param for TreeView::enable_toggle_buttons
Most callers use weld::ColumnToggleType::Check
and only a few use weld::ColumnToggleType::Radio.

Add a default param of weld::ColumnToggleType::Check
and drop the explicit param for callers passing this.

This prepares for moving setting the toggle button
type to a separate method in an upcoming commit to
clarify what it actually does.
(It doesn't only set the toggle button type of the
special "expander toggle column" enabled by
weld::TreeView::enable_toggle_buttons, but of *all*
toggle buttons used in any of the cells of the
whole table.)

Change-Id: I65edb7cd5f79c59222c1c415f118b8adbdec0271
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207249
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-06-25 18:23:42 +02:00
Heiko Tietze f3d3e12be5 Resolves tdf#89781 - Better warning when saving multiple sheets
* Replaced ScOnlyActiveSheetSavedDlg by QueryDialog
* Pimped the QueryDialog with SetTypeWarn showing a different
  image and hiding the No button

Change-Id: Id134c8d4f6e27df5918d1b53141b45bc0439651c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207209
Tested-by: Jenkins
Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org>
2026-06-24 12:32:20 +02:00
Michael Weghorn 15cfa7b987 tdf#130857 weld: Block signals in TreeView::set_toggle
As is the case in other weld methods, signals about
the change of the toggle status for entries in weld::TreeView
are not supposed to be emitted when the change happens
programatically and not by manual user interaction.

Therefore, disable notify events in weld::TreeView::set_toggle
by renaming the actual toolkit-specific implementations to
do_set_toggle and making the weld::TreeView::set_toggle
base class method block signals while calling
the virtual methods.

See also e.g. weld::TreeView::insert which
uses the same approach.

This aligns the behavior of the Qt implementation
with the other ones. For example, the vcl/SalInstanceTreeView
implementation only calls weld::TreeView::signal_toggled
from SalInstanceTreeView::ToggleHdl. That one is set
via SvLBoxButtonData::SetLink in the SalInstanceTreeView ctor.
The link is called in SvLBoxButtonData::CallLink, called from
SvLBoxButton::ClickHdl, which only gets called in response
to either mouse or keyboard events.

This fixes a nullptr deref seen with the qt6 VCL
plugin and env var SAL_VCL_QT_USE_WELDED_WIDGETS=1
for the following scenario:

* start Writer
* insert an Image via "Insert" -> "Image"
* with image selected, open context menu
* activate the "Insert Caption" context menu
  entry
* in the "Insert Caption" dialog, press the
  "Auto..." button

Crash/Backtrace without this commit in place:

    Thread 1 received signal SIGSEGV, Segmentation fault.
    rtl::OUString::isEmpty (this=0x18) at include/rtl/ustring.hxx:831
    831             return pData->length == 0;
    (rr) bt
    #0  rtl::OUString::isEmpty (this=0x18) at include/rtl/ustring.hxx:831
    #1  0x00007fd2dba98d4b in SwCaptionOptPage::UpdateEntry (this=0x55e123635a80, nSelEntry=0) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1238
    #2  0x00007fd2dba9e0aa in SwCaptionOptPage::ToggleEntryHdl (this=0x55e123635a80, rRowCol={...}) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1347
    #3  0x00007fd2dba9601d in SwCaptionOptPage::LinkStubToggleEntryHdl (instance=0x55e123635a80, data={...}) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1345
    #4  0x00007fd37d724a91 in Link<std::pair<weld::TreeIter const&, int> const&, void>::Call (this=0x55e11e257910, data={...}) at include/tools/link.hxx:105
    #5  0x00007fd37d71d2f1 in weld::TreeView::signal_toggled (this=0x55e11e2578e8, rIterCol={...}) at include/vcl/weld/TreeView.hxx:109
    #6  0x00007fd37d7052dd in QtInstanceTreeView::handleDataChanged (this=0x55e11e2576c0, rTopLeft=..., rBottomRight=..., rRoles=...) at vcl/qt6/../qt5/QtInstanceTreeView.cxx:981
    #7  0x00007fd37d72529a 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=0x7ffdc7bcb6b0)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:128
    #8  0x00007fd37d7251a9 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=0x7ffdc7bcbaa0, fn=...)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:66
    #9  0x00007fd37d7250e3 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> &)) 0x7fd37d705170 <QtInstanceTreeView::handleDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55e11e2576c0, arg=0x7ffdc7bcbaa0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    #10 0x00007fd37d72505d 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> &)) 0x7fd37d705170 <QtInstanceTreeView::handleDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55e11e2576c0, arg=0x7ffdc7bcbaa0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:175
    #11 0x00007fd37d724f86 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_=0x55e1283a4630, r=0x55e11e2576c0, a=0x7ffdc7bcbaa0, ret=0x0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:546
    #12 0x00007fd37c4ee572 in QtPrivate::QSlotObjectBase::call (this=0x55e1283a4630, r=0x55e11e2576c0, a=0x7ffdc7bcbaa0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
    #13 0x00007fd37c724c6c in doActivate<false> (sender=0x55e127fd8030, signal_index=3, argv=0x7ffdc7bcbaa0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4386
    #14 0x00007fd37c71af23 in QMetaObject::activate (sender=0x55e127fd8030, m=0x7fd37d100d10 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, argv=0x7ffdc7bcbaa0)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4447
    #15 0x00007fd37cbc76fe in QMetaObject::activate<void, QModelIndex, QModelIndex, QList<int> > (sender=0x55e127fd8030, mo=0x7fd37d100d10 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, ret=0x0, args=..., args=..., args=...)
        at qtbase/src/corelib/kernel/qobjectdefs.h:320
    #16 0x00007fd37cbc27c0 in QAbstractItemModel::dataChanged (this=0x55e127fd8030, _t1=..., _t2=..., _t3=...) at qtbase/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:658
    #17 0x00007fd37cc6a184 in QSortFilterProxyModelPrivate::_q_sourceDataChanged (this=0x55e1285d77a0, source_top_left=..., source_bottom_right=..., roles=...)
        at /home/michi/development/git/qt5/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp:1627
    #18 0x00007fd37ccaf63e 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=0x7ffdc7bcbff0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:128
    #19 0x00007fd37ccaf59d 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=0x7ffdc7bcc3f0, fn=...) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:66
    #20 0x00007fd37ccaf557 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> &)) 0x7fd37cc691f0 <QSortFilterProxyModelPrivate::_q_sourceDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55e1285d77a0, arg=0x7ffdc7bcc3f0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    #21 0x00007fd37ccaf4c1 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> &)) 0x7fd37cc691f0 <QSortFilterProxyModelPrivate::_q_sourceDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55e1285d77a0, arg=0x7ffdc7bcc3f0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:175
    #22 0x00007fd37ccaf3f0 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_=0x55e127fd8a30, r=0x55e127fd8030, a=0x7ffdc7bcc3f0, ret=0x0) at qtbase/src/corelib/kernel/qobject_p.h:273
    #23 0x00007fd37c4ee572 in QtPrivate::QSlotObjectBase::call (this=0x55e127fd8a30, r=0x55e127fd8030, a=0x7ffdc7bcc3f0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
    #24 0x00007fd37c724c6c in doActivate<false> (sender=0x55e127fd75c0, signal_index=3, argv=0x7ffdc7bcc3f0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4386
    #25 0x00007fd37c71af23 in QMetaObject::activate (sender=0x55e127fd75c0, m=0x7fd37d100d10 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, argv=0x7ffdc7bcc3f0)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4447
    #26 0x00007fd37cbc76fe in QMetaObject::activate<void, QModelIndex, QModelIndex, QList<int> > (sender=0x55e127fd75c0, mo=0x7fd37d100d10 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, ret=0x0, args=..., args=..., args=...)
        at qtbase/src/corelib/kernel/qobjectdefs.h:320
    #27 0x00007fd37cbc27c0 in QAbstractItemModel::dataChanged (this=0x55e127fd75c0, _t1=..., _t2=..., _t3=...) at qtbase/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:658
    #28 0x00007fd37ba75cdd in QStandardItemModelPrivate::itemChanged (this=0x55e127fd8430, item=0x55e128008f00, roles=...) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:568
    #29 0x00007fd37ba78c11 in QStandardItem::setData (this=0x55e128008f00, value=..., role=10) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:909
    #30 0x00007fd37ba791dd in QStandardItem::setCheckable (this=0x55e128008f00, checkable=true) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:1345
    #31 0x00007fd37d712230 in QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0::operator()() const (this=0x55e128009370) at vcl/qt6/../qt5/QtInstanceTreeView.cxx:364
    #32 0x00007fd37d7121a5 in std::__invoke_impl<void, QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0&>(std::__invoke_other, QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0&) (__f=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:63
    #33 0x00007fd37d712165 in std::__invoke_r<void, QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0&>(QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0&) (__fn=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:113
    #34 0x00007fd37d71203d in std::_Function_handler<void(), QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0>::_M_invoke (__functor=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:292
    #35 0x00007fd37d62b07e in std::function<void()>::operator() (this=0x7ffdc7bcc838) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:593
    #36 0x00007fd37d62282f in QtInstance::RunInMainThread (this=0x55e11e0d3580, func=...) at vcl/qt6/../qt5/QtInstance.cxx:216
    #37 0x00007fd37d708783 in QtInstanceTreeView::set_toggle (this=0x55e11e2576c0, rIter=..., eState=TRISTATE_FALSE, nCol=-1) at vcl/qt6/../qt5/QtInstanceTreeView.cxx:362
    #38 0x00007fd386df11c3 in weld::TreeView::set_toggle (this=0x55e11e2578e8, row=0, eState=TRISTATE_FALSE, col=-1) at /home/michi/development/git/libreoffice/vcl/source/weld/TreeView.cxx:37
    #39 0x00007fd2dba97561 in SwCaptionOptPage::Reset (this=0x55e123635a80, rSet=0x7ffdc7bccec0) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1100
    #40 0x00007fd38c0d8c50 in SfxSingleTabDialogController::SetTabPage (this=0x7ffdc7bcce68, xTabPage=std::unique_ptr<SfxTabPage> = {...}) at /home/michi/development/git/libreoffice/sfx2/source/dialog/basedlgs.cxx:269
    #41 0x00007fd2dba930fd in SwCaptionOptDlg::SwCaptionOptDlg (this=0x7ffdc7bcce68, pParent=0x55e1282eefa0, rSet=SfxItemSet of pool 0x55e11fee13b0 with parent 0x0 and Which ranges: [(1, 165), (1000, 1253), (4021, 4081)])
        at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:857
    #42 0x00007fd2dbc1e524 in SwCaptionDialog::CaptionHdl (this=0x55e12817af00) at /home/michi/development/git/libreoffice/sw/source/ui/frmdlg/cption.cxx:376
    #43 0x00007fd2dbc1cc1d in SwCaptionDialog::LinkStubCaptionHdl (instance=0x55e12817af00, data=...) at /home/michi/development/git/libreoffice/sw/source/ui/frmdlg/cption.cxx:373
    #44 0x00007fd37d66c901 in Link<weld::Button&, void>::Call (this=0x55e128105858, data=...) at include/tools/link.hxx:105
    #45 0x00007fd37d66be5c in weld::Button::signal_clicked (this=0x55e128105850) at include/vcl/weld/Button.hxx:37
    #46 0x00007fd37d669b7d in QtInstanceButton::buttonClicked (this=0x55e1281056b0) at vcl/qt6/../qt5/QtInstanceButton.cxx:114
    #47 0x00007fd37d66cd21 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceButton::*)()>::call(void (QtInstanceButton::*)(), QtInstanceButton*, void**)::{lambda()#1}::operator()() const (this=0x7ffdc7bcd0b0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:128
    #48 0x00007fd37d66cc59 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceButton::*)()>::call(void (QtInstanceButton::*)(), QtInstanceButton*, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceButton::*)()>::call(void (QtInstanceButton::*)(), QtInstanceButton*, void**)::{lambda()#1}&&)
        (args=0x7ffdc7bcd490, fn=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:66
    #49 0x00007fd37d66cb8b in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceButton::*)()>::call(void (QtInstanceButton::*)(), QtInstanceButton*, void**)
        (f=(void (QtInstanceButton::*)(QtInstanceButton * const)) 0x7fd37d669b40 <QtInstanceButton::buttonClicked()>, o=0x55e1281056b0, arg=0x7ffdc7bcd490) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    #50 0x00007fd37d66cb0d in QtPrivate::FunctionPointer<void (QtInstanceButton::*)()>::call<QtPrivate::List<>, void>(void (QtInstanceButton::*)(), QtInstanceButton*, void**)
        (f=(void (QtInstanceButton::*)(QtInstanceButton * const)) 0x7fd37d669b40 <QtInstanceButton::buttonClicked()>, o=0x55e1281056b0, arg=0x7ffdc7bcd490) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:175
    #51 0x00007fd37d66ca36 in QtPrivate::QCallableObject<void (QtInstanceButton::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
        (which=1, this_=0x55e1285a0ac0, r=0x55e1281056b0, a=0x7ffdc7bcd490, ret=0x0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:546
    #52 0x00007fd37c4ee572 in QtPrivate::QSlotObjectBase::call (this=0x55e1285a0ac0, r=0x55e1281056b0, a=0x7ffdc7bcd490) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
    #53 0x00007fd37c724c6c in doActivate<false> (sender=0x55e1283c55e0, signal_index=9, argv=0x7ffdc7bcd490) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4386
    #54 0x00007fd37c71af23 in QMetaObject::activate (sender=0x55e1283c55e0, m=0x7fd37b190f60 <QAbstractButton::staticMetaObject>, local_signal_index=2, argv=0x7ffdc7bcd490)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4447
    #55 0x00007fd37a5a7bcb in QMetaObject::activate<void, bool> (sender=0x55e1283c55e0, mo=0x7fd37b190f60 <QAbstractButton::staticMetaObject>, local_signal_index=2, ret=0x0, args=@0x7ffdc7bcd4d7: false)
        at qtbase/src/corelib/kernel/qobjectdefs.h:320
    #56 0x00007fd37a803742 in QAbstractButton::clicked (this=0x55e1283c55e0, _t1=false) at qtbase/src/widgets/Widgets_autogen/include/moc_qabstractbutton.cpp:254
    #57 0x00007fd37a803657 in QAbstractButtonPrivate::emitClicked (this=0x55e128483d30) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:382
    #58 0x00007fd37a8034af in QAbstractButtonPrivate::click (this=0x55e128483d30) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:375
    #59 0x00007fd37a8049df in QAbstractButton::mouseReleaseEvent (this=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:984
    #60 0x00007fd37a673eed in QWidget::event (this=0x55e1283c55e0, event=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:8993
    #61 0x00007fd37a8047fc in QAbstractButton::event (this=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:941
    #62 0x00007fd37a988051 in QPushButton::event (this=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qpushbutton.cpp:697
    #63 0x00007fd37a5b2db0 in QApplicationPrivate::notify_helper (this=0x55e11e0d3900, receiver=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3264
    #64 0x00007fd37a5b4a4c in QApplication::notify (this=0x55e11e0792f0, receiver=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:2744
    #65 0x00007fd37c63e8b9 in QCoreApplication::notifyInternal2 (receiver=0x55e1283c55e0, event=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1117
    #66 0x00007fd37c63f5b9 in QCoreApplication::sendSpontaneousEvent (receiver=0x55e1283c55e0, event=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1576
    #67 0x00007fd37a5b36d3 in QApplicationPrivate::sendMouseEvent
        (receiver=0x55e1283c55e0, event=0x7ffdc7bce8a0, alienWidget=0x55e1283c55e0, nativeWidget=0x55e124371270, buttonDown=0x7fd37b1cd6b0 <qt_button_down>, lastMouseReceiver=..., spontaneous=true, onlyDispatchEnterLeave=false)
        at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:2343
    #68 0x00007fd37a6b373d in QWidgetWindow::handleMouseEvent (this=0x55e125710bd0, event=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:696
    #69 0x00007fd37a6b1da7 in QWidgetWindow::event (this=0x55e125710bd0, event=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:301
    #70 0x00007fd37a5b2db0 in QApplicationPrivate::notify_helper (this=0x55e11e0d3900, receiver=0x55e125710bd0, e=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3264
    #71 0x00007fd37a5b6caf in QApplication::notify (this=0x55e11e0792f0, receiver=0x55e125710bd0, e=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3214
    #72 0x00007fd37c63e8b9 in QCoreApplication::notifyInternal2 (receiver=0x55e125710bd0, event=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1117
    #73 0x00007fd37c63f5b9 in QCoreApplication::sendSpontaneousEvent (receiver=0x55e125710bd0, event=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1576
    #74 0x00007fd37b477f07 in QGuiApplicationPrivate::processMouseEvent (e=0x55e1281f8d90) at /home/michi/development/git/qt5/qtbase/src/gui/kernel/qguiapplication.cpp:2513
    #75 0x00007fd37b477041 in QGuiApplicationPrivate::processWindowSystemEvent (e=0x55e1281f8d90) at /home/michi/development/git/qt5/qtbase/src/gui/kernel/qguiapplication.cpp:2237
    #76 0x00007fd37b565bcd in QWindowSystemInterface::sendWindowSystemEvents (flags=...) at /home/michi/development/git/qt5/qtbase/src/gui/kernel/qwindowsysteminterface.cpp:1112
    #77 0x00007fd37bdc179b in userEventSourceDispatch (source=0x55e11e0ed250) at /home/michi/development/git/qt5/qtbase/src/gui/platform/unix/qeventdispatcher_glib.cpp:39
    #78 0x00007fd38150f68e in g_main_dispatch (context=context@entry=0x7fd370000fd0) at ../../../glib/gmain.c:3591
    #79 0x00007fd381512a1f in g_main_context_dispatch_unlocked (context=0x7fd370000fd0) at ../../../glib/gmain.c:4451
    #80 g_main_context_iterate_unlocked (context=context@entry=0x7fd370000fd0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:4516
    #81 0x00007fd3815131b0 in g_main_context_iteration (context=0x7fd370000fd0, may_block=1) at ../../../glib/gmain.c:4582
    #82 0x00007fd37ccd3c9b in QEventDispatcherGlib::processEvents (this=0x55e11e079ad0, flags=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:402
    #83 0x00007fd37bdc1598 in QPAEventDispatcherGlib::processEvents (this=0x55e11e079ad0, flags=...) at /home/michi/development/git/qt5/qtbase/src/gui/platform/unix/qeventdispatcher_glib.cpp:90
    #84 0x00007fd37d622092 in QtInstance::ImplYield (this=0x55e11e0d3580, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:467
    #85 0x00007fd37d625251 in QtInstance::DoYield (this=0x55e11e0d3580, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:478
    #86 0x00007fd386a28a26 in InnerYield (i_bWait=true, i_bAllEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:389
    #87 0x00007fd386a282af in Application::Yield () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:502
    #88 0x00007fd386a28090 in Application::Execute () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:364
    #89 0x00007fd39011f0f5 in desktop::Desktop::Main (this=0x7ffdc7bd1b40) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1679
    #90 0x00007fd386a51c0c in ImplSVMainRun () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:234
    #91 0x00007fd37d62d751 in SalInstance::SVMainRun (this=0x55e11e0d3590) at vcl/inc/salinst.hxx:108
    #92 0x00007fd386a51132 in ImplSVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:221
    #93 0x00007fd386a52cc9 in SVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:252
    #94 0x00007fd39019916a in soffice_main () at /home/michi/development/git/libreoffice/desktop/source/app/sofficemain.cxx:122
    #95 0x000055e0e26279fd in sal_main () at /home/michi/development/git/libreoffice/desktop/source/app/main.c:51
    #96 0x000055e0e26279d7 in main (argc=2, argv=0x7ffdc7bd1d48) at /home/michi/development/git/libreoffice/desktop/source/app/main.c:49

Change-Id: Idc24e1eacdb512ec288476712a53fd5dc606f246
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207156
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-06-23 11:49:50 +02:00