Both are derived from SfxSetItem which means they contain
a SfxItemSet themselves. That leads to problems since at
their construction time a SfxItemPool has to be known and
it *should* not be different to the one of the ItemSet
that Item gets added later - that leads to the 2nd class
of problems.
In the long therm we should get rid of all SfxSetItems.
This change simplifies already some stuff, including that
the standard Items for DrawObjects reduces by two (and
more due to containing a whole ItemSet) and e.g. the
problem that these Items had to be converted to hard
attributes in the done fixes for copy/pasting Slides.
Signed-off-by: Armin Le Grand (collabora) <Armin.LeGrand@collabora.com>
Change-Id: I8b1c6cabdaa43ed6062811b5508ab3dece47a755
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/6795
Reviewed-by: Armin Le Grand <armin.legrand@collabora.com>
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
(cherry picked from commit e67458a9b769fe7a3a7ee0739ed6d5c46dbc0692)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211734
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
The old implementation did a standard bilinear/"quad" warp on... the
Bezier control points.
That's not correct. A much better approximation of warping the points on
the curve itself can be achieved by first subdividing the curve into
smaller segments over which the bilinear warp is closer to affine. So,
the error is lower. Why did I do this? Because the grid pattern
indicates it's a bilinear warp and I was very confused when it wasn't.
Change-Id: I9478007c8662455ddbb56fa9d7e6dff425c8e718
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210921
Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
Tested-by: Jenkins
Reviewed-by: Ilmari Lauhakangas <ilmari.lauhakangas@libreoffice.org>
Port the widget to select the extrusion direction from using
a ValueSet widget to using weld::IconView.
This helps to be more consistent with other platform/toolkit
widgets and reduces custom widget logic.
Adjust indices used to account for the fact that
weld::IconView indices are 0-based while the ValueSet ones
are 1-based.
The popup can be triggered like this:
* open attachment 175894 from tdf#145296
* make sure the "3D-Settings" toolbar is enabled
in "View" -> "Toolbars" -> "3D-Settings"
* select the extruded shape
* press the "Direction" button in the "3D-Settings"
toolbar
Change-Id: I045bd1d605b0f5bb5c4ad7eeb3247e50356b39b6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211907
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
The popup can be triggered like this:
* open attachment 175894 from tdf#145296
* make sure the "3D-Settings" toolbar is enabled
in "View" -> "Toolbars" -> "3D-Settings"
* select the extruded shape
* press the "Direction" button in the "3D-Settings"
toolbar
Change-Id: If9c59a5d2e1d5232a909a4ad8a9e9e6086149ec5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211906
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
No need to store the images in a class member as they're
only used once in the ctor when inserting items into
the ValueSet. Just use a local variable and create the
images in the existing loop that inserts the items.
Change-Id: Ifa6722a88f97aac35e1b3c17ee9db7606c1ef001
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211905
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
Port the widget to select the lighting from using
a ValueSet widget to using weld::IconView.
This helps to be more consistent with other platform/toolkit
widgets and reduces custom widget logic.
Adjust indices used to account for the fact that
weld::IconView indices are 0-based while the ValueSet ones
are 1-based.
The popup can be triggered like this:
* open attachment 175894 from tdf#145296
* make sure the "3D-Settings" toolbar is enabled
in "View" -> "Toolbars" -> "3D-Settings"
* select the extruded shape
* press the "Lighting" button in the "3D-Settings"
toolbar
Change-Id: I28d86251b70149574535dc7b583660dbe42e9a0d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211903
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
The popup can be triggered like this:
* open attachment 175894 from tdf#145296
* make sure the "3D-Settings" toolbar is enabled
in "View" -> "Toolbars" -> "3D-Settings"
* select the extruded shape
* press the "Lighting" button in the "3D-Settings"
toolbar
Change-Id: I195d1d7973b12541c7296433324b67a19dcd8021
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211902
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
The dialog can be triggered like this:
* open attachment 175894 from tdf#145296
* make sure the "3D-Settings" toolbar is enabled
in "View" -> "Toolbars" -> "3D-Settings"
* select the extruded shape
* press the "Depth" button in the "3D-Settings"
toolbar and select "Custom"
Change-Id: Ia7da2d663569f733451a692a0a6201cc19b5fe9f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211900
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
The last case where that style flag was set was ported
away from ValueSet to use weld::IconView instead in earlier
commit
Change-Id: I1c23a305322105608d0152bcd0b0fa195be14eff
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Tue Oct 6 11:48:21 2026 +0200
cui: Port Callout tab page from ValueSet to weld::IconView
Therefore, drop the logic in ValueSet handling that
flag, to simplify the code.
This also means that the `pItem` param for ValueSet::ImplDrawSelect
is now unused, so drop that one, too.
Change-Id: I0150e699602a625874e5a09b8df38110f52c0c03
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211898
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Following
Change-Id: I3cdb85a966693514521637f672255ba086b9eb19
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Tue Oct 6 09:33:08 2026 +0200
svx: Port shapes panel from ValueSet to weld::IconView
, stop storing the slot IDs/UNO commands corresponding to the
items in the icon views in DefaultShapesPanel in a map and
instead store them as the ID of the items directly in the
weld::IconView, which simplifies the logic a bit.
Change-Id: I97643abd64436cf106b88f835edf6e5c8fb5f7c3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211857
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Port the widgets to select shapes to insert in the
Draw/Impress "Shapes" sidebar panel from using a ValueSet
widget to using weld::IconView.
This helps to be more consistent with other platform/toolkit
widgets and reduces custom widget logic.
Adjust indices used to account for the fact that
weld::IconView indices are 0-based while the ValueSet ones
are 1-based.
The UI can be triggered like this:
* start Impress
* open the sidebar
* switch to the "Shapes" sidebar deck
Change-Id: I3cdb85a966693514521637f672255ba086b9eb19
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211856
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Instead of iterating over the DefaultShapesPanel::m_aShapesSetMap
elements twice, do so only once and just do everything that needs to be done
for each of the elements right away.
Change-Id: I0b774ccbed7e5110f57d0ce6cc6cf2382a6b923e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211854
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Merge DefaultShapesPanel::populateShapes into its only caller,
DefaultShapesPanel::Initialize.
This will also allow to merge the two for loops into one in an upcoming
commit.
Change-Id: I404d056424cc80bda76332543deee6ff287094ba
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211853
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
This fixes a 26.8 regression from
commit 4fb31ea85f.
Format - AutoFormat Styles and Ctrl-click to de-select the style.
Change-Id: I94961ec11932d76fc945fbb11031f22174111459
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211929
Tested-by: Jenkins
Reviewed-by: Justin Luth <jluth@mail.com>
This fixes a 26.8 regression from
commit 4fb31ea85f.
It looks like it was a mistake to not include it here in the first place,
but doubly so when a table style is deselected (via Ctrl-click).
In that case, if the user pressed the edit button,
LibreOffice would crash because of an attempted -1 index access.
Change-Id: I98038dad3693fba26d17022bec75bd201340c1cb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211923
Tested-by: Jenkins
Reviewed-by: Justin Luth <jluth@mail.com>
This fixes a regression from
commit 4fb31ea85f
When you de-select a table style in Table - AutoFormat Styles,
then the checkboxes below were left enabled despite a -1 index,
so the rename and renew buttons would crash.
Change-Id: I3c9601476f874116e43387ee40e934932a44b311
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211922
Tested-by: Jenkins
Reviewed-by: Justin Luth <jluth@mail.com>
This fixes a 26.8 regression from
commit 4fb31ea85f.
When Table - AutoFormat styles has the style de-selected (via a Ctrl-click),
then SelFormatHdl would call UpdateChecks and crash
when GetData tried to access an index of -1.
Change-Id: I2302436d19ef99584cdb7c4e41738894756e9e8a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211921
Reviewed-by: Justin Luth <jluth@mail.com>
Tested-by: Jenkins
Instead of using a custom ValueSet subclass to
draw images and text next to them for selection
in the line width popup, use a weld::TreeView with
two columns: one for the image, and one for the text.
This is similar to what
commit b185d34642
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Fri Nov 28 14:12:04 2025 +0100
tdf#168120 sc: Switch to weld::TreeView in CellLineStyleControl
did elswhere.
Adjust indices used to account for the fact that
weld::TreeView indices are 0-based while the ValueSet ones
are 1-based.
The special "Last custom value" entry so far was
using two separate images, depending on whether
or not it was enabled/sensitive or not: If it is
disabled, a greyed out variant of the image was used.
With the switch to weld::TreeView, leave that up
to the TreeView by simply enabling/disabling the
corresponding row using weld::TreeView::set_sensitive
for the corresponding row.
Drop the now unused LineWidthValueSet.
This switch to weld::TreeView reduces custom widget
logic and custom drawing and makes this more consistent
with other widgets used elsewhere (e.g. like for the
one mentioned in the commit above, the usual font
is used now as well, and it also aligns the behavior
more with that one.)
The popup for configuring the line thickness that uses
this code can be triggered like this:
* start Writer
* insert a chart using "Insert" -> "Chart..."
* select the chart wall in the chart
* open the "Properties" sidebar deck
* in the "Line" section of that sidebar deck, click on the
"Thickness" button/combobox
Change-Id: I423e80bba9e81a98e80652f6486970d40286362e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211735
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
When a filter condition on a column has more than one part, e.g.
"LIKE A* AND LIKE *e", only the first part was converted back to UI text
with its operator; the rest were appended as bare values
("LIKE A* AND *e"). Convert all parts the same way and add a UITest.
Change-Id: Id6a2ecd5593003c3a9fcef1955f2c672ec1ed520
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211425
Tested-by: Jenkins
Reviewed-by: Vissarion Fisikopoulos <vfisikop@libreoffice.org>
Until now the 'local' StyleSheet got set, but that may
not be the same as the original. It was/gets identified just
by searching by name and type, not comparing content.
What to do? We could...
(a) the Style-Friendly way:
- check if StyleSheet is identical
- if not, create a new in-between StyleSheet hosting missing Items
- if yes, use, done.
(b) the pragmatic/practical way:
- Just hard-attribute the Items that are detected as different
similar to what BurnInStyleSheetAttributes does/did, but only
for a view differing Items
(b) is the most simple for now, but will lead to more hard
attributes. The other possibilities will be better in the
long term. For now, I will use (b).
Note that there are more cases in that VERY complex and grown
stuff emerging from SdDrawDocument::PasteBookmarkAsPage. More
things will need to be fixed, see this as a 1st step.
Needed to adapt postProcessAfterCloneToDifferentModel due to
UT testTdf96206 failing, see comment there for details.
That 1st implementation showed weaknesses with those Items
critical and only on MasterPages, so decided to give up on
that and implement ContentCompare to SdPage::Equals. That
was easier than thought: No parameter needed, only used by
InsertBookmarkAsPage_FindDuplicateLayouts::operator(). Thus,
SdPage::Equals needs no change, just SdrObject::Equals.
Due to still problems with Items corrected in Objects on
MasterPages I will for now exclude this.
Could now isolate remaining problems, these are defaults
and/or PresObj things on MasterPages. Important is that I can
completely correct all Items for all Objects in
postProcessAfterCloneToDifferentModel. I can react to these
false-positives in the ContentCompare in SdrObject::Equals.
Signed-off-by: Armin Le Grand (collabora) <Armin.LeGrand@collabora.com>
Change-Id: I10e17c8d6a893dbe92ab716182f07bafce1f3284
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/6595
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Armin Le Grand <armin.legrand@collabora.com>
(cherry picked from commit 92ffaeac04c5c8586006b026f29ce12fba3674f1)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211729
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
...as seen once during JunitTest_forms_complex,
> ==2007790==ERROR: AddressSanitizer: heap-use-after-free on address 0x7ccbfe8b3a38 at pc 0x7f5c5361ed51 bp 0x7b5bd4ac7420 sp 0x7b5bd4ac7418
> READ of size 2 at 0x7ccbfe8b3a38 thread T8
> #0 in SfxItemPool::IsInRange(unsigned short) const at engine/include/svl/itempool.hxx:331:66
> #1 in SfxItemPool::getTargetPool(unsigned short) const at engine/svl/source/items/itempool.cxx:452:9
> #2 in SfxItemPool::CheckItemInfoFlag(unsigned short, unsigned short) const at engine/svl/source/items/itempool.cxx:461:26
> #3 in SfxItemPool::NeedsSurrogateSupport(unsigned short) const at engine/include/svl/itempool.hxx:343:18
> #4 in SfxItemSet::checkRemovePoolRegistration(SfxPoolItem const*) at engine/svl/source/items/itemset.cxx:384:20
> #5 in SfxItemSet::ClearSingleItem_PrepareRemove(SfxPoolItem const*) at engine/svl/source/items/itemset.cxx:364:5
> #6 in SfxItemSet::ClearAllItemsImpl() at engine/svl/source/items/itemset.cxx:443:9
> #7 in SfxItemSet::~SfxItemSet() at engine/svl/source/items/itemset.cxx:318:5
> #8 in std::_Optional_payload_base<SfxItemSet>::_M_destroy() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/optional:305:23
> #9 in std::_Optional_payload_base<SfxItemSet>::_M_reset() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/optional:341:4
> #10 in std::_Optional_payload<SfxItemSet, false, false, false>::~_Optional_payload() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/optional:464:57
> #11 in std::_Optional_base<SfxItemSet, false, false>::~_Optional_base() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/optional:488:12
> #12 in std::optional<SfxItemSet>::~optional() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/optional:781:11
> #13 in sdr::properties::DefaultProperties::~DefaultProperties() at engine/svx/source/sdr/properties/defaultproperties.cxx:92:50
> #14 in sdr::properties::AttributeProperties::~AttributeProperties() at engine/svx/source/sdr/properties/attributeproperties.cxx:221:9
> #15 in sdr::properties::TextProperties::~TextProperties() at engine/svx/source/sdr/properties/textproperties.cxx:79:9
> #16 in sdr::properties::RectangleProperties::~RectangleProperties() at engine/svx/source/sdr/properties/rectangleproperties.cxx:38:9
> #17 in sdr::properties::RectangleProperties::~RectangleProperties() at engine/svx/source/sdr/properties/rectangleproperties.cxx:37:9
> #18 in std::default_delete<sdr::properties::BaseProperties>::operator()(sdr::properties::BaseProperties*) const at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/unique_ptr.h:92:2
> #19 in std::__uniq_ptr_impl<sdr::properties::BaseProperties, std::default_delete<sdr::properties::BaseProperties>>::reset(sdr::properties::BaseProperties*) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/unique_ptr.h:204:4
> #20 in std::unique_ptr<sdr::properties::BaseProperties, std::default_delete<sdr::properties::BaseProperties>>::reset(sdr::properties::BaseProperties*) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/unique_ptr.h:530:7
> #21 in SdrObject::~SdrObject() at engine/svx/source/svdraw/svdobj.cxx:589:18
> #22 in SdrAttrObj::~SdrAttrObj() at engine/svx/source/svdraw/svdoattr.cxx:42:28
> #23 in SdrTextObj::~SdrTextObj() at engine/svx/source/svdraw/svdotext.cxx:156:1
> #24 in SdrRectObj::~SdrRectObj() at engine/svx/source/svdraw/svdorect.cxx:69:25
> #25 in SdrUnoObj::~SdrUnoObj() at engine/svx/source/svdraw/svdouno.cxx:223:1
> #26 in FmFormObj::~FmFormObj() at engine/svx/source/form/fmobj.cxx:120:1
> #27 in FmFormObj::~FmFormObj() at engine/svx/source/form/fmobj.cxx:113:1
> #28 in SdrObject::release() at engine/svx/source/svdraw/svdobj.cxx:612:9
> #29 in rtl::Reference<SdrObject>::clear() at engine/include/rtl/ref.hxx:181:19
> #30 in SvxShape::~SvxShape() at engine/svx/source/unodraw/unoshape.cxx:199:21
> #31 in SvxShapeText::~SvxShapeText() at engine/svx/source/unodraw/unoshape.cxx:3828:1
> #32 in SvxShapeControl::~SvxShapeControl() at engine/svx/source/unodraw/unoshap2.cxx:393:1
> #33 in SvxShapeControl::~SvxShapeControl() at engine/svx/source/unodraw/unoshap2.cxx:392:1
> #34 in cppu::OWeakObject::release() at engine/cppuhelper/source/weak.cxx:231:9
> #35 in cppu::OWeakAggObject::release() at engine/cppuhelper/source/weak.cxx:293:22
> #36 in cppu::WeakAggImplHelper12<com::sun::star::drawing::XShape, com::sun::star::lang::XComponent, com::sun::star::beans::XPropertySet, com::sun::star::beans::XMultiPropertySet, com::sun::star::beans::XPropertyState, com::sun::star::lang::XUnoTunnel, com::sun::star::container::XNamed, com::sun::star::drawing::XGluePointsSupplier, com::sun::star::container::XChild, com::sun::star::lang::XServiceInfo, com::sun::star::document::XActionLockable, com::sun::star::beans::XMultiPropertyStates>::release() at engine/include/cppuhelper/implbase12.hxx:161:31
> #37 in SvxShapeText::release() at engine/include/svx/unoshape.hxx:357:17
> #38 in SvxShapeControl::release() at engine/include/svx/unoshape.hxx:508:21
> #39 in freeUnoInterfaceProxy at engine/bridges/source/cpp_uno/shared/unointerfaceproxy.cxx:42:19
> #40 in (anonymous namespace)::s_stub_defenv_revokeInterface(__va_list_tag (*) [1]) at engine/cppu/source/uno/lbenv.cxx:369:17
> #41 in s_environment_invoke_v(_uno_Environment*, _uno_Environment*, void (*)(__va_list_tag (*) [1]), __va_list_tag (*) [1]) at engine/cppu/source/uno/EnvStack.cxx:292:9
> #42 in uno_Environment_invoke_v at engine/cppu/source/uno/EnvStack.cxx:310:5
> #43 in uno_Environment_invoke at engine/cppu/source/uno/EnvStack.cxx:318:5
> #44 in (anonymous namespace)::defenv_revokeInterface(_uno_ExtEnvironment*, void*) at engine/cppu/source/uno/lbenv.cxx:423:5
> #45 in releaseProxy at engine/bridges/source/cpp_uno/shared/unointerfaceproxy.cxx:78:9
> #46 in com::sun::star::uno::UnoInterfaceReference::~UnoInterfaceReference() at engine/include/uno/dispatcher.hxx:93:9
> #47 in binaryurp::Bridge::releaseStub(rtl::OUString const&, com::sun::star::uno::TypeDescription const&) at engine/binaryurp/source/bridge.cxx:509:1
> #48 in binaryurp::IncomingRequest::execute_throw(binaryurp::BinaryAny*, std::__debug::vector<binaryurp::BinaryAny, std::allocator<binaryurp::BinaryAny>>*) const at engine/binaryurp/source/incomingrequest.cxx:138:18
> #49 in binaryurp::IncomingRequest::execute() const at engine/binaryurp/source/incomingrequest.cxx:79:26
> #50 in request at engine/binaryurp/source/reader.cxx:86:9
> #51 in cppu_threadpool::JobQueue::enter(void const*, bool) at engine/cppu/source/threadpool/jobqueue.cxx:100:17
> #52 in cppu_threadpool::ORequestThread::run() at engine/cppu/source/threadpool/thread.cxx:165:31
> #53 in threadFunc at engine/include/osl/thread.hxx:175:15
> #54 in osl_thread_start_Impl(void*) at engine/sal/osl/unx/thread.cxx:240:9
>
> 0x7ccbfe8b3a38 is located 184 bytes inside of 648-byte region [0x7ccbfe8b3980,0x7ccbfe8b3c08)
> freed by thread T23 here:
> #0 in operator delete(void*, unsigned long) at ~/github.com/llvm/llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp:187:3
> #1 in SdrItemPool::~SdrItemPool() at engine/svx/source/svdraw/svdattr.cxx:514:1
> #2 in salhelper::SimpleReferenceObject::release() at engine/include/salhelper/simplereferenceobject.hxx:61:13
> #3 in rtl::Reference<SfxItemPool>::~Reference() at engine/include/rtl/ref.hxx:116:22
> #4 in SdrModel::~SdrModel() at engine/svx/source/svdraw/svdmodel.cxx:275:1
> #5 in FmFormModel::~FmFormModel() at engine/svx/source/form/fmmodel.cxx:69:1
> #6 in SdDrawDocument::~SdDrawDocument() at engine/sd/source/core/drawdoc.cxx:418:1
> #7 in sd::DrawDocShell::~DrawDocShell() at engine/sd/source/ui/docshell/docshell.cxx:192:9
> #8 in sd::GraphicDocShell::~GraphicDocShell() at engine/sd/source/ui/docshell/grdocsh.cxx:57:38
> #9 in sd::GraphicDocShell::~GraphicDocShell() at engine/sd/source/ui/docshell/grdocsh.cxx:57:37
> #10 in cppu::OWeakObject::release() at engine/cppuhelper/source/weak.cxx:231:9
> #11 in rtl::Reference<SfxObjectShell>::~Reference() at engine/include/rtl/ref.hxx:116:22
> #12 in IMPL_SfxBaseModel_DataContainer::~IMPL_SfxBaseModel_DataContainer() at engine/sfx2/source/doc/sfxbasemodel.cxx:268:5
> #13 in void std::destroy_at<IMPL_SfxBaseModel_DataContainer>(IMPL_SfxBaseModel_DataContainer*) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/stl_construct.h:88:15
> #14 in void std::_Destroy<IMPL_SfxBaseModel_DataContainer>(IMPL_SfxBaseModel_DataContainer*) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/stl_construct.h:164:7
> #15 in void std::allocator_traits<std::allocator<void>>::destroy<IMPL_SfxBaseModel_DataContainer>(std::allocator<void>&, IMPL_SfxBaseModel_DataContainer*) at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/alloc_traits.h:863:4
> #16 in std::_Sp_counted_ptr_inplace<IMPL_SfxBaseModel_DataContainer, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_M_dispose() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/shared_ptr_base.h:650:2
> #17 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/shared_ptr_base.h:423:8
> #18 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/shared_ptr_base.h:1100:11
> #19 in std::__shared_ptr<IMPL_SfxBaseModel_DataContainer, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/shared_ptr_base.h:1574:31
> #20 in std::__shared_ptr<IMPL_SfxBaseModel_DataContainer, (__gnu_cxx::_Lock_policy)2>::reset() at ~/gcc/inst/lib/gcc/x86_64-pc-linux-gnu/17.0.0/../../../../include/c++/17.0.0/bits/shared_ptr_base.h:1692:9
> #21 in SfxBaseModel::dispose() at engine/sfx2/source/doc/sfxbasemodel.cxx:802:13
> #22 in SdXImpressDocument::dispose() at engine/sd/source/ui/unoidl/unomodel.cxx:5515:19
> #23 in SfxBaseModel::close(bool) at engine/sfx2/source/doc/sfxbasemodel.cxx:1544:5
> #24 in gcc3::callVirtualMethod(void*, unsigned int, void*, _typelib_TypeDescriptionReference*, bool, unsigned long*, unsigned int, unsigned long*, double*) at engine/bridges/source/cpp_uno/gcc3_linux_x86-64/callvirtualmethod.cxx:87:5
> #25 in cpp_call(bridges::cpp_uno::shared::UnoInterfaceProxy*, bridges::cpp_uno::shared::VtableSlot, _typelib_TypeDescriptionReference*, int, _typelib_MethodParameter*, void*, void**, _uno_Any**) at engine/bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:230:13
> #26 in unoInterfaceProxyDispatch at engine/bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:410:13
> #27 in binaryurp::IncomingRequest::execute_throw(binaryurp::BinaryAny*, std::__debug::vector<binaryurp::BinaryAny, std::allocator<binaryurp::BinaryAny>>*) const at engine/binaryurp/source/incomingrequest.cxx:236:13
> #28 in binaryurp::IncomingRequest::execute() const at engine/binaryurp/source/incomingrequest.cxx:79:26
> #29 in request at engine/binaryurp/source/reader.cxx:86:9
> #30 in cppu_threadpool::JobQueue::enter(void const*, bool) at engine/cppu/source/threadpool/jobqueue.cxx:100:17
> #31 in cppu_threadpool::ORequestThread::run() at engine/cppu/source/threadpool/thread.cxx:165:31
> #32 in threadFunc at engine/include/osl/thread.hxx:175:15
> #33 in osl_thread_start_Impl(void*) at engine/sal/osl/unx/thread.cxx:240:9
Change-Id: Ib38eb730f9178976d4432f77857b4f09ebfbdbcf
Signed-off-by: Stephan Bergmann <stephan.bergmann@collabora.com>
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/6296
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Michael Stahl <michael.stahl@collabora.com>
(cherry picked from commit 7a151cb95d66be93ef2a2687d1ff55ca37daa410)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211728
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
The std::map<sal_uInt16, OUString> members of SvxShapeCommandsMap
use ascending integers for the key, i.e. keys start with 0
and go up to N-1 if N is the number of elements.
Vector elements can be accessed by index as well, so switch to
using std::vector to simplify the logic.
To be safe, add an index check in
DefaultShapesPanel::ShapeSelectHdl
(std::map::operator[]() would implicitly insert a new
element when called with a non-existing key.) and
switch to std::vector::at() that performs bounds checks.
Change-Id: I0afc8d53a98d529b0d30344fccedd2167b5f595c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211731
Reviewed-by: Dan Williams <dcbw@libreoffice.org>
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
commit 09c6204b63
Date: Thu Feb 29 17:15:23 2024 +0100
tdf#81880 Search the Gallery
dropped the `maThemeSelectionHandler` member, but left this
code using it, but commented out. Drop it, as it's no longer
relevant.
Change-Id: I50c8f255a2eb993497aafe20b5bafab18054b682
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211743
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Simplify drawing a line of N pixels height by drawing a
filled rectangle of that height, instead of drawing N lines
with a height of 1 pixel each.
The popup for configuring the line thickness that uses
this code can be triggered like this:
* start Writer
* insert a chart using "Insert" -> "Chart..."
* select the chart wall in the chart
* open the "Properties" sidebar deck
* in the "Line" section of that sidebar deck, click on the
"Thickness" button/combobox
Change-Id: Ie5f3bb7c25cfddaf17f3b181f6d0cac4723e1459
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211711
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
`aLineEnd` uses the same calculation for the Y coordinate as `aLineStart`.
Simplify and make that more obvious by reusing the already calculated
one from `aLineStart`
Change-Id: I7e12c6fcf526d50dcd6d1d9dc19805cc01837c2e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211710
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Inline the logic when called with a non-zero param
to the only caller that passes a non-zero value.
Rename to LineWidthValueSet::UnselectItems and stop
passing any param for the callers previously passing
a zero parameter.
This will also make it a bit more straight-forward
to port away from the custom LineWidthValueSet to using
a weld::TreeView in an upcoming commit.
The popup for configuring the line thickness that uses
this code can be triggered like this:
* start Writer
* insert a chart using "Insert" -> "Chart..."
* select the chart wall in the chart
* open the "Properties" sidebar deck
* in the "Line" section of that sidebar deck, click on the
"Thickness" button/combobox
Change-Id: Ieed1323cd8d82c498a676c4408754880f61a8fcd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211709
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
Instead of tracking the currently selected entry via
LineWidthValueSet::nSelItem in addition to using the
selection logic of the ValueSet base class, drop that
separate member and use the existing ValueSet logic
to determine what item is selected.
This will also make it a bit more straight-forward
to port away from the custom LineWidthValueSet to using
a weld::TreeView in an upcoming commit.
The popup for configuring the line thickness that uses
this code can be triggered like this:
* start Writer
* insert a chart using "Insert" -> "Chart..."
* select the chart wall in the chart
* open the "Properties" sidebar deck
* in the "Line" section of that sidebar deck, click on the
"Thickness" button/combobox
Change-Id: Ie45eb1233b70c7a5ff814ade3fde774e2eb983b7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211708
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
This is used for the popup that allows configuring the
line thickness which can be triggered like this:
* start Writer
* insert a chart using "Insert" -> "Chart..."
* select the chart wall in the chart
* open the "Properties" sidebar deck
* in the "Line" section of that sidebar deck, click on the
"Thickness" button/combobox
Change-Id: Ib06e95f19d33e983c9641e920572cd57a3272b5a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211707
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Following up to
commit 6296615b8d (master-android)
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Tue Sep 29 14:20:18 2026 +0200
tdf#173695 svx: Ensure minimum height for ColorWindow
and
commit 5c53840b57
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Wed Sep 30 10:15:59 2026 +0200
tdf#173695 svx: Increase min height for ColorWindow icon view to 250
, switch from using a minimum height of 250 to using
that as the fixed height.
The idea of using a minimum size was to still allow
using more space for the ColorWindow when a palette
with a lot of colors is initially selected.
However, the fact that the size of the popup differs
depending on what palette is initiallly selected is
considered confusing/as a bug, so instead use a fixed
height after all, see discussion in tdf#173695 for
more details/background.
A fixed height was also used when SvxColorValueSet
was still used in ColorWindow, i.e. before
commit a4d5983b4e
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Fri Jun 5 11:48:54 2026 +0200
tdf#130857 Port ColorWindow from SvxColorValueSet to ColorIconView
By then, the size could more easily be optimized to
just fit the colors of the "Standard" palette. With
weld::IconView being used now, the exact spacing can
differ depending on what toolkit/theme/style is used, see
the above-mentioned 5c53840b57
for more details.
Which properties are evaluated in the .ui file
depends on the weld implementation.
While the GTK implementation evaluates
GtkScrolledWindow::min-content-height
and GtkScrolledWindow::max-content-height, the vcl one
doesn't do that. Also set GtkWidget::height-request so
the fixed height also applies for that one.
Change-Id: I7c49218872610bcf345b35849d664f85d29fdc47
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211678
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Add an intermediate OAccessible subclass to avoid this
linker error otherwise seen in my local --with-visual-studio=2022
build on Windows:
icomphelper.lib(comphelper.dll) : error LNK2005: "public: virtual class com::sun::star::uno::Any __cdecl cppu::ImplInheritanceHelper<class comphelper::OAccessible,class com::sun::star::accessibility::XAccessibleSelection>::queryInterface(class com::sun::star::uno::Type const &)" (?queryInterface@?$ImplInheritanceHelper@VOAccessible@comphelper@@VXAccessibleSelection@accessibility@star@sun@com@@@cppu@@UEAA?AVAny@uno@star@sun@com@@AEBVType@4567@@Z) already defined in GraphCtlAccessibleContext.o
icomphelper.lib(comphelper.dll) : error LNK2005: "public: virtual void __cdecl cppu::ImplInheritanceHelper<class comphelper::OAccessible,class com::sun::star::accessibility::XAccessibleSelection>::acquire(void)" (?acquire@?$ImplInheritanceHelper@VOAccessible@comphelper@@VXAccessibleSelection@accessibility@star@sun@com@@@cppu@@UEAAXXZ) already defined in GraphCtlAccessibleContext.o
icomphelper.lib(comphelper.dll) : error LNK2005: "public: virtual void __cdecl cppu::ImplInheritanceHelper<class comphelper::OAccessible,class com::sun::star::accessibility::XAccessibleSelection>::release(void)" (?release@?$ImplInheritanceHelper@VOAccessible@comphelper@@VXAccessibleSelection@accessibility@star@sun@com@@@cppu@@UEAAXXZ) already defined in GraphCtlAccessibleContext.o
icomphelper.lib(comphelper.dll) : error LNK2005: "public: virtual class com::sun::star::uno::Sequence<class com::sun::star::uno::Type> __cdecl cppu::ImplInheritanceHelper<class comphelper::OAccessible,class com::sun::star::accessibility::XAccessibleSelection>::getTypes(void)" (?getTypes@?$ImplInheritanceHelper@VOAccessible@comphelper@@VXAccessibleSelection@accessibility@star@sun@com@@@cppu@@UEAA?AV?$Sequence@VType@uno@star@sun@com@@@uno@star@sun@com@@XZ) already defined in GraphCtlAccessibleContext.o
Creating library C:/Users/mwegh/development/git/libreoffice/workdir/LinkTarget/Library/isvx.lib and object C:/Users/mwegh/development/git/libreoffice/workdir/LinkTarget/Library/isvx.exp
C:\Users\mwegh\development\git\libreoffice\instdir\program\svxlo.dll : fatal error LNK1169: one or more multiply defined symbols found
This is somewhat similar to
commit f5667d1e3b
Date: Thu Jun 26 18:25:31 2025 +0500
Fix error LNK2005 in MSVC after recent sd changes
Change-Id: I8f01ea095d0a196c61521f92ea9ec76217941aeb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211618
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
That UNO service was dropped in
commit bcd90334e8
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Wed Sep 2 10:31:59 2026 +0200
[API CHANGE] a11y: Drop com.sun.star.accessibility.AccessibleContext
, so don't claim to implement it.
Change-Id: I8c569f1db4c05228ba18a2d8e20b96b8712764f3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211617
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
Earlier commit
commit 6296615b8d
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Tue Sep 29 14:20:18 2026 +0200
tdf#173695 svx: Ensure minimum height for ColorWindow
had ensured a minimum height of 200 pixels for the ColorIconView
in ColorWindow.
As discussed in tdf#173695, increase the minimum height
to 250 pixels which should be sufficient to show all rows of the
"Standard" color palette even if different styles/themes
(when using an actual toolkit like GTK or QT) may result
in slightly different spacing.
Quoting explanation from tdf#173695 comment 5 of why at least 10 rows
should be shown:
> The "Standard" palette does not merely contain 12 hues arranged in 12
> columns; it also uses 9 rows to provide 9 different shades for each hue.
> (The topmost row contains 12 achromatic colours with different
> brightness values, making 10 rows in total.)
>
> If this were a user-created palette, this might not matter. However,
> since the palettes provided as official presets have a
> two-dimensional structure, I think that preserving that structure
> requires at least the 12 columns × 10 rows that were available
> previously.
Change-Id: Iafee178ceab6ccbbf6d880fa45cd90e3fd81be9d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211601
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
The number of colors displayed in the ColorIconView
in ColorWindow depends on the selected palette.
When the popup is shown for the first time, its
size is calculated based on the size of the
widgets it contains, and the size of the weld::IconView
used for ColorIconView is in turn based on the number
of colors in the initial palette.
If the initial palette has few (or no) colors,
switching to a palette with many colors results
in the need for the weld::IconView to use more
space than previously to show the additional items,
but since the popup doesn't resize, it remains at
its initial size and the selection of colors is
inconvenient or even impossible.
Avoid the problem by ensuring the ColorIconView
has a minimum height of at least 200 pixels.
Before the switch to ColorIconView in
commit a4d5983b4e
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Fri Jun 5 11:48:54 2026 +0200
tdf#130857 Port ColorWindow from SvxColorValueSet to ColorIconView
, the SvxColorValueSet widget in use previously
was always set to a fixed size altogether.
Change-Id: I7b24dd823083891126cf7b4d0ebe1914c1e0cc87
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211565
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
we have a background task with a call-stack that looks like
SwStyleSheetIterator::AppendStyleList
SwStyleSheetIterator::First
StyleItemController::DrawEntry
StylesPreviewWindow_Base::GetCachedPreview
StylesPreviewWindow_Base::UpdateStylesList
StylesListUpdateTask::Invoke
And we can avoid iterating repeatedly over the entire pool
by searching by name.
We could be even faster by caching pointers to stylesheets
but that is a more invasive change.
Change-Id: Iec25bb4757440825aec62110d974a5001b0690f7
Signed-off-by: Noel Grandin <noel.grandin@collabora.co.uk>
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/4188
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
(cherry picked from commit 0572dc68861e7fd85da43a0b6635af7c5ea3889b)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211560
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Changed implementation in EnhancedCustomShapeGeometry from pointer to
std::span, leading to removal of const_cast.
Change-Id: Ic2d768202991eba674275aa4ffe78478f8f6dd27
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210515
Tested-by: Jenkins
Reviewed-by: Hossein <hossein@libreoffice.org>