Extend sdr::annotation::Annotation and AnnotationData with m_Threaded,
m_Resolved, and m_ParentId so a Draw annotation can carry a reply/resolve
relationship. The three fields are propagated by toData / fromData and
by sd::Annotation::clone; when IsThreaded() is true they are emitted
from Annotation::ToJSON and SdXImpressDocument::getPostIts under the
same keys (threaded, resolved, parentId) that ScModelObj::getPostIts
already uses for Calc.
The fields will be used by the PDF filter (follow-up commits) and left
at their defaults elsewhere; ODP, PPTX and ODF exporters are unchanged
and continue to ignore them. Support for [MS-PPTX] extensions [1] for
comments that introduce state and replies is not in the scope of this
patch series.
[1] https://learn.microsoft.com/en-us/openspecs/office_standards/ms-pptx/161bc2c9-98fc-46b7-852b-ba7ee77e2e54
Signed-off-by: Mike Kaganski <mike.kaganski@collabora.com>
Change-Id: I49594e1e4698bfd541f4c5041362a52b675683fd
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/1454
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
(cherry picked from commit bbde910405829527c92c406a82f75743bc4416c2)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207199
Tested-by: Jenkins
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
In a dbgutil build (on macOS - but probably does not matter), type a word in a
slide's text box, select it, copy it, move the cursor past it, and paste.
The paste asserts:
assert( IsUpdateLayout() && "Should not be used for Update=FALSE: GetTextHeight" );
The paste merges paragraphs, which reaches
EffectSequenceHelper::disposeTextRange through the ParagraphDeleted callback
(SdPage::onParagraphRemoving). To decide which effect to drop it called
isParagraphTargetTextEmpty(), which reads the shape text through the UNO text
forwarder and so forces a text frame layout recompute
(NbcAdjustTextFrameWidthAndHeight, then GetTextHeight). The paste runs with
the EditEngine layout updates suspended, hence the assert in
ImpEditEngine::GetTextHeight.
Decide the previous paragraph's emptiness in onParagraphRemoving, where the
editing outliner with the live text is at hand, and pass it down to
disposeTextRange. This drops the UNO read and its layout side effect for
every case, animated or not.
Includes a unit test that executes the sequence described at the beginning;
without the fix, it fails with an assert.
Signed-off-by: Jan Holesovsky <kendy@collabora.com>
Change-Id: Id6ae3c8a121f036f87fa43ce134541376ff0b179
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/3669
Reviewed-by: Noel Grandin <noel.grandin@collabora.com>
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
(cherry picked from commit 89a1a74dc95054698c1097b0aea0466ad6a6e092)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/206213
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
In the past, weld.hxx used to contain the class
definitions for weld::Widget and all subclasses.
By now, weld::Widget and almost all subclasses have
been moved to separate headers, to make it easier
to keep the overview and to avoid having to
recompile ~all UI code when one class changes.
By now, only weld::Button is left in weld.hxx.
Rename the header to Button.hxx.
Drop weld.hxx includes and instead add Button.hxx
includes (or weld::Button forward declarations) where
weld::Button is used.
(Don't simply replace all weld.hxx includes with
Button.hxx ones, since many of them were for the
use of other widgets that have since been moved
to their own headers.)
Add further includes where needed now that the
(direct or transitive) includes of weld.hxx were removed.
Change-Id: I8ea6201446a418d5e38b46337059dcd517ee29d7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/205937
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
...copying slides between documents
Open both presentations bugdocs, right click on the preview of slide 1
in the source document, copy, right click on the preview of the last
slide in the target document, paste, nothing happens in product builds.
In debug builds, we hit an assert due to a non-async dialog:
coolforkit-ns: /home/vmiklos/git/collaboraonline/online/engine/vcl/source/window/dialog.cxx:947: bool Dialog::ImplStartExecute(bool): Assertion `!"A dialog without a notifier: make me async / properly set up"' failed.
Converting the appearing dialog to async is not trivial, because
sd::slidesorter::controller::Clipboard::PasteSlidesFromSystemClipboard()
first calls InsertFileAsPage() (part of that triggers the dialog) and
then later it also calls InsertBookmarkAsObject(), so a number of
callers would need an async conversion. Instead do what other
presentation software (e.g. PowerPoint does): when pasting slides in,
just scale the objects unconditionally.
The test uses the same trick as commit
3db35199e711da81032c40cf525eb9fb3e792851 (Fix Impress textbox background
changing on cross-document paste in engine and online., 2026-05-11) to
trigger a slide sorter paste.
Signed-off-by: Miklos Vajna <vmiklos@collabora.com>
Change-Id: Ia410f57efbaf0a514ae2fc3fb2a645be76bb799d
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/3077
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit 350d2c9da46659781095361e0ded395102b9619f)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/205700
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
MoveSection's downward branch computed nTargetPage with an extra
-nSrcCount adjustment, assuming MoveSelectedPages pre-removes the
selected pages. It doesn't — MovePages() moves pages in place and
interprets nTargetPage in the current ordering. The adjustment
caused the source block to land in the middle of the target
section instead of after it, while section metadata still claimed
the split contents as one section.
Use nTargetEnd - 1 directly. Extend the Move{Up,Down}{PPTX,ODP}
tests to capture each section's SdPage* set before the move and
assert the same set lands under the expected section afterwards —
count-only assertions missed this class of failure.
Change-Id: I73bdd8e5b1c3a0c0687385fd6f16a3b151f0d481
Reviewed-on: https://gerrit.collaboraoffice.com/c/core/+/1271
Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/1620
Tested-by: Pranam Lashkari <lpranam@collabora.com>
Reviewed-by: Pranam Lashkari <lpranam@collabora.com>
(cherry picked from commit 71fbe7ad6c1af884b8a998ca754977e75027d747)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/205183
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
The "SlideSections" UNO property is just a view onto our own
in-memory maSections (the getter calls GetSectionsAsPropertyValues,
the setter calls SetSectionsFromPropertyValues). Calling
setPropertyValue from SaveToDocument was therefore a roundtrip:
maSections -> PropertyValue -> maSections, with no actual
persistence. The data was already in its final place after each
mutation.
Remove SaveToDocument() and all its callers; mutations to
maSections are the final state. Also drop the includes that
were only needed by it: DrawDocShell.hxx, XPropertySet.hpp,
XPropertySetInfo.hpp, XModel.hpp, sal/log.hxx.
Change-Id: I2fda95a52ba067b69f4492b8abaec7e1eb145f7b
Reviewed-on: https://gerrit.collaboraoffice.com/c/core/+/1232
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/1618
Tested-by: Pranam Lashkari <lpranam@collabora.com>
Reviewed-by: Pranam Lashkari <lpranam@collabora.com>
(cherry picked from commit b43943b73d5b98b180eac2093bc0fe9c1f58192c)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/205171
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
- Replaced platform-dependent sal_uLong with
tools::Long for UI coordinates, scaling, and zoom factors.
- Used sal_uInt32 for height and weigth
- Used 16bit Integer for example in outlview.cxx
- Use size_t for counting and iterating
Change-Id: I1eab0a88b61a93715fec116e699a826e9e38dc74
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200665
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Move the class out of weld.hxx into its own header, in
order to make it easier to keep an overview and to avoid
having to recompile ~all UI code when the class is
modified.
Change-Id: I5b23b02151c75bb49831a2bbf8d515eb0b54415e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199068
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
Previously, new Draw/Impress documents defaulted to left/right paragraph
alignment, depending on application language. This change updates Draw
and Impress to instead use the language-independent start alignment by
default.
Change-Id: Ic11dd496904d64906f442ace5d850310d1d55a84
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198323
Reviewed-by: Jonathan Clark <jonathan@libreoffice.org>
Tested-by: Jenkins
these were skipped in previous runs, since they contain some code behind #if
After inspecting these, it seems like the removals should not cause trouble.
This also shaves off some 140M input
Change-Id: Ie1f57174dd6fec3ba5b0b91eb0688acdc1a8143d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197494
Tested-by: Jenkins
Reviewed-by: Gabor Kelemen <gabor.kelemen@collabora.com>
Previously, new Writer documents defaulted to left/right paragraph
alignment, depending on application language. This change updates Writer
to instead use the language-independent start alignment by default.
Change-Id: Ic385bb8e38234d29365d21f46a11ebb115523970
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197309
Tested-by: Jenkins
Reviewed-by: Jonathan Clark <jonathan@libreoffice.org>