sw floattable, insert UI: fix default frame width when inserting a new one
Insert -> Frame -> Frame presented a dialog which stated the width of
the new frame will be 2cm, but the width was ~zero.
This is a regression from commit
9da7b1592e
(sw: remove all uses of MM50
with (added) o3tl::toTwip, 2021-07-23). Previously the code worked
because the 2cm was speficified as MM50*4 (283*4=1132 twips), and we
compared this to the 2cm from the UI, which had no rounding errors
(283.46456692913387*4=1134 twips), and this 1132 vs 1134 meant the
dialog put the unchanged size to the output item set. Now we don't have
rounding errors anymore, so we have 1134 everywhere, which means the
dialog doesn't specify a default size, but no other code would do it,
resulting in a frame with minimal width, which is clearly not wanted.
Fix the problem by checking if this will be a new frame, and if so, the
dialog should send the default size to the caller, even if the user
didn't customize the size. This restores the lost 2cm default width
while keeping the rounding improvements.
This requires running the test in its own process, because the
measurement unit is only loaded once from the config and the rounding
error is not hit with the default inches.
Change-Id: I9a5945fdd0e5cd64ff8bd84f95f11be5277b8d18
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159050
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
This commit is contained in:
parent
ca650cad8f
commit
4f1121255e
3 changed files with 27 additions and 1 deletions
|
@ -15,4 +15,6 @@ $(eval $(call gb_UITest_set_defs,sw_ui_frmdlg, \
|
|||
TDOC="$(SRCDIR)/sw/qa/uitest/data" \
|
||||
))
|
||||
|
||||
$(eval $(call gb_UITest_avoid_oneprocess,sw_ui_frmdlg))
|
||||
|
||||
# vim: set noet sw=4 ts=4:
|
||||
|
|
|
@ -62,4 +62,22 @@ class Test(UITestCase):
|
|||
# and floating tables.
|
||||
self.assertEqual(get_state_as_dict(xFlysplit)['Visible'], "false")
|
||||
|
||||
def test_insert_frame_dialog(self):
|
||||
# Change from inch to cm to hit the rounding error. 2 means Centimeter, see
|
||||
# officecfg/registry/schema/org/openoffice/Office/Writer.xcs.
|
||||
with self.ui_test.set_config('/org.openoffice.Office.Writer/Layout/Other/MeasureUnit', 2):
|
||||
# Given a Writer document:
|
||||
with self.ui_test.create_doc_in_start_center("writer") as xComponent:
|
||||
# When inserting a new frame with the default width:
|
||||
with self.ui_test.execute_dialog_through_command(".uno:InsertFrame") as xDialog:
|
||||
xWidth = xDialog.getChild("width")
|
||||
frame_width = float(get_state_as_dict(xWidth)["Value"])
|
||||
# Then make sure the width is not zero:
|
||||
# cm -> mm100
|
||||
expected_mm100 = frame_width * 1000
|
||||
# Without the accompanying fix in place, this test would have failed with:
|
||||
# AssertionError: 0 != 2000.0
|
||||
# i.e. the width was empty instead of the size from the UI.
|
||||
self.assertEqual(xComponent.TextFrames.Frame1.Size.Width, expected_mm100)
|
||||
|
||||
# vim: set shiftwidth=4 softtabstop=4 expandtab:
|
||||
|
|
|
@ -1264,7 +1264,13 @@ bool SwFramePage::FillItemSet(SfxItemSet *rSet)
|
|||
|
||||
pOldItem = GetOldItem(*rSet, RES_FRM_SIZE);
|
||||
|
||||
if ((pOldItem && aSz != *pOldItem) || (!pOldItem && !m_bFormat) ||
|
||||
bool bSizeChanged = pOldItem && aSz != *pOldItem;
|
||||
if (!bSizeChanged && m_bNew)
|
||||
{
|
||||
// If no custom size is provided, always set a size for a new frame, to avoid ~zero width.
|
||||
bSizeChanged = true;
|
||||
}
|
||||
if (bSizeChanged || (!pOldItem && !m_bFormat) ||
|
||||
(m_bFormat &&
|
||||
(aSz.GetWidth() > 0 || aSz.GetWidthPercent() > 0) &&
|
||||
(aSz.GetHeight() > 0 || aSz.GetHeightPercent() > 0)))
|
||||
|
|
Loading…
Reference in a new issue