diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2023-09-06 08:30:10 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2023-09-06 14:11:37 +0200 |
commit | d29c1a90ae77dde7c87c51f21e859fa254f23e01 (patch) | |
tree | bdf91eb5bee76ad068b98149312cee02c11ed181 /svgio/qa | |
parent | 3ce2232c05f13a5b1303156d2b0321009b017620 (diff) |
sw floattable, nesting: fix layout crash
The manually created ODT bugdoc has a nested floating table. The outer
table is just 1 cell, the inner one has 2 rows: it's meant to span over
2 pages. This bugdoc currently crashes the layout.
In practice what happens is that the inner fly would split + move the
follow to the next page, so we hit a case where the inner fly is marked
to be "in table", but it won't have a table parent anymore, so the
layout crashes.
As a first step, fix the crash:
1) SwFrame::GetNextFlyLeaf() should only split the inner fly and its
anchor (not move it), the move will happen with the split of the
outer fly.
2) Fix SwToContentAnchoredObjectPosition::CalcPosition() to move the
inner, follow fly down (it should not overlap with its master). This
was not visible previously, as we manually moved the follow fly to the
next page, but now we need a vertical cut position that is between the
inner master and follow flys.
3) lcl_ArrangeLowers(), called by SwCellFrame::Format() now updates the
position of follow flys, so exactly two master flys are on page 1 and
two follow flys are on page 2.
This is related to tdf#55160, but it's not yet focusing on DOCX, where
nested floating tables are currently disabled at a filter level. Also,
this fixes the crash, but the position of the inner follow table still
needs fixing.
Change-Id: Ife42b64cda53946a8262ddabfd000803620c4ff1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156587
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
Diffstat (limited to 'svgio/qa')
0 files changed, 0 insertions, 0 deletions