Rebased ref, commits from common ancestor:
commit e8381b5fe0e8c31040e0aa1167d2583d784f0956
Author: Caolán McNamara <[email protected]>
AuthorDate: Sun Sep 1 14:40:46 2024 +0100
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:24 2024 +0200
use final upstream merged fix for this boost issue
Change-Id: I33a347d3c0efc4a38389d525f3c9e5f41a957d47
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172723
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <[email protected]>
diff --git a/external/libcmis/0001-Fix-boost-1.86-breakage.patch
b/external/libcmis/0001-Fix-boost-1.86-breakage.patch
new file mode 100644
index 000000000000..ef398dfcc98b
--- /dev/null
+++ b/external/libcmis/0001-Fix-boost-1.86-breakage.patch
@@ -0,0 +1,47 @@
+From dfcb642a491f7ec2ae52e3e83d31bb6cdf3670c2 Mon Sep 17 00:00:00 2001
+From: David Seifert <[email protected]>
+Date: Sat, 31 Aug 2024 12:39:39 +0200
+Subject: [PATCH] Fix boost 1.86 breakage
+
+The fix does not break building against <1.86 since we're now accessing the
+object representation of the return value.
+
+Fixes #67
+---
+ src/libcmis/xml-utils.cxx | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/src/libcmis/xml-utils.cxx b/src/libcmis/xml-utils.cxx
+index e487d17..cdf088f 100644
+--- a/src/libcmis/xml-utils.cxx
++++ b/src/libcmis/xml-utils.cxx
+@@ -531,16 +531,22 @@ namespace libcmis
+ boost::uuids::detail::sha1 sha1;
+ sha1.process_bytes( str.c_str(), str.size() );
+
+- unsigned int digest[5];
++ // on boost < 1.86.0, digest_type is typedef'd as unsigned int[5]
++ // on boost >= 1.86.0, digest_type is typedef'd as unsigned char[20]
++ boost::uuids::detail::sha1::digest_type digest;
+ sha1.get_digest( digest );
+
++ // by using a pointer to unsigned char, we can read the
++ // object representation of either typedef.
++ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(
digest );
++
+ stringstream out;
+- // Setup writing mode. Every number must produce eight
++ // Setup writing mode. Every number must produce two
+ // hexadecimal digits, including possible leading 0s, or we get
+ // less than 40 digits as result.
+ out << hex << setfill('0') << right;
+- for ( int i = 0; i < 5; ++i )
+- out << setw(8) << digest[i];
++ for ( int i = 0; i < sizeof( digest ); ++ptr, ++i )
++ out << setw(2) << static_cast<int>( *ptr );
+ return out.str();
+ }
+
+--
+2.45.1
+
diff --git a/external/libcmis/UnpackedTarball_libcmis.mk
b/external/libcmis/UnpackedTarball_libcmis.mk
index 69bb6dd4b5c3..e47c7f81ef63 100644
--- a/external/libcmis/UnpackedTarball_libcmis.mk
+++ b/external/libcmis/UnpackedTarball_libcmis.mk
@@ -25,7 +25,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,libcmis,\
external/libcmis/0001-cppcheck-operatorEqVarError-in-src-libcmis-http-sess.patch
\
external/libcmis/0001-Take-into-account-m_CurlInitProtocolsFunction-in-cop.patch
\
external/libcmis/initprotocols.patch.1 \
- external/libcmis/boost-1.86.0.patch.1 \
+ external/libcmis/0001-Fix-boost-1.86-breakage.patch \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/libcmis/boost-1.86.0.patch.1
b/external/libcmis/boost-1.86.0.patch.1
deleted file mode 100644
index 74d6df54f832..000000000000
--- a/external/libcmis/boost-1.86.0.patch.1
+++ /dev/null
@@ -1,12 +0,0 @@
---- libcmis/src/libcmis/xml-utils.cxx 2024-08-22 12:06:16.595963754 +0200
-+++ libcmis/src/libcmis/xml-utils.cxx 2024-08-22 12:06:29.987877405 +0200
-@@ -536,7 +536,7 @@
- sha1.process_bytes( str.c_str(), str.size() );
-
- unsigned int digest[5];
-- sha1.get_digest( digest );
-+ sha1.get_digest(
reinterpret_cast<boost::uuids::detail::sha1::digest_type&>(digest) );
-
- stringstream out;
- // Setup writing mode. Every number must produce eight
-
commit b60b5c0e95c707be2c6c5d60e0305f5eb4e80859
Author: Xisco Fauli <[email protected]>
AuthorDate: Thu Aug 22 12:10:43 2024 +0200
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:23 2024 +0200
libcmis: fix build against boost-1.86.0
Based on https://github.com/tdf/libcmis/issues/67
Change-Id: I0de90a423110b03a649bd7b20f7392f3aa5a45c3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172246
Reviewed-by: Xisco Fauli <[email protected]>
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <[email protected]>
diff --git a/external/libcmis/UnpackedTarball_libcmis.mk
b/external/libcmis/UnpackedTarball_libcmis.mk
index d0b8e2b5c7bc..69bb6dd4b5c3 100644
--- a/external/libcmis/UnpackedTarball_libcmis.mk
+++ b/external/libcmis/UnpackedTarball_libcmis.mk
@@ -25,6 +25,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,libcmis,\
external/libcmis/0001-cppcheck-operatorEqVarError-in-src-libcmis-http-sess.patch
\
external/libcmis/0001-Take-into-account-m_CurlInitProtocolsFunction-in-cop.patch
\
external/libcmis/initprotocols.patch.1 \
+ external/libcmis/boost-1.86.0.patch.1 \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/libcmis/boost-1.86.0.patch.1
b/external/libcmis/boost-1.86.0.patch.1
new file mode 100644
index 000000000000..74d6df54f832
--- /dev/null
+++ b/external/libcmis/boost-1.86.0.patch.1
@@ -0,0 +1,12 @@
+--- libcmis/src/libcmis/xml-utils.cxx 2024-08-22 12:06:16.595963754 +0200
++++ libcmis/src/libcmis/xml-utils.cxx 2024-08-22 12:06:29.987877405 +0200
+@@ -536,7 +536,7 @@
+ sha1.process_bytes( str.c_str(), str.size() );
+
+ unsigned int digest[5];
+- sha1.get_digest( digest );
++ sha1.get_digest(
reinterpret_cast<boost::uuids::detail::sha1::digest_type&>(digest) );
+
+ stringstream out;
+ // Setup writing mode. Every number must produce eight
+
commit 451a8f8d53b083fa2c528bd0e63f5a881e734150
Author: Thorsten Behrens <[email protected]>
AuthorDate: Tue Oct 22 23:08:45 2024 +0200
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:23 2024 +0200
Update .gitreview default branch
Change-Id: I1fb257f6b9cd753a874242dce2bf308a68fc138d
diff --git a/.gitreview b/.gitreview
index 90dbf14f3add..439ba496a4e1 100644
--- a/.gitreview
+++ b/.gitreview
@@ -3,5 +3,4 @@ host=gerrit.libreoffice.org
port=29418
project=core
defaultremote=logerrit
-defaultbranch=libreoffice-24-8
-
+defaultbranch=feature/cib_contract49d
commit 112da50cd361134b3f2c29854b9b4c74dc8f8a51
Author: Oliver Specht <[email protected]>
AuthorDate: Tue Oct 8 10:46:24 2024 +0200
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:23 2024 +0200
tdf#132274 follow-up fix to Writer zoom options
Applying the zoom value works now as expected. The prior
fix mixed up zoom value and 100% and didn't always apply
special zoom values.
Change-Id: I7cf1f34fca5724eea14339535e7614cfecffdd79
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/174688
Reviewed-by: Thorsten Behrens <[email protected]>
Tested-by: Jenkins
diff --git a/sw/source/ui/config/optpage.cxx b/sw/source/ui/config/optpage.cxx
index 6d7534259ebe..d30ca4eeb61e 100644
--- a/sw/source/ui/config/optpage.cxx
+++ b/sw/source/ui/config/optpage.cxx
@@ -434,9 +434,11 @@ bool SwContentOptPage::FillItemSet(SfxItemSet* rSet)
aElem.SetDefaultZoomValue(100);
}
else
+ {
aElem.SetDefaultZoomType(SvxZoomType::PERCENT);
+
aElem.SetDefaultZoomValue(m_xZoomValue->get_value(FieldUnit::PERCENT));
+ }
}
- aElem.SetDefaultZoomValue(m_xZoomValue->get_value(FieldUnit::PERCENT));
bool bRet = !pOldAttr || aElem != *pOldAttr;
if(bRet)
diff --git a/sw/source/uibase/app/swmodul1.cxx
b/sw/source/uibase/app/swmodul1.cxx
index 4f4bcd780e31..e131eb8b0a58 100644
--- a/sw/source/uibase/app/swmodul1.cxx
+++ b/sw/source/uibase/app/swmodul1.cxx
@@ -99,7 +99,7 @@ static void lcl_SetUIPrefs(const SwViewOption &rPref, SwView*
pView, SwViewShell
pView->CreateTab();
else
pView->KillTab();
-
+ pView->SetZoom(rPref.GetZoomType(), rPref.GetZoom(), true);
pView->GetPostItMgr()->PrepareView(true);
}
commit cfcbab4d2d4f125efef6e3f9612c467a41cb0cf4
Author: Caolán McNamara <[email protected]>
AuthorDate: Wed Sep 18 08:22:46 2024 +0100
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:23 2024 +0200
cid#1619460 Uninitialized scalar field
since:
commit 4855bbfa4d0cbc6376ab2a40151886f84fafac40
CommitDate: Tue Sep 17 03:44:46 2024 +0200
tdf#132274 add zoom defaults to Writer options
Change-Id: Ie7dae9add87fe14c87b53d9b86d77a84ce0c2a7a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173587
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <[email protected]>
diff --git a/sw/source/uibase/config/cfgitems.cxx
b/sw/source/uibase/config/cfgitems.cxx
index 99f4fa38e5ea..0557fd90bca8 100644
--- a/sw/source/uibase/config/cfgitems.cxx
+++ b/sw/source/uibase/config/cfgitems.cxx
@@ -126,6 +126,9 @@ SwElemItem::SwElemItem(const SwViewOption& rVOpt) :
m_bShowChangesInMargin = rVOpt.IsShowChangesInMargin();
m_bFieldHiddenText = rVOpt.IsShowHiddenField();
m_bShowHiddenPara = rVOpt.IsShowHiddenPara();
+ m_bDefaultZoom = false;
+ m_eDefaultZoomType = rVOpt.GetZoomType();
+ m_nDefaultZoomValue = rVOpt.GetZoom();
}
SwElemItem* SwElemItem::Clone( SfxItemPool* ) const
commit df16abb9aa24361b656d171bee2dbf275fd49f28
Author: Oliver Specht <[email protected]>
AuthorDate: Mon Aug 5 13:53:25 2024 +0200
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:23 2024 +0200
tdf#132274 add zoom defaults to Writer options
Zoom value is sometimes stored at documents. But users
might prefer local zoom settings over stored values.
Users are now able to set preferred values in Writer's
option dialog.
Change-Id: Ia1c3926aac3dd236f15f84d8dc535d8aa3758238
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171482
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens <[email protected]>
diff --git a/officecfg/registry/schema/org/openoffice/Office/Writer.xcs
b/officecfg/registry/schema/org/openoffice/Office/Writer.xcs
index 124e0a3dd931..b2d7d503b35b 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Writer.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Writer.xcs
@@ -901,6 +901,59 @@
<value>1</value>
</prop>
</group>
+ <group oor:name="Zoom">
+ <info>
+ <desc>Contains zoom settings of the document view.</desc>
+ </info>
+ <prop oor:name="DefaultZoom" oor:type="xs:boolean"
oor:nillable="false">
+ <!-- UIHints: Tools - Options - Text document Contents -
[Section] ´Zoom-->
+ <info>
+ <desc>Determines whether zoom settings previously selected
are applied to new/loaded document view or predefined zoom values are
applied</desc>
+ </info>
+ <value>true</value>
+ </prop>
+ <prop oor:name="ZoomType" oor:type="xs:int" oor:nillable="false">
+ <!-- UIHints: Tools - Options - Text document Contents -
[Section] ´Zoom-->
+ <info>
+ <desc>Contains predefined zoom type</desc>
+ </info>
+ <constraints>
+ <enumeration oor:value="0">
+ <info>
+ <desc>PERCENT</desc>
+ </info>
+ </enumeration>
+ <enumeration oor:value="1">
+ <info>
+ <desc>OPTIMAL</desc>
+ </info>
+ </enumeration>
+ <enumeration oor:value="2">
+ <info>
+ <desc>WHOLEPAGE</desc>
+ </info>
+ </enumeration>
+ <enumeration oor:value="3">
+ <info>
+ <desc>PAGEWIDTH</desc>
+ </info>
+ </enumeration>
+ <enumeration oor:value="4">
+ <info>
+ <desc>PAGEWIDTH_NOBORDER</desc>
+ </info>
+ </enumeration>
+ </constraints>
+ <value>0</value>
+ </prop>
+ <prop oor:name="ZoomValue" oor:type="xs:int" oor:nillable="false">
+ <!-- UIHints: Tools - Options - Text document Contents -
[Section] ´Zoom-->
+ <info>
+ <desc>Contains predefined zoom value in percent.</desc>
+ </info>
+ <value>100</value>
+ </prop>
+ </group>
<group oor:name="NonprintingCharacter">
<info>
<desc>Contains settings for the visibility of various non-printing
characters.</desc>
diff --git a/sw/qa/uitest/options/optionsDialog.py
b/sw/qa/uitest/options/optionsDialog.py
index 790d30c9b7ed..48c1d5d5bc6c 100644
--- a/sw/qa/uitest/options/optionsDialog.py
+++ b/sw/qa/uitest/options/optionsDialog.py
@@ -7,6 +7,7 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
from uitest.framework import UITestCase
+from uitest.uihelper.common import get_state_as_dict
class optionsDialog(UITestCase):
@@ -48,5 +49,34 @@ class optionsDialog(UITestCase):
xApplyBtn.executeAction("CLICK", tuple())
+ def test_tdf132274Text(self):
+ with self.ui_test.create_doc_in_start_center("writer"):
+
+ with
self.ui_test.execute_dialog_through_command(".uno:OptionsTreeDialog") as
xDialog:
+ xPages = xDialog.getChild("pages")
+ xWriterEntry = xPages.getChild('3')
+ xWriterEntry.executeAction("EXPAND", tuple())
+ xContentEntry = xWriterEntry.getChild('1')
+ xContentEntry.executeAction("SELECT", tuple())
+ xOptimal = xDialog.getChild("zoomoptimal")
+ self.assertEqual(get_state_as_dict(xOptimal)['Visible'],
"true")
+ xApplyBtn = xDialog.getChild("apply")
+
+ def test_tdf132274Web(self):
+ with self.ui_test.create_doc_in_start_center("writer"):
+
+ with
self.ui_test.execute_dialog_through_command(".uno:OptionsTreeDialog") as
xDialog:
+ xPages = xDialog.getChild("pages")
+ xWriterWebEntry = xPages.getChild('4')
+ xWriterWebEntry.executeAction("EXPAND", tuple())
+ xContentWebEntry = xWriterWebEntry.getChild('1')
+ xContentWebEntry.executeAction("SELECT", tuple())
+ try:
+ xOptimalWeb = xDialog.getChild("zoomoptimal")
+ raise RuntimeError("Zoom controls visible in Web dialog")
+ except Exception:
+ xApplyBtn = xDialog.getChild("apply")
+
+
# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sw/source/ui/config/optpage.cxx b/sw/source/ui/config/optpage.cxx
index db57bc5455ce..6d7534259ebe 100644
--- a/sw/source/ui/config/optpage.cxx
+++ b/sw/source/ui/config/optpage.cxx
@@ -1,3 +1,4 @@
+
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
@@ -122,6 +123,15 @@ SwContentOptPage::SwContentOptPage(weld::Container* pPage,
weld::DialogControlle
, m_xFieldHiddenImg(m_xBuilder->weld_widget("lockhiddentextfield"))
, m_xFieldHiddenParaCB(m_xBuilder->weld_check_button("hiddenparafield"))
, m_xFieldHiddenParaImg(m_xBuilder->weld_widget("lockhiddenparafield"))
+ , m_xZoomFrame(m_xBuilder->weld_frame("zoomframe"))
+ , m_xZoomLatestRB(m_xBuilder->weld_radio_button("zoomlatest"))
+ , m_xZoomPreferredRB(m_xBuilder->weld_radio_button("zoompreferred"))
+ , m_xZoomOptimalRB(m_xBuilder->weld_radio_button("zoomoptimal"))
+ , m_xZoomWidthAndHeightRB(m_xBuilder->weld_radio_button("zoomfitwandh"))
+ , m_xZoomWidthRB(m_xBuilder->weld_radio_button("zoomfitw"))
+ , m_xZoom100RB(m_xBuilder->weld_radio_button("zoom100pc"))
+ , m_xZoomCustomRB(m_xBuilder->weld_radio_button("zoomcustom"))
+ , m_xZoomValue(m_xBuilder->weld_metric_spin_button("zoomvalue",
FieldUnit::PERCENT))
{
m_xShowOutlineContentVisibilityButton->connect_toggled(LINK(this,
SwContentOptPage, ShowOutlineContentVisibilityButtonHdl));
@@ -133,6 +143,29 @@ SwContentOptPage::SwContentOptPage(weld::Container* pPage,
weld::DialogControlle
m_xSettingsLabel->hide();
m_xMetricLabel->hide();
m_xMetricLB->hide();
+
+ Link<weld::Toggleable&, void> aZoomLatestLink = LINK(this,
SwContentOptPage, ZoomLatestHdl);
+ m_xZoomLatestRB->connect_toggled(aZoomLatestLink);
+ m_xZoomPreferredRB->connect_toggled(aZoomLatestLink);
+ Link<weld::Toggleable&, void> aZoomLink = LINK(this, SwContentOptPage,
ZoomHdl);
+ m_xZoomOptimalRB->connect_toggled(aZoomLink);
+ m_xZoomWidthAndHeightRB->connect_toggled(aZoomLink);
+ m_xZoomWidthRB->connect_toggled(aZoomLink);
+ m_xZoom100RB->connect_toggled(aZoomLink);
+ m_xZoomCustomRB->connect_toggled(aZoomLink);
+ m_xZoomValue->set_range(MINZOOM, MAXZOOM, FieldUnit::PERCENT);
+ }
+ else
+ {
+ m_xZoomFrame->hide();
+ m_xZoomLatestRB->hide();
+ m_xZoomPreferredRB->hide();
+ m_xZoomOptimalRB->hide();
+ m_xZoomWidthAndHeightRB->hide();
+ m_xZoomWidthRB->hide();
+ m_xZoom100RB->hide();
+ m_xZoomCustomRB->hide();
+ m_xZoomValue->hide();
}
if(!SvtCJKOptions::IsVerticalTextEnabled() )
@@ -285,6 +318,26 @@ void SwContentOptPage::Reset(const SfxItemSet* rSet)
m_xFieldHiddenParaCB->set_active( pElemAttr->m_bShowHiddenPara );
m_xFieldHiddenParaCB->set_sensitive(!bReadOnly);
m_xFieldHiddenParaImg->set_visible(bReadOnly);
+
+ if (!bWebOptionsPage)
+ {
+ m_xZoomLatestRB->set_active(pElemAttr->IsDefaultZoom());
+ m_xZoomPreferredRB->set_active(!pElemAttr->IsDefaultZoom());
+ switch (pElemAttr->GetDefaultZoomType())
+ {
+ case SvxZoomType::OPTIMAL:
m_xZoomOptimalRB->set_active(true); break;
+ case SvxZoomType::WHOLEPAGE:
m_xZoomWidthAndHeightRB->set_active(true); break;
+ case SvxZoomType::PAGEWIDTH: m_xZoomWidthRB->set_active(true);
break;
+ case SvxZoomType::PERCENT:
+ m_xZoom100RB->set_active(pElemAttr->GetDefaultZoomValue()
== 100);
+
m_xZoomCustomRB->set_active(pElemAttr->GetDefaultZoomValue() != 100);
+ break;
+ default:
+ break;
+ }
+ m_xZoomValue->set_value(pElemAttr->GetDefaultZoomValue(),
FieldUnit::PERCENT);
+ ZoomLatestHdl(*m_xZoomLatestRB);
+ }
}
bReadOnly = !bWebOptionsPage ?
officecfg::Office::Writer::Layout::Window::HorizontalRulerUnit::isReadOnly() :
@@ -366,6 +419,25 @@ bool SwContentOptPage::FillItemSet(SfxItemSet* rSet)
aElem.m_bFieldHiddenText = m_xFieldHiddenCB->get_active();
aElem.m_bShowHiddenPara = m_xFieldHiddenParaCB->get_active();
+ if (m_xZoomLatestRB->is_visible())
+ {
+ aElem.SetDefaultZoom(m_xZoomLatestRB->get_active());
+ if (m_xZoomOptimalRB->get_active())
+ aElem.SetDefaultZoomType(SvxZoomType::OPTIMAL);
+ else if (m_xZoomWidthAndHeightRB->get_active())
+ aElem.SetDefaultZoomType(SvxZoomType::WHOLEPAGE);
+ else if (m_xZoomWidthRB->get_active())
+ aElem.SetDefaultZoomType(SvxZoomType::PAGEWIDTH);
+ else if (m_xZoom100RB->get_active())
+ {
+ aElem.SetDefaultZoomType(SvxZoomType::PERCENT);
+ aElem.SetDefaultZoomValue(100);
+ }
+ else
+ aElem.SetDefaultZoomType(SvxZoomType::PERCENT);
+ }
+ aElem.SetDefaultZoomValue(m_xZoomValue->get_value(FieldUnit::PERCENT));
+
bool bRet = !pOldAttr || aElem != *pOldAttr;
if(bRet)
bRet = nullptr != rSet->Put(aElem);
@@ -408,6 +480,30 @@ IMPL_LINK(SwContentOptPage,
ShowOutlineContentVisibilityButtonHdl, weld::Togglea
m_xTreatSubOutlineLevelsAsContent->set_sensitive(rBox.get_active());
}
+IMPL_LINK_NOARG(SwContentOptPage, ZoomLatestHdl, weld::Toggleable&, void)
+{
+ bool bZoomPreferred = m_xZoomPreferredRB->get_active();
+ m_xZoomOptimalRB->set_sensitive(bZoomPreferred);
+ m_xZoomWidthAndHeightRB->set_sensitive(bZoomPreferred);
+ m_xZoomWidthRB->set_sensitive(bZoomPreferred);
+ m_xZoom100RB->set_sensitive(bZoomPreferred);
+ m_xZoomCustomRB->set_sensitive(bZoomPreferred);
+ m_xZoomValue->set_sensitive(bZoomPreferred);
+ ZoomHdl(*m_xZoomOptimalRB);
+}
+IMPL_LINK_NOARG(SwContentOptPage, ZoomHdl, weld::Toggleable&, void)
+{
+ if (m_xZoomCustomRB->get_active() && m_xZoomCustomRB->get_sensitive())
+ {
+ m_xZoomValue->set_sensitive(true);
+ m_xZoomValue->grab_focus();
+ }
+ else
+ {
+ m_xZoomValue->set_sensitive(false);
+ }
+}
+
// TabPage Printer additional settings
SwAddPrinterTabPage::SwAddPrinterTabPage(weld::Container* pPage,
weld::DialogController* pController,
const SfxItemSet& rCoreSet)
diff --git a/sw/source/uibase/app/appopt.cxx b/sw/source/uibase/app/appopt.cxx
index f21fc733c92a..32bc1f8d4cae 100644
--- a/sw/source/uibase/app/appopt.cxx
+++ b/sw/source/uibase/app/appopt.cxx
@@ -107,13 +107,17 @@ std::optional<SfxItemSet> SwModule::CreateItemSet(
sal_uInt16 nId )
aRet(GetPool());
aRet.Put( SwDocDisplayItem( aViewOpt ) );
- aRet.Put( SwElemItem( aViewOpt ) );
+ SwElemItem aElemItem( aViewOpt );
if( bTextDialog )
{
aRet.Put( SwShadowCursorItem( aViewOpt ));
aRet.Put( SfxBoolItem(FN_PARAM_CRSR_IN_PROTECTED,
aViewOpt.IsCursorInProtectedArea()));
aRet.Put(SwFmtAidsAutoComplItem(aViewOpt));
+ aElemItem.SetDefaultZoom(pPref->IsDefaultZoom());
+ aElemItem.SetDefaultZoomType(pPref->GetDefaultZoomType());
+ aElemItem.SetDefaultZoomValue(pPref->GetDefaultZoomValue());
}
+ aRet.Put( aElemItem );
if( pAppView )
{
@@ -263,6 +267,12 @@ void SwModule::ApplyItemSet( sal_uInt16 nId, const
SfxItemSet& rSet )
if( const SwElemItem* pElemItem = rSet.GetItemIfSet( FN_PARAM_ELEM, false
) )
{
pElemItem->FillViewOptions( aViewOpt );
+ if (bTextDialog)
+ {
+ pPref->SetDefaultZoom(pElemItem->IsDefaultZoom());
+ pPref->SetDefaultZoomType(pElemItem->GetDefaultZoomType());
+ pPref->SetDefaultZoomValue(pElemItem->GetDefaultZoomValue());
+ }
// Outline-folding options
if (SwWrtShell* pWrtShell = GetActiveWrtShell())
diff --git a/sw/source/uibase/config/cfgitems.cxx
b/sw/source/uibase/config/cfgitems.cxx
index 5b16a148f845..99f4fa38e5ea 100644
--- a/sw/source/uibase/config/cfgitems.cxx
+++ b/sw/source/uibase/config/cfgitems.cxx
@@ -104,6 +104,9 @@ SwElemItem::SwElemItem() :
m_bShowChangesInMargin =
m_bFieldHiddenText =
m_bShowHiddenPara = false;
+ m_bDefaultZoom = true;
+ m_eDefaultZoomType = SvxZoomType::PERCENT;
+ m_nDefaultZoomValue = 100;
}
SwElemItem::SwElemItem(const SwViewOption& rVOpt) :
@@ -149,7 +152,10 @@ bool SwElemItem::operator==( const SfxPoolItem& rAttr )
const
m_bTreatSubOutlineLevelsAsContent ==
rItem.m_bTreatSubOutlineLevelsAsContent &&
m_bShowChangesInMargin == rItem.m_bShowChangesInMargin &&
m_bFieldHiddenText == rItem.m_bFieldHiddenText &&
- m_bShowHiddenPara == rItem.m_bShowHiddenPara);
+ m_bShowHiddenPara == rItem.m_bShowHiddenPara &&
+ m_bDefaultZoom == rItem.m_bDefaultZoom &&
+ m_eDefaultZoomType == rItem.m_eDefaultZoomType &&
+ m_nDefaultZoomValue == rItem.m_nDefaultZoomValue );
}
void SwElemItem::FillViewOptions( SwViewOption& rVOpt) const
@@ -169,6 +175,12 @@ void SwElemItem::FillViewOptions( SwViewOption& rVOpt)
const
rVOpt.SetShowChangesInMargin( m_bShowChangesInMargin );
rVOpt.SetShowHiddenField(m_bFieldHiddenText );
rVOpt.SetShowHiddenPara(m_bShowHiddenPara );
+ if (!m_bDefaultZoom)
+ {
+ rVOpt.SetZoomType(m_eDefaultZoomType);
+ if (m_eDefaultZoomType == SvxZoomType::PERCENT)
+ rVOpt.SetZoom(m_nDefaultZoomValue);
+ }
}
// CTOR for empty Item
diff --git a/sw/source/uibase/config/usrpref.cxx
b/sw/source/uibase/config/usrpref.cxx
index d4c1849820d5..ea59c279b37e 100644
--- a/sw/source/uibase/config/usrpref.cxx
+++ b/sw/source/uibase/config/usrpref.cxx
@@ -57,7 +57,10 @@ SwMasterUsrPref::SwMasterUsrPref(bool bWeb) :
m_aCursorConfig(*this),
m_pWebColorConfig(bWeb ? new SwWebColorConfig(*this) : nullptr),
m_aFmtAidsAutoComplConfig(*this),
- m_bApplyCharUnit(false)
+ m_bApplyCharUnit(false),
+ m_bUseDefaultZoom(true),
+ m_nDefaultZoomValue(100),
+ m_eDefaultZoomType(SvxZoomType::PERCENT)
{
if (comphelper::IsFuzzing())
{
@@ -87,6 +90,8 @@ SwMasterUsrPref::~SwMasterUsrPref()
const auto g_UpdateLinkIndex = 17;
const auto g_DefaultAnchor = 25;
+const auto g_ZoomType = 27;
+const auto g_ZoomValue = 28;
Sequence<OUString> SwContentViewConfig::GetPropertyNames() const
{
@@ -117,12 +122,17 @@ Sequence<OUString>
SwContentViewConfig::GetPropertyNames() const
"Display/ShowOutlineContentVisibilityButton", // 22
"Display/TreatSubOutlineLevelsAsContent", // 23
"Display/ShowChangesInMargin", // 24
- "Display/DefaultAnchor" // 25
+ "Display/DefaultAnchor", // 25
+ "Zoom/DefaultZoom", // 26
+ "Zoom/ZoomType", // 27
+ "Zoom/ZoomValue" //28
};
#if defined(__GNUC__) && !defined(__clang__)
// clang 8.0.0 says strcmp isn't constexpr
static_assert(std::strcmp("Update/Link", aPropNames[g_UpdateLinkIndex]) ==
0);
static_assert(std::strcmp("Display/DefaultAnchor",
aPropNames[g_DefaultAnchor]) == 0);
+ static_assert(std::strcmp("Zoom/ZoomType", aPropNames[g_ZoomType]) == 0);
+ static_assert(std::strcmp("Zoom/ZoomValue", aPropNames[g_ZoomValue]) == 0);
#endif
const int nCount = m_bWeb ? 12 : SAL_N_ELEMENTS(aPropNames);
Sequence<OUString> aNames(nCount);
@@ -190,8 +200,13 @@ void SwContentViewConfig::ImplCommit()
case 23: bVal = m_rParent.IsTreatSubOutlineLevelsAsContent();
break;// "Display/TreatSubOutlineLevelsAsContent"
case 24: bVal = m_rParent.IsShowChangesInMargin(); break;//
"Display/ShowChangesInMargin"
case 25: pValues[nProp] <<= m_rParent.GetDefaultAnchor(); break;//
"Display/DefaultAnchor"
+ //TODO: Save zoom preferred, zoom type, zoom value
+ case 26: bVal = m_rParent.IsDefaultZoom(); break;//
"Zoom/DefaultZoom"
+ case 27:pValues[nProp] <<=
static_cast<sal_Int32>(m_rParent.GetDefaultZoomType()); break; //
"Zoom/ZoomType"
+ case 28: pValues[nProp] <<=
static_cast<sal_Int32>(m_rParent.GetDefaultZoomValue()); break; //
"Zoom/ZoomValue"
}
- if ((nProp != g_UpdateLinkIndex) && (nProp != g_DefaultAnchor))
+ if ((nProp != g_UpdateLinkIndex) && (nProp != g_DefaultAnchor) &&
+ (nProp != g_ZoomType) && (nProp != g_ZoomValue))
pValues[nProp] <<= bVal;
}
PutProperties(aNames, aValues);
@@ -209,7 +224,7 @@ void SwContentViewConfig::Load()
{
if(pValues[nProp].hasValue())
{
- bool bSet = ((nProp != g_UpdateLinkIndex) && (nProp !=
g_DefaultAnchor))
+ bool bSet = ((nProp != g_UpdateLinkIndex) && (nProp !=
g_DefaultAnchor) && (nProp != g_ZoomType)&& (nProp != g_ZoomValue))
&& *o3tl::doAccess<bool>(pValues[nProp]);
switch(nProp)
{
@@ -251,6 +266,21 @@ void SwContentViewConfig::Load()
m_rParent.SetDefaultAnchor(nSet);
}
break; // "Display/DefaultAnchor"
+ case 26: m_rParent.SetDefaultZoom(bSet); break; //
"Zoom/DefaultZoom"
+ case 27:
+ {
+ sal_Int32 nSet = 0;
+ pValues[nProp] >>= nSet;
+
m_rParent.SetDefaultZoomType(static_cast<SvxZoomType>(nSet), true);
+ }
+ break; //"Zoom/ZoomType", // 27
+ case 28:
+ {
+ sal_Int32 nSet = 0;
+ pValues[nProp] >>= nSet;
+
m_rParent.SetDefaultZoomValue(static_cast<sal_uInt16>(nSet), true);
+ }
+ break; //"Zoom/ZoomValue"
}
}
}
diff --git a/sw/source/uibase/inc/cfgitems.hxx
b/sw/source/uibase/inc/cfgitems.hxx
index 26cd004cebb4..7b839bf9e028 100644
--- a/sw/source/uibase/inc/cfgitems.hxx
+++ b/sw/source/uibase/inc/cfgitems.hxx
@@ -24,6 +24,7 @@
#include <printdata.hxx>
#include <cmdid.h>
+#include <sfx2/zoomitem.hxx>
class SwModule;
#ifdef DBG_UTIL
@@ -83,6 +84,9 @@ class SW_DLLPUBLIC SwElemItem final : public SfxPoolItem
bool m_bShowChangesInMargin :1;
bool m_bFieldHiddenText :1;
bool m_bShowHiddenPara :1;
+ bool m_bDefaultZoom :1;
+ SvxZoomType m_eDefaultZoomType;
+ sal_uInt16 m_nDefaultZoomValue;
friend class SwContentOptPage;
@@ -95,6 +99,15 @@ public:
void FillViewOptions( SwViewOption& rVOpt) const;
+ bool IsDefaultZoom() const {return m_bDefaultZoom; }
+ void SetDefaultZoom(bool bSet) { m_bDefaultZoom = bSet; }
+
+ SvxZoomType GetDefaultZoomType() const { return m_eDefaultZoomType; }
+ void SetDefaultZoomType(SvxZoomType eType) { m_eDefaultZoomType = eType; }
+
+ sal_uInt16 GetDefaultZoomValue() const { return m_nDefaultZoomValue;}
+ void SetDefaultZoomValue(sal_Int16 nValue){ m_nDefaultZoomValue = nValue; }
+
};
// OS 12.01.95
diff --git a/sw/source/uibase/inc/optpage.hxx b/sw/source/uibase/inc/optpage.hxx
index d162a707dd67..6279b8ed153f 100644
--- a/sw/source/uibase/inc/optpage.hxx
+++ b/sw/source/uibase/inc/optpage.hxx
@@ -75,8 +75,20 @@ class SwContentOptPage final : public SfxTabPage
std::unique_ptr<weld::CheckButton> m_xFieldHiddenParaCB;
std::unique_ptr<weld::Widget> m_xFieldHiddenParaImg;
+ std::unique_ptr<weld::Frame> m_xZoomFrame;
+ std::unique_ptr<weld::RadioButton> m_xZoomLatestRB;
+ std::unique_ptr<weld::RadioButton> m_xZoomPreferredRB;
+ std::unique_ptr<weld::RadioButton> m_xZoomOptimalRB;
+ std::unique_ptr<weld::RadioButton> m_xZoomWidthAndHeightRB;
+ std::unique_ptr<weld::RadioButton> m_xZoomWidthRB;
+ std::unique_ptr<weld::RadioButton> m_xZoom100RB;
+ std::unique_ptr<weld::RadioButton> m_xZoomCustomRB;
+ std::unique_ptr<weld::MetricSpinButton> m_xZoomValue;
+
DECL_LINK(VertRulerHdl, weld::Toggleable&, void);
DECL_LINK(ShowOutlineContentVisibilityButtonHdl, weld::Toggleable&, void);
+ DECL_LINK(ZoomHdl, weld::Toggleable&, void);
+ DECL_LINK(ZoomLatestHdl, weld::Toggleable&, void);
public:
SwContentOptPage(weld::Container* pPage, weld::DialogController*
pController, const SfxItemSet& rSet);
virtual ~SwContentOptPage() override;
diff --git a/sw/source/uibase/inc/usrpref.hxx b/sw/source/uibase/inc/usrpref.hxx
index 24d9c6a7a34b..764f52a1d457 100644
--- a/sw/source/uibase/inc/usrpref.hxx
+++ b/sw/source/uibase/inc/usrpref.hxx
@@ -168,6 +168,12 @@ class SwMasterUsrPref : public SwViewOption
SwFmtAidsAutoComplConfig m_aFmtAidsAutoComplConfig;
bool m_bApplyCharUnit; // apply_char_unit
+
+ // Scale
+ bool m_bUseDefaultZoom;
+ sal_uInt16 m_nDefaultZoomValue; // percent.
+ SvxZoomType m_eDefaultZoomType;
+
public:
SwMasterUsrPref(bool bWeb);
~SwMasterUsrPref();
@@ -262,6 +268,28 @@ public:
}
}
+ bool IsDefaultZoom() const { return m_bUseDefaultZoom;}
+ void SetDefaultZoom( bool bSet, bool bNoModify = false )
+ {
+ m_bUseDefaultZoom = bSet;
+ if(!bNoModify)
+ m_aContentConfig.SetModified();
+ }
+ sal_uInt16 GetDefaultZoomValue() const { return m_nDefaultZoomValue; }
+ void SetDefaultZoomValue ( sal_uInt16 nValue, bool bNoModify = false )
+ {
+ m_nDefaultZoomValue = nValue;
+ if(!bNoModify)
+ m_aContentConfig.SetModified();
+ }
+ SvxZoomType GetDefaultZoomType() const { return m_eDefaultZoomType;}
+ void SetDefaultZoomType( SvxZoomType eType, bool bNoModify = false )
+ {
+ m_eDefaultZoomType = eType;
+ if(!bNoModify)
+ m_aContentConfig.SetModified();
+ }
+
sal_Int32 GetDefTabInMm100() const { return m_nDefTabInMm100;}
void SetDefTabInMm100( sal_Int32 nSet, bool bNoModify = false )
{
diff --git a/sw/source/uibase/uiview/view.cxx b/sw/source/uibase/uiview/view.cxx
index 4b211bbf5bc6..3efa69a5447e 100644
--- a/sw/source/uibase/uiview/view.cxx
+++ b/sw/source/uibase/uiview/view.cxx
@@ -908,12 +908,17 @@ SwView::SwView(SfxViewFrame& _rFrame, SfxViewShell*
pOldSh)
aUsrPref.SetZoomType( SvxZoomType::PERCENT );
aUsrPref.SetZoom( 100 );
}
- if (rDocSh.IsPreview())
+ else if (rDocSh.IsPreview())
{
aUsrPref.SetZoomType( SvxZoomType::WHOLEPAGE );
aUsrPref.SetViewLayoutBookMode( false );
aUsrPref.SetViewLayoutColumns( 1 );
}
+ else if (!pUsrPref->IsDefaultZoom())
+ {
+ aUsrPref.SetZoomType(pUsrPref->GetDefaultZoomType());
+ aUsrPref.SetZoom(pUsrPref->GetDefaultZoomValue());
+ }
m_pWrtShell.reset(new SwWrtShell(rDoc, m_pEditWin, *this, &aUsrPref));
// creating an SwView from a SwPagePreview needs to
// add the SwViewShell to the ring of the other SwViewShell(s)
@@ -1572,7 +1577,8 @@ void SwView::ReadUserDataSequence ( const uno::Sequence <
beans::PropertyValue >
( pVOpt->GetViewLayoutColumns() !=
nViewLayoutColumns || pVOpt->IsViewLayoutBookMode() != bViewLayoutBookMode );
const bool bSetViewSettings = bGotZoomType && bGotZoomFactor &&
- ( pVOpt->GetZoom() != nZoomFactor ||
pVOpt->GetZoomType() != eZoom );
+ ( pVOpt->GetZoom() != nZoomFactor ||
pVOpt->GetZoomType() != eZoom ) &&
+
SW_MOD()->GetUsrPref(pVOpt->getBrowseMode())->IsDefaultZoom();
// In case we have a 'fixed' view layout of 2 or more columns,
// we have to apply the view options *before* starting the action.
diff --git a/sw/uiconfig/swriter/ui/viewoptionspage.ui
b/sw/uiconfig/swriter/ui/viewoptionspage.ui
index 7d1ba0354c27..2a569341b676 100644
--- a/sw/uiconfig/swriter/ui/viewoptionspage.ui
+++ b/sw/uiconfig/swriter/ui/viewoptionspage.ui
@@ -1,7 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.38.2 -->
+<!-- Generated with glade 3.40.0 -->
<interface domain="sw">
<requires lib="gtk+" version="3.20"/>
+ <object class="GtkAdjustment" id="adjustment2">
+ <property name="upper">100</property>
+ <property name="step-increment">1</property>
+ <property name="page-increment">10</property>
+ </object>
<object class="GtkBox" id="ViewOptionsPage">
<property name="visible">True</property>
<property name="can-focus">False</property>
@@ -459,6 +464,105 @@
<property name="position">3</property>
</packing>
</child>
+ <child>
+ <object class="GtkFrame" id="outlineframe">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label-xalign">0</property>
+ <property name="shadow-type">none</property>
+ <child>
+ <!-- n-columns=2 n-rows=2 -->
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="margin-start">12</property>
+ <property name="margin-top">6</property>
+ <property name="row-spacing">6</property>
+ <property name="column-spacing">6</property>
+ <child>
+ <object class="GtkCheckButton"
id="outlinecontentvisibilitybutton">
+ <property name="label" translatable="yes"
context="viewoptionspage|outlinecontentvisibilitybutton">_Show outline-folding
buttons</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ <child internal-child="accessible">
+ <object class="AtkObject"
id="outlinecontentvisibilitybutton-atkobject">
+ <property name="AtkObject::accessible-description"
translatable="yes"
context="viewoptionspage|extended_tip|outlinecontentvisibilitybutton">Displays
outline folding buttons on the left of the outline headings.</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton"
id="suboutlinelevelsascontent">
+ <property name="label" translatable="yes"
context="viewoptionspage|suboutlinelevelscontent">Include sub _levels</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="margin-start">12</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ <child internal-child="accessible">
+ <object class="AtkObject"
id="suboutlinelevelsascontent-atkobject">
+ <property name="AtkObject::accessible-description"
translatable="yes"
context="viewoptionspage|extended_tip|suboutlinelevelsascontent">Displays the
folding buttons of the outline sub levels.</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage"
id="lockoutlinecontentvisibility">
+ <property name="can-focus">False</property>
+ <property name="no-show-all">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="icon-name">res/lock.png</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="locksuboutlinelevels">
+ <property name="can-focus">False</property>
+ <property name="no-show-all">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="icon-name">res/lock.png</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="outlinelabel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes"
context="viewoptionspage|outlinelabel">Outline Folding</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="left-attach">0</property>
@@ -766,92 +870,217 @@
</packing>
</child>
<child>
- <object class="GtkFrame" id="outlineframe">
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkFrame" id="zoomframe">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0</property>
<property name="shadow-type">none</property>
<child>
- <!-- n-columns=2 n-rows=2 -->
+ <!-- n-columns=2 n-rows=7 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">12</property>
<property name="margin-top">6</property>
- <property name="row-spacing">6</property>
+ <property name="margin-bottom">43</property>
+ <property name="row-spacing">7</property>
<property name="column-spacing">6</property>
<child>
- <object class="GtkCheckButton"
id="outlinecontentvisibilitybutton">
- <property name="label" translatable="yes"
context="viewoptionspage|outlinecontentvisibilitybutton">_Show outline-folding
buttons</property>
+ <object class="GtkRadioButton" id="zoomlatest">
+ <property name="label" translatable="yes"
context="zoomdialog|zoomlatest">Use latest setting</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="use-underline">True</property>
+ <property name="active">True</property>
<property name="draw-indicator">True</property>
<child internal-child="accessible">
- <object class="AtkObject"
id="outlinecontentvisibilitybutton-atkobject">
- <property name="AtkObject::accessible-description"
translatable="yes"
context="viewoptionspage|extended_tip|outlinecontentvisibilitybutton">Displays
outline folding buttons on the left of the outline headings.</property>
+ <object class="AtkObject" id="zoomlatest-atkobject">
+ <property name="AtkObject::accessible-description"
translatable="yes" context="zoomdialog|extended_tip|zoomlatest">Uses the zoom
setting that has been applied manually.</property>
</object>
</child>
</object>
<packing>
- <property name="left-attach">1</property>
+ <property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
- <object class="GtkCheckButton"
id="suboutlinelevelsascontent">
- <property name="label" translatable="yes"
context="viewoptionspage|suboutlinelevelscontent">Include sub _levels</property>
+ <object class="GtkRadioButton" id="zoompreferred">
+ <property name="label" translatable="yes"
context="zoomdialog|zoompreferred">Use preferred values</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
- <property name="margin-start">12</property>
<property name="use-underline">True</property>
+ <property name="active">True</property>
<property name="draw-indicator">True</property>
+ <property name="group">zoomlatest</property>
<child internal-child="accessible">
- <object class="AtkObject"
id="suboutlinelevelsascontent-atkobject">
- <property name="AtkObject::accessible-description"
translatable="yes"
context="viewoptionspage|extended_tip|suboutlinelevelsascontent">Displays the
folding buttons of the outline sub levels.</property>
+ <object class="AtkObject"
id="zoompreferred-atkobject">
+ <property name="AtkObject::accessible-description"
translatable="yes" context="zoomdialog|extended_tip|zoompreferred">Applies
preferred zoom settings to documents.</property>
</object>
</child>
</object>
<packing>
- <property name="left-attach">1</property>
+ <property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
- <object class="GtkImage"
id="lockoutlinecontentvisibility">
- <property name="can-focus">False</property>
- <property name="no-show-all">True</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="icon-name">res/lock.png</property>
+ <object class="GtkRadioButton" id="zoomoptimal">
+ <property name="label" translatable="yes"
context="zoomdialog|zoomoptimal">Optimal</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="margin-start">12</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="zoomoptimal-atkobject">
+ <property name="AtkObject::accessible-description"
translatable="yes" context="zoomdialog|extended_tip|zoomoptimal">Resizes the
display to fit the width of the text in the document at the moment the command
is started.</property>
+ </object>
+ </child>
</object>
<packing>
<property name="left-attach">0</property>
- <property name="top-attach">0</property>
+ <property name="top-attach">2</property>
</packing>
</child>
<child>
- <object class="GtkImage" id="locksuboutlinelevels">
- <property name="can-focus">False</property>
- <property name="no-show-all">True</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="icon-name">res/lock.png</property>
+ <object class="GtkRadioButton" id="zoomfitwandh">
+ <property name="label" translatable="yes"
context="zoomdialog|zoomfitwandh">Fit width and height</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="margin-start">12</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">zoomoptimal</property>
+ <child internal-child="accessible">
+ <object class="AtkObject"
id="zoomfitwandh-atkobject">
+ <property name="AtkObject::accessible-description"
translatable="yes" context="zoomdialog|extended_tip|zoomfitwandh">Displays the
entire page on your screen.</property>
+ </object>
+ </child>
</object>
<packing>
<property name="left-attach">0</property>
- <property name="top-attach">1</property>
+ <property name="top-attach">3</property>
</packing>
</child>
+ <child>
+ <object class="GtkRadioButton" id="zoomfitw">
+ <property name="label" translatable="yes"
context="zoomdialog|zoomfitw">Fit width</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="margin-start">12</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">zoomoptimal</property>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="zoomfitw-atkobject">
+ <property name="AtkObject::accessible-description"
translatable="yes" context="zoomdialog|extended_tip|zoomfitw">Displays the
complete width of the document page. The top and bottom edges of the page may
not be visible.</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="zoom100pc">
+ <property name="label" translatable="yes"
context="zoomdialog|zomm100pc">100%</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="margin-start">12</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">zoomoptimal</property>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="zomm100pc-atkobject">
+ <property name="AtkObject::accessible-description"
translatable="yes" context="zoomdialog|extended_tip|zomm100pc">Displays the
document at its actual size.</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="zoomcustom">
+ <property name="label" translatable="yes"
context="zoomdialog|zoomcustom">Custom: </property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="margin-start">12</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">zoomoptimal</property>
+ <accessibility>
+ <relation type="label-for" target="zoomvalue"/>
+ </accessibility>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="zoomcustom-atkobject">
+ <property name="AtkObject::accessible-description"
translatable="yes" context="zoomdialog|extended_tip|zoomcustom">Enter the zoom
factor at which you want to display the document. Enter a percentage in the
box.</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="zoomvalue">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="adjustment">adjustment2</property>
+ <accessibility>
+ <relation type="labelled-by" target="zoomcustom"/>
+ </accessibility>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="zoomvalue-atkobject">
+ <property name="AtkObject::accessible-description"
translatable="yes" context="extended_tip|zoomvalue">Enter the zoom factor at
which you want to display the document. Enter a percentage in the
box.</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">6</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</object>
</child>
<child type="label">
- <object class="GtkLabel" id="outlinelabel">
+ <object class="GtkLabel" id="zoomlabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
- <property name="label" translatable="yes"
context="viewoptionspage|outlinelabel">Outline Folding</property>
+ <property name="label" translatable="yes"
context="viewoptionspage|outlinelabel">Zoom</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
@@ -861,7 +1090,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
</object>
commit a7c7ce75814d857532a3ac2cbfc489f2524c5c57
Author: Tibor Nagy <[email protected]>
AuthorDate: Tue Sep 10 12:04:13 2024 +0200
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:23 2024 +0200
tdf#76981 sd: opening linked presentation in slideshow mode (part2)
If an MSO presentation(pptx,ppt) is opened via a document link while in
slideshow mode, the linked presentation should open in slideshow mode
and close when finished. If it is opened while in editing mode, the
linked presentation should open in editing mode.
Change-Id: Ia9df1e4daa55dc697285a3778102a850e2f6098c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173130
Tested-by: Jenkins
Reviewed-by: Nagy Tibor <[email protected]>
diff --git a/sd/source/ui/docshell/docshel4.cxx
b/sd/source/ui/docshell/docshel4.cxx
index 3b60fd176367..202d69fc0aad 100644
--- a/sd/source/ui/docshell/docshel4.cxx
+++ b/sd/source/ui/docshell/docshel4.cxx
@@ -447,16 +447,25 @@ bool DrawDocShell::ImportFrom(SfxMedium &rMedium,
SfxItemSet& rSet = rMedium.GetItemSet();
if (SfxItemState::SET == rSet.GetItemState(SID_DOC_STARTPRESENTATION))
{
- const sal_uInt16 nStartingSlide =
rSet.Get(SID_DOC_STARTPRESENTATION).GetValue();
- if (nStartingSlide)
+ sal_uInt16 nStartingSlide =
rSet.Get(SID_DOC_STARTPRESENTATION).GetValue();
+ if (nStartingSlide == 0)
{
- mpDoc->SetStartWithPresentation(nStartingSlide);
-
- // tell SFX to change viewshell when in preview mode
- if (IsPreview())
+ OUString sStartPage = mpDoc->getPresentationSettings().maPresPage;
+ if (!sStartPage.isEmpty())
{
- GetMedium()->GetItemSet().Put(SfxUInt16Item(SID_VIEW_ID, 1));
+ bool bIsMasterPage = false;
+ sal_uInt16 nPageNumb = mpDoc->GetPageByName(sStartPage,
bIsMasterPage);
+ nStartingSlide = (nPageNumb + 1) / 2;
}
+ else
+ nStartingSlide = 1;
+ }
+ mpDoc->SetStartWithPresentation(nStartingSlide);
+
+ // tell SFX to change viewshell when in preview mode
+ if (IsPreview())
+ {
+ GetMedium()->GetItemSet().Put(SfxUInt16Item(SID_VIEW_ID, 1));
}
}
@@ -482,7 +491,19 @@ bool DrawDocShell::ConvertFrom( SfxMedium& rMedium )
if (SfxItemState::SET == rSet.GetItemState(SID_DOC_STARTPRESENTATION))
{
- const sal_uInt16 nStartingSlide =
rSet.Get(SID_DOC_STARTPRESENTATION).GetValue();
+ sal_uInt16 nStartingSlide =
rSet.Get(SID_DOC_STARTPRESENTATION).GetValue();
+ if (nStartingSlide == 0)
+ {
+ OUString sStartPage = mpDoc->getPresentationSettings().maPresPage;
+ if (!sStartPage.isEmpty())
+ {
+ bool bIsMasterPage = false;
+ sal_uInt16 nPageNumb = mpDoc->GetPageByName(sStartPage,
bIsMasterPage);
+ nStartingSlide = (nPageNumb + 1) / 2;
+ }
+ else
+ nStartingSlide = 1;
+ }
bStartPresentation = nStartingSlide;
mpDoc->SetStartWithPresentation(nStartingSlide);
}
diff --git a/sfx2/source/appl/appopen.cxx b/sfx2/source/appl/appopen.cxx
index c627056160c4..0564625ee8be 100644
--- a/sfx2/source/appl/appopen.cxx
+++ b/sfx2/source/appl/appopen.cxx
@@ -862,7 +862,21 @@ void SfxApplication::OpenDocExec_Impl( SfxRequest& rReq )
pFilter = rMatcher.GetFilter4EA( aTypeName );
}
- if (!pFilter || !lcl_isFilterNativelySupported(*pFilter))
+ bool bStartPresentation = false;
+ if (pFilter)
+ {
+ const SfxUInt16Item* pSlide =
rReq.GetArg<SfxUInt16Item>(SID_DOC_STARTPRESENTATION);
+ if (pSlide
+ && (pFilter->GetWildcard().Matches(u".pptx")
+ || pFilter->GetWildcard().Matches(u".ppt")
+ || pFilter->GetWildcard().Matches(u".ppsx")
+ || pFilter->GetWildcard().Matches(u".pps")))
+ {
+ bStartPresentation = true;
+ }
+ }
+
+ if (!pFilter || (!lcl_isFilterNativelySupported(*pFilter) &&
!bStartPresentation))
{
// hyperlink does not link to own type => special handling
(http, ftp) browser and (other external protocols) OS
if ( aINetProtocol == INetProtocol::Mailto )
commit 56fb9252e73c7f86e0a8a8a47369f7d6adbd43f0
Author: Oliver Specht <[email protected]>
AuthorDate: Wed Aug 7 12:56:05 2024 +0200
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:23 2024 +0200
tdf#134902 Test added
Import test added as follow-up to
0d512cb88757ced10a825a3d544e41696a54341a
to check that the imported shape is not visible.
Change-Id: I9671930a5613021be20c75e021213dfda5e763cd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173057
Reviewed-by: Thorsten Behrens <[email protected]>
Tested-by: allotropia jenkins <[email protected]>
diff --git a/sw/qa/extras/ww8import/data/tdf134902.docx
b/sw/qa/extras/ww8import/data/tdf134902.docx
new file mode 100644
index 000000000000..fc89611f65cd
Binary files /dev/null and b/sw/qa/extras/ww8import/data/tdf134902.docx differ
diff --git a/sw/qa/extras/ww8import/ww8import.cxx
b/sw/qa/extras/ww8import/ww8import.cxx
index 0a82c320be1f..a7ea3c8a51a0 100644
--- a/sw/qa/extras/ww8import/ww8import.cxx
+++ b/sw/qa/extras/ww8import/ww8import.cxx
@@ -278,6 +278,28 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf142003)
CPPUNIT_ASSERT(xParagraph->getString().startsWith("Lorem ipsum ,
consectetur adipiscing elit."));
}
+CPPUNIT_TEST_FIXTURE(Test, testTdf134902)
+{
+ createSwDoc("tdf134902.docx");
+ CPPUNIT_ASSERT_EQUAL(4, getShapes());
+ uno::Reference<drawing::XShape> xShape;
+ uno::Reference< beans::XPropertySet > XPropSet;
+ for (int i = 3; i<= getShapes(); i++)
+ {
+ xShape = getShape(i);
+ XPropSet.set( xShape, uno::UNO_QUERY_THROW );
+ try
+ {
+ bool isVisible = true;
+ XPropSet->getPropertyValue(u"Visible"_ustr) >>= isVisible;
+ CPPUNIT_ASSERT(!isVisible);
+ }
+ catch (beans::UnknownPropertyException &)
+ { /* ignore */ }
+ }
+
+}
+
// tests should only be added to ww8IMPORT *if* they fail round-tripping in
ww8EXPORT
} // end of anonymous namespace
commit d2c314a2057e6ae41bc34620233b2ac15ea47115
Author: Tibor Nagy <[email protected]>
AuthorDate: Fri Sep 6 23:15:21 2024 +0200
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:23 2024 +0200
tdf#76981 sd: opening linked presentation in slideshow mode
If an Impress presentation(odp) is opened via a document link while in
slideshow mode, the linked presentation should open in slideshow mode
and close when finished. If it is opened while in editing mode, the
linked presentation should open in editing mode.
Change-Id: I3fd410872472ed6391b2150151810b5da32fa29b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172984
Tested-by: Jenkins
Reviewed-by: Nagy Tibor <[email protected]>
diff --git a/sd/source/ui/docshell/docshel4.cxx
b/sd/source/ui/docshell/docshel4.cxx
index 76562ed093ca..3b60fd176367 100644
--- a/sd/source/ui/docshell/docshel4.cxx
+++ b/sd/source/ui/docshell/docshel4.cxx
@@ -285,13 +285,6 @@ bool DrawDocShell::Load( SfxMedium& rMedium )
mpDoc->SetStarDrawPreviewMode( true );
}
- if (SfxItemState::SET == rSet.GetItemState(SID_DOC_STARTPRESENTATION))
- {
- const sal_uInt16 nStartingSlide =
rSet.Get(SID_DOC_STARTPRESENTATION).GetValue();
- bStartPresentation = nStartingSlide;
- mpDoc->SetStartWithPresentation(nStartingSlide);
- }
-
bRet = SfxObjectShell::Load( rMedium );
if (bRet)
{
@@ -335,6 +328,25 @@ bool DrawDocShell::Load( SfxMedium& rMedium )
SetError(ERRCODE_ABORT);
}
+ if (SfxItemState::SET == rSet.GetItemState(SID_DOC_STARTPRESENTATION))
+ {
+ sal_uInt16 nStartingSlide =
rSet.Get(SID_DOC_STARTPRESENTATION).GetValue();
+ if (nStartingSlide == 0)
+ {
+ OUString sStartPage = mpDoc->getPresentationSettings().maPresPage;
+ if (!sStartPage.isEmpty())
+ {
+ bool bIsMasterPage = false;
+ sal_uInt16 nPageNumb = mpDoc->GetPageByName(sStartPage,
bIsMasterPage);
+ nStartingSlide = (nPageNumb + 1) / 2;
+ }
+ else
+ nStartingSlide = 1;
+ }
+ bStartPresentation = nStartingSlide;
+ mpDoc->SetStartWithPresentation(nStartingSlide);
+ }
+
// tell SFX to change viewshell when in preview mode
if( IsPreview() || bStartPresentation )
{
@@ -972,7 +984,9 @@ void DrawDocShell::OpenBookmark( const OUString&
rBookmarkURL )
{
SfxStringItem aStrItem( SID_FILE_NAME, rBookmarkURL );
SfxStringItem aReferer( SID_REFERER, GetMedium()->GetName() );
- const SfxPoolItem* ppArgs[] = { &aStrItem, &aReferer, nullptr };
+ SfxUInt16Item aPresentation( SID_DOC_STARTPRESENTATION );
+ const SfxPoolItem* ppArgs[] = { &aStrItem, &aReferer, &aPresentation,
nullptr };
+
if (SfxViewFrame* pFrame = mpViewShell ? mpViewShell->GetViewFrame() :
SfxViewFrame::Current())
pFrame->GetBindings().Execute( SID_OPENHYPERLINK, ppArgs );
}
commit 555f98a2813a8dc8abe2796b2eadac20f812303a
Author: Oliver Specht <[email protected]>
AuthorDate: Thu Jun 27 08:57:43 2024 +0200
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:23 2024 +0200
tdf#155229 Calculate row height incl. border if 'atLeast' is set
Word includes the width of horizontal borders when calculating
row height in case the row height is set as "atLeast"
This is now handled via a compat flag for doc/rtf/docx formats.
The default for ODF is unspecified,
which (sanely) continues to treat the row size
of "atLeast" and "fixed" as measuring the same thing.
Change-Id: I37778e5cdc6e083e94a17f50bd0b75a291ededcd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169611
Tested-by: Gabor Kelemen <[email protected]>
Tested-by: Jenkins
Reviewed-by: Gabor Kelemen <[email protected]>
diff --git a/sw/inc/IDocumentSettingAccess.hxx
b/sw/inc/IDocumentSettingAccess.hxx
index 9bf26880c01f..26ca334071d2 100644
--- a/sw/inc/IDocumentSettingAccess.hxx
+++ b/sw/inc/IDocumentSettingAccess.hxx
@@ -137,6 +137,8 @@ enum class DocumentSettingId
USE_VARIABLE_WIDTH_NBSP,
// overlap background shapes if anchored in body
PAINT_HELL_OVER_HEADER_FOOTER,
+ // tdf#155229 calculate minimum row height including horizontal border
width
+ MIN_ROW_HEIGHT_INCL_BORDER,
};
/** Provides access to settings of a document
diff --git a/sw/qa/core/layout/flycnt.cxx b/sw/qa/core/layout/flycnt.cxx
index 397a67eb135b..3e9fcb981125 100644
--- a/sw/qa/core/layout/flycnt.cxx
+++ b/sw/qa/core/layout/flycnt.cxx
@@ -450,10 +450,10 @@ CPPUNIT_TEST_FIXTURE(Test, testSplitFlyWidow)
SwFrame* pTab2 = pPage2Fly->GetLower();
SwFrame* pRow2 = pTab2->GetLower();
// Without the accompanying fix in place, this test would have failed with:
- // - Expected: 1014
+ // - Expected: 1029
// - Actual : 553
- // i.e. <w:trHeight w:val="1014"> from the file was ignored.
- CPPUNIT_ASSERT_EQUAL(static_cast<tools::Long>(1014),
pRow2->getFrameArea().Height());
+ // i.e. <w:trHeight w:val="1029"> from the file was ignored
+ CPPUNIT_ASSERT_EQUAL(static_cast<tools::Long>(1029),
pRow2->getFrameArea().Height());
SwFrame* pCell2 = pRow2->GetLower();
auto pText2 = dynamic_cast<SwTextFrame*>(pCell2->GetLower());
// And then similarly this was 1, not 2.
diff --git a/sw/qa/extras/layout/data/tdf155229_row_height_at_least.docx
b/sw/qa/extras/layout/data/tdf155229_row_height_at_least.docx
new file mode 100644
index 000000000000..a42031a41f5b
Binary files /dev/null and
b/sw/qa/extras/layout/data/tdf155229_row_height_at_least.docx differ
diff --git a/sw/qa/extras/layout/layout3.cxx b/sw/qa/extras/layout/layout3.cxx
index 7336cf61cbd1..4694a91b1bb0 100644
--- a/sw/qa/extras/layout/layout3.cxx
+++ b/sw/qa/extras/layout/layout3.cxx
@@ -3510,6 +3510,19 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, TestTdf146081)
CPPUNIT_ASSERT_EQUAL(nTotalHeight, nHeight1 * 4);
}
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, TestTdf155229RowAtLeast)
+{
+ createSwDoc("tdf155229_row_height_at_least.docx");
+
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ sal_Int32 nTableHeight
+ = getXPath(pXmlDoc,
"/root/page[1]/body/tab[1]/row[11]/infos/bounds"_ostr, "bottom"_ostr)
+ .toInt32();
+
+ // Without the fix, this was Actual : 14174
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(15494), nTableHeight);
+}
+
CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, TestTdf157829LTR)
{
// Verify that line breaking inside a bidi portion triggers underflow to
previous bidi portions
diff --git a/sw/source/core/doc/DocumentSettingManager.cxx
b/sw/source/core/doc/DocumentSettingManager.cxx
index 2bbff10db856..47d629df7f45 100644
--- a/sw/source/core/doc/DocumentSettingManager.cxx
+++ b/sw/source/core/doc/DocumentSettingManager.cxx
@@ -108,7 +108,8 @@ sw::DocumentSettingManager::DocumentSettingManager(SwDoc
&rDoc)
mbNoNumberingShowFollowBy(false),
mbDropCapPunctuation(true),
mbUseVariableWidthNBSP(false),
- mbPaintHellOverHeaderFooter(false)
+ mbPaintHellOverHeaderFooter(false),
+ mbMinRowHeightInclBorder(false)
// COMPATIBILITY FLAGS END
{
@@ -271,6 +272,7 @@ bool sw::DocumentSettingManager::get(/*[in]*/
DocumentSettingId id) const
case DocumentSettingId::DROP_CAP_PUNCTUATION: return
mbDropCapPunctuation;
case DocumentSettingId::USE_VARIABLE_WIDTH_NBSP: return
mbUseVariableWidthNBSP;
case DocumentSettingId::PAINT_HELL_OVER_HEADER_FOOTER: return
mbPaintHellOverHeaderFooter;
+ case DocumentSettingId::MIN_ROW_HEIGHT_INCL_BORDER: return
mbMinRowHeightInclBorder;
default:
OSL_FAIL("Invalid setting id");
}
@@ -501,6 +503,10 @@ void sw::DocumentSettingManager::set(/*[in]*/
DocumentSettingId id, /*[in]*/ boo
mbPaintHellOverHeaderFooter = value;
break;
+ case DocumentSettingId::MIN_ROW_HEIGHT_INCL_BORDER:
+ mbMinRowHeightInclBorder = value;
+ break;
+
// COMPATIBILITY FLAGS END
case DocumentSettingId::BROWSE_MODE: //can be used temporary
(load/save) when no SwViewShell is available
@@ -1087,6 +1093,11 @@ void
sw::DocumentSettingManager::dumpAsXml(xmlTextWriterPtr pWriter) const
BAD_CAST(OString::boolean(mbPaintHellOverHeaderFooter).getStr()));
(void)xmlTextWriterEndElement(pWriter);
+ (void)xmlTextWriterStartElement(pWriter,
BAD_CAST("mbMinRowHeightInclBorder"));
+ (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("value"),
+
BAD_CAST(OString::boolean(mbMinRowHeightInclBorder).getStr()));
+ (void)xmlTextWriterEndElement(pWriter);
+
(void)xmlTextWriterStartElement(pWriter, BAD_CAST("mbContinuousEndnotes"));
(void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("value"),
BAD_CAST(OString::boolean(mbContinuousEndnotes).getStr()));
diff --git a/sw/source/core/inc/DocumentSettingManager.hxx
b/sw/source/core/inc/DocumentSettingManager.hxx
index c1d08a15d068..97ae5097376e 100644
--- a/sw/source/core/inc/DocumentSettingManager.hxx
+++ b/sw/source/core/inc/DocumentSettingManager.hxx
@@ -187,6 +187,7 @@ class DocumentSettingManager final :
bool mbDropCapPunctuation; // tdf#150200, tdf#150438
bool mbUseVariableWidthNBSP : 1; // tdf#41652
bool mbPaintHellOverHeaderFooter : 1; // tdf#160198
+ bool mbMinRowHeightInclBorder : 1; // tdf#155229
public:
diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx
index 857ed194efc3..cc8a8333b421 100644
--- a/sw/source/core/layout/tabfrm.cxx
+++ b/sw/source/core/layout/tabfrm.cxx
@@ -197,6 +197,8 @@ static bool lcl_InnerCalcLayout( SwFrame *pFrame,
// cell height.
static SwTwips lcl_CalcMinRowHeight( const SwRowFrame *pRow,
const bool _bConsiderObjs );
+static sal_uInt16 lcl_GetTopSpace( const SwRowFrame& rRow );
+
static SwTwips lcl_CalcTopAndBottomMargin( const SwLayoutFrame&, const
SwBorderAttrs& );
static SwTwips lcl_calcHeightOfRowBeforeThisFrame(const SwRowFrame& rRow);
@@ -4907,6 +4909,9 @@ static SwTwips lcl_CalcMinCellHeight( const SwLayoutFrame
*_pCell,
static SwTwips lcl_CalcMinRowHeight( const SwRowFrame* _pRow,
const bool _bConsiderObjs )
{
+ //calc min height including width of horizontal border
+ const bool bMinRowHeightInclBorder =
+
_pRow->GetFormat()->GetDoc()->GetDocumentSettingManager().get(DocumentSettingId::MIN_ROW_HEIGHT_INCL_BORDER);
SwTwips nHeight = 0;
if ( !_pRow->IsRowSpanLine() )
{
@@ -4948,6 +4953,11 @@ static SwTwips lcl_CalcMinRowHeight( const SwRowFrame*
_pRow,
{
nHeight = rSz.GetHeight() -
lcl_calcHeightOfRowBeforeThisFrame(*_pRow);
}
+ if (bMinRowHeightInclBorder)
+ {
+ //get horizontal border(s)
+ nHeight += lcl_GetTopSpace(*_pRow);
+ }
}
}
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index 138bbf26127b..c07629063b07 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -1870,6 +1870,9 @@ void SwWW8ImplReader::ImportDop()
DocumentSettingId::FOOTNOTE_IN_COLUMN_TO_PAGEEND, true);
m_rDoc.getIDocumentSettingAccess().set(
DocumentSettingId::EMPTY_DB_FIELD_HIDES_PARA, false);
+ // tdf#155229 calculate minimum row height including horizontal border
width
+ m_rDoc.getIDocumentSettingAccess().set(
+ DocumentSettingId::MIN_ROW_HEIGHT_INCL_BORDER, true);
// Import Default Tabs
tools::Long nDefTabSiz = m_xWDop->dxaTab;
diff --git a/sw/source/uibase/uno/SwXDocumentSettings.cxx
b/sw/source/uibase/uno/SwXDocumentSettings.cxx
index 547339ec694f..b6448c702daf 100644
--- a/sw/source/uibase/uno/SwXDocumentSettings.cxx
+++ b/sw/source/uibase/uno/SwXDocumentSettings.cxx
@@ -163,7 +163,8 @@ enum SwDocumentSettingsPropertyHandles
HANDLE_APPLY_TEXT_ATTR_TO_EMPTY_LINE_AT_END_OF_PARAGRAPH,
HANDLE_APPLY_PARAGRAPH_MARK_FORMAT_TO_EMPTY_LINE_AT_END_OF_PARAGRAPH,
HANDLE_DO_NOT_MIRROR_RTL_DRAW_OBJS,
- HANDLE_PAINT_HELL_OVER_HEADER_FOOTER
+ HANDLE_PAINT_HELL_OVER_HEADER_FOOTER,
+ HANDLE_MIN_ROW_HEIGHT_INCL_BORDER
};
}
@@ -274,6 +275,7 @@ static rtl::Reference<MasterPropertySetInfo>
lcl_createSettingsInfo()
{ u"ApplyParagraphMarkFormatToEmptyLineAtEndOfParagraph"_ustr,
HANDLE_APPLY_PARAGRAPH_MARK_FORMAT_TO_EMPTY_LINE_AT_END_OF_PARAGRAPH,
cppu::UnoType<bool >::get(), 0 },
{ OUString("DoNotMirrorRtlDrawObjs"),
HANDLE_DO_NOT_MIRROR_RTL_DRAW_OBJS, cppu::UnoType<bool>::get(), 0 },
{ OUString("PaintHellOverHeaderFooter"),
HANDLE_PAINT_HELL_OVER_HEADER_FOOTER, cppu::UnoType<bool>::get(), 0 },
+ { OUString("MinRowHeightInclBorder"),
HANDLE_MIN_ROW_HEIGHT_INCL_BORDER, cppu::UnoType<bool>::get(), 0 },
/*
* As OS said, we don't have a view when we need to set this, so I have to
@@ -1182,6 +1184,14 @@ void SwXDocumentSettings::_setSingleValue( const
comphelper::PropertyInfo & rInf
DocumentSettingId::PAINT_HELL_OVER_HEADER_FOOTER, bTmp);
}
break;
+ case HANDLE_MIN_ROW_HEIGHT_INCL_BORDER:
+ {
+ bool bTmp;
+ if (rValue >>= bTmp)
+ mpDoc->getIDocumentSettingAccess().set(
+ DocumentSettingId::MIN_ROW_HEIGHT_INCL_BORDER, bTmp);
+ }
+ break;
default:
throw UnknownPropertyException(OUString::number(rInfo.mnHandle));
}
@@ -1775,6 +1785,12 @@ void SwXDocumentSettings::_getSingleValue( const
comphelper::PropertyInfo & rInf
DocumentSettingId::PAINT_HELL_OVER_HEADER_FOOTER);
}
break;
+ case HANDLE_MIN_ROW_HEIGHT_INCL_BORDER:
+ {
+ rValue <<= mpDoc->getIDocumentSettingAccess().get(
+ DocumentSettingId::MIN_ROW_HEIGHT_INCL_BORDER);
+ }
+ break;
default:
throw UnknownPropertyException(OUString::number(rInfo.mnHandle));
}
diff --git a/sw/source/writerfilter/dmapper/DomainMapper.cxx
b/sw/source/writerfilter/dmapper/DomainMapper.cxx
index 97b386c4b5c1..706bf1d162c1 100644
--- a/sw/source/writerfilter/dmapper/DomainMapper.cxx
+++ b/sw/source/writerfilter/dmapper/DomainMapper.cxx
@@ -151,6 +151,8 @@ DomainMapper::DomainMapper( const uno::Reference<
uno::XComponentContext >& xCon
m_pImpl->SetDocumentSettingsProperty(u"PaintHellOverHeaderFooter"_ustr,uno::Any(true));
m_pImpl->SetDocumentSettingsProperty(u"EmptyDbFieldHidesPara"_ustr,uno::Any(false));
m_pImpl->SetDocumentSettingsProperty(u"IgnoreTabsAndBlanksForLineCalculation"_ustr,uno::Any(true));
+ // calculate table row height with 'atLeast' including horizontal
border width
+
m_pImpl->SetDocumentSettingsProperty(u"MinRowHeightInclBorder"_ustr,uno::Any(true));
}
// Initialize RDF metadata, to be able to add statements during the import.
commit ea6f4e6da47db056eaaf7d0b3a39a65499678d95
Author: Thorsten Behrens <[email protected]>
AuthorDate: Thu Jul 25 08:28:46 2024 +0200
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:23 2024 +0200
related tdf#115474: improve warning msg for slow autoformat
Perhaps this alerts users that they've unintentionally selected a very
large range (Ctrl-A vs. Ctrl-End for selecting content)?
Change-Id: I8d60cf6186d1faf94c58684cad2ead49381819d5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170995
Reviewed-by: Thorsten Behrens <[email protected]>
Tested-by: Jenkins
diff --git a/sc/inc/globstr.hrc b/sc/inc/globstr.hrc
index b7e695404743..9a5409300f8c 100644
--- a/sc/inc/globstr.hrc
+++ b/sc/inc/globstr.hrc
@@ -271,7 +271,7 @@
#define STR_PRINT NC_("STR_PRINT", "Print")
#define STR_INVALID_AFAREA NC_("STR_INVALID_AFAREA", "To
apply an AutoFormat,
a table range of at least
3 × 3 cells must be selected.")
#define STR_AUTOFORMAT_WAIT_WARNING_TITLE
NC_("STR_AUTOFORMAT_WAIT_WARNING_TITLE", "")
-#define STR_AUTOFORMAT_WAIT_WARNING
NC_("STR_AUTOFORMAT_WAIT_WARNING", "Applying AutoFormat to the selected range
may take a long time.
Do you want to proceed?")
+#define STR_AUTOFORMAT_WAIT_WARNING
NC_("STR_AUTOFORMAT_WAIT_WARNING", "Applying AutoFormat to the selected range
(more than one million cells) may take a long time.
Do you want to proceed?")
#define STR_OPTIONAL NC_("STR_OPTIONAL",
"(optional)")
#define STR_REQUIRED NC_("STR_REQUIRED",
"(required)")
#define STR_NOTES NC_("STR_NOTES", "Comments")
commit fee25c67d7a5735921a76e8e2b5db4b69b8c8179
Author: Julien Nabet <[email protected]>
AuthorDate: Thu Jul 25 10:27:31 2024 +0200
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:22 2024 +0200
tdf#162174: fix crash when opening Bullets and Numbering dialog a second
time
It seems we must first retrieve the array of values from:
- officecfg::Office::Common::BulletsNumbering::DefaultBullets
- officecfg::Office::Common::BulletsNumbering::DefaultBulletsFonts
before retrieving the value by index.
Change-Id: I9cdf124f73c52f3027ae8e97a73e01e0efb73603
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171003
Tested-by: Jenkins
Reviewed-by: Julien Nabet <[email protected]>
diff --git a/cui/source/tabpages/numpages.cxx b/cui/source/tabpages/numpages.cxx
index 08f05c9b9a0f..6a838d001772 100644
--- a/cui/source/tabpages/numpages.cxx
+++ b/cui/source/tabpages/numpages.cxx
@@ -335,6 +335,8 @@ SvxBulletPickTabPage::SvxBulletPickTabPage(weld::Container*
pPage, weld::DialogC
m_xExamplesVS->SetSelectHdl(LINK(this, SvxBulletPickTabPage,
NumSelectHdl_Impl));
m_xExamplesVS->SetDoubleClickHdl(LINK(this, SvxBulletPickTabPage,
DoubleClickHdl_Impl));
m_xBtChangeBullet->connect_clicked(LINK(this, SvxBulletPickTabPage,
ClickAddChangeHdl_Impl));
+ m_aBulletSymbols =
officecfg::Office::Common::BulletsNumbering::DefaultBullets::get();
+ m_aBulletSymbolsFonts =
officecfg::Office::Common::BulletsNumbering::DefaultBulletsFonts::get();
}
SvxBulletPickTabPage::~SvxBulletPickTabPage()
@@ -440,10 +442,9 @@ IMPL_LINK_NOARG(SvxBulletPickTabPage, NumSelectHdl_Impl,
ValueSet*, void)
bPreset = false;
bModified = true;
sal_uInt16 nIndex = m_xExamplesVS->GetSelectedItemId() - 1;
- sal_Unicode cChar =
officecfg::Office::Common::BulletsNumbering::DefaultBullets::get()[nIndex].toChar();
+ sal_Unicode cChar = m_aBulletSymbols[nIndex].toChar();
vcl::Font& rActBulletFont = lcl_GetDefaultBulletFont();
- rActBulletFont.SetFamilyName(
-
officecfg::Office::Common::BulletsNumbering::DefaultBulletsFonts::get()[nIndex]);
+ rActBulletFont.SetFamilyName(m_aBulletSymbolsFonts[nIndex]);
sal_uInt16 nMask = 1;
for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
@@ -524,8 +525,6 @@ IMPL_LINK_NOARG(SvxBulletPickTabPage,
ClickAddChangeHdl_Impl, weld::Button&, voi
_nMask <<= 1;
}
- m_aBulletSymbols =
officecfg::Office::Common::BulletsNumbering::DefaultBullets::get();
- m_aBulletSymbolsFonts =
officecfg::Office::Common::BulletsNumbering::DefaultBulletsFonts::get();
css::uno::Sequence<OUString> aBulletSymbolsList(m_aBulletSymbols.size());
css::uno::Sequence<OUString>
aBulletSymbolsFontsList(m_aBulletSymbolsFonts.size());
auto aBulletSymbolsListRange = asNonConstRange(aBulletSymbolsList);
commit 78121b39c03b8432135e922e8a8ce06229653863
Author: Samuel Mehrbrodt <[email protected]>
AuthorDate: Thu Jul 11 10:15:31 2024 +0200
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:22 2024 +0200
Don't save bullet changes when dialog was cancelled
Change-Id: Ia2a7feb2f47a59f7c693e2023f9c2c8b3b934f81
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170336
Reviewed-by: Samuel Mehrbrodt <[email protected]>
Tested-by: Jenkins
diff --git a/cui/source/inc/numpages.hxx b/cui/source/inc/numpages.hxx
index d90b6b938f7f..acfc0d2a1433 100644
--- a/cui/source/inc/numpages.hxx
+++ b/cui/source/inc/numpages.hxx
@@ -99,6 +99,8 @@ class SvxBulletPickTabPage final : public SfxTabPage
std::unique_ptr<weld::Button> m_xBtChangeBullet;
std::unique_ptr<SvxNumValueSet> m_xExamplesVS;
std::unique_ptr<weld::CustomWeld> m_xExamplesVSWin;
+ css::uno::Sequence<OUString> m_aBulletSymbols;
+ css::uno::Sequence<OUString> m_aBulletSymbolsFonts;
DECL_LINK(NumSelectHdl_Impl, ValueSet*, void);
DECL_LINK(DoubleClickHdl_Impl, ValueSet*, void);
diff --git a/cui/source/tabpages/numpages.cxx b/cui/source/tabpages/numpages.cxx
index c0495541ca61..08f05c9b9a0f 100644
--- a/cui/source/tabpages/numpages.cxx
+++ b/cui/source/tabpages/numpages.cxx
@@ -394,6 +394,14 @@ void SvxBulletPickTabPage::ActivatePage(const SfxItemSet&
rSet)
DeactivateRC SvxBulletPickTabPage::DeactivatePage(SfxItemSet *_pSet)
{
+ if (IsCancelMode())
+ {
+ // Dialog cancelled, restore previous bullets
+ std::shared_ptr<comphelper::ConfigurationChanges>
batch(comphelper::ConfigurationChanges::create());
+
officecfg::Office::Common::BulletsNumbering::DefaultBullets::set(m_aBulletSymbols,
batch);
+
officecfg::Office::Common::BulletsNumbering::DefaultBulletsFonts::set(m_aBulletSymbolsFonts,
batch);
+ batch->commit();
+ }
if(_pSet)
FillItemSet(_pSet);
return DeactivateRC::LeavePage;
@@ -516,15 +524,15 @@ IMPL_LINK_NOARG(SvxBulletPickTabPage,
ClickAddChangeHdl_Impl, weld::Button&, voi
_nMask <<= 1;
}
- css::uno::Sequence<OUString>
aBulletSymbols(officecfg::Office::Common::BulletsNumbering::DefaultBullets::get());
- css::uno::Sequence<OUString>
aBulletSymbolsFonts(officecfg::Office::Common::BulletsNumbering::DefaultBulletsFonts::get());
- css::uno::Sequence<OUString> aBulletSymbolsList(aBulletSymbols.size());
- css::uno::Sequence<OUString>
aBulletSymbolsFontsList(aBulletSymbolsFonts.size());
+ m_aBulletSymbols =
officecfg::Office::Common::BulletsNumbering::DefaultBullets::get();
+ m_aBulletSymbolsFonts =
officecfg::Office::Common::BulletsNumbering::DefaultBulletsFonts::get();
+ css::uno::Sequence<OUString> aBulletSymbolsList(m_aBulletSymbols.size());
+ css::uno::Sequence<OUString>
aBulletSymbolsFontsList(m_aBulletSymbolsFonts.size());
auto aBulletSymbolsListRange = asNonConstRange(aBulletSymbolsList);
auto aBulletSymbolsFontsListRange =
asNonConstRange(aBulletSymbolsFontsList);
sal_uInt16 nIndex = m_xExamplesVS->GetSelectedItemId() - 1;
- for (size_t i = 0; i < aBulletSymbols.size(); ++i)
+ for (size_t i = 0; i < m_aBulletSymbols.size(); ++i)
{
if (i == nIndex)
{
@@ -533,8 +541,8 @@ IMPL_LINK_NOARG(SvxBulletPickTabPage,
ClickAddChangeHdl_Impl, weld::Button&, voi
}
else
{
- aBulletSymbolsListRange[i] = aBulletSymbols[i];
- aBulletSymbolsFontsListRange[i] = aBulletSymbolsFonts[i];
+ aBulletSymbolsListRange[i] = m_aBulletSymbols[i];
+ aBulletSymbolsFontsListRange[i] = m_aBulletSymbolsFonts[i];
}
}
diff --git a/include/sfx2/tabdlg.hxx b/include/sfx2/tabdlg.hxx
index 6a207a573027..828054bc562d 100644
--- a/include/sfx2/tabdlg.hxx
+++ b/include/sfx2/tabdlg.hxx
@@ -107,6 +107,11 @@ protected:
*/
bool PrepareLeaveCurrentPage();
+ /** Called before user cancels the dialog.
+ Calls DeactivatePage of all tab pages with IsCancelMode() set to true
+ */
+ void PrepareCancel();
+
/** save the position of the TabDialog and which tab page is the currently
active one
*/
void SavePosAndId();
@@ -192,6 +197,7 @@ private:
const SfxItemSet* mpSet;
OUString maUserString;
bool mbHasExchangeSupport;
+ bool mbCancel;
std::unordered_map<OUString, css::uno::Any> maAdditionalProperties;
std::unique_ptr<TabPageImpl> mpImpl;
@@ -258,6 +264,9 @@ public:
}
virtual void FillUserData();
virtual bool IsReadOnly() const;
+ // Whether the user has canceled the dialog. Allows to restore settings,
etc.
+ virtual bool IsCancelMode() { return mbCancel; }
+ virtual void SetCancelMode(bool bCancel) { mbCancel = bCancel; }
virtual void PageCreated (const SfxAllItemSet& aSet);
virtual void ChangesApplied();
static const SfxPoolItem* GetItem( const SfxItemSet& rSet, sal_uInt16
nSlot, bool bDeep = true );
diff --git a/sfx2/source/dialog/tabdlg.cxx b/sfx2/source/dialog/tabdlg.cxx
index c8bda80385f0..f95baa42cedc 100644
--- a/sfx2/source/dialog/tabdlg.cxx
+++ b/sfx2/source/dialog/tabdlg.cxx
@@ -149,6 +149,7 @@ SfxTabPage::SfxTabPage(weld::Container* pPage,
weld::DialogController* pControll
: BuilderPage(pPage, pController, rUIXMLDescription, rID,
isLOKMobilePhone())
, mpSet(rAttrSet)
, mbHasExchangeSupport(false)
+ , mbCancel(false)
, mpImpl(new TabPageImpl)
{
mpImpl->mpSfxDialogController =
dynamic_cast<SfxOkDialogController*>(m_pDialogController);
@@ -678,6 +679,19 @@ bool SfxTabDialogController::PrepareLeaveCurrentPage()
return bEnd;
}
+void SfxTabDialogController::PrepareCancel()
+{
+ for (auto pDataObject : m_pImpl->aData)
+ {
+ if (!pDataObject->xTabPage)
+ continue;
+
+ SfxTabPage* pPage = pDataObject->xTabPage.get();
+ pPage->SetCancelMode(true);
+ pPage->DeactivatePage(nullptr);
+ }
+}
+
const WhichRangesContainer & SfxTabDialogController::GetInputRanges(const
SfxItemPool& rPool)
/* [Description]
diff --git a/sw/qa/uitest/writer_tests2/formatBulletsNumbering.py
b/sw/qa/uitest/writer_tests2/formatBulletsNumbering.py
index e5ff843fa0f6..d0b78525c1c6 100644
--- a/sw/qa/uitest/writer_tests2/formatBulletsNumbering.py
+++ b/sw/qa/uitest/writer_tests2/formatBulletsNumbering.py
@@ -75,7 +75,7 @@ class formatBulletsNumbering(UITestCase):
xindentatmf.executeAction("UP", tuple())
- with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="cancel") as xDialog:
+ with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="ok") as xDialog:
xTabs = xDialog.getChild("tabcontrol")
select_pos(xTabs, "4")
xalignedatmf = xDialog.getChild("alignedatmf")
@@ -100,7 +100,7 @@ class formatBulletsNumbering(UITestCase):
select_by_text(xnumfollowedbylb, "Space")
- with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="cancel") as xDialog:
+ with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="ok") as xDialog:
xTabs = xDialog.getChild("tabcontrol")
select_pos(xTabs, "4")
xnumfollowedbylb = xDialog.getChild("numfollowedbylb")
@@ -130,7 +130,7 @@ class formatBulletsNumbering(UITestCase):
xallsame.executeAction("CLICK", tuple())
- with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="cancel") as xDialog:
+ with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="ok") as xDialog:
xTabs = xDialog.getChild("tabcontrol")
select_pos(xTabs, "5")
xnumfmtlb = xDialog.getChild("numfmtlb")
@@ -151,7 +151,7 @@ class formatBulletsNumbering(UITestCase):
with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="user") as xDialog:
pass
- with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="cancel") as xDialog:
+ with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="ok") as xDialog:
xTabs = xDialog.getChild("tabcontrol")
select_pos(xTabs, "5")
xnumfmtlb = xDialog.getChild("numfmtlb")
@@ -185,7 +185,7 @@ class formatBulletsNumbering(UITestCase):
xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE":
"TAB"})) #TAB to move indent right
- with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="cancel") as xDialog:
+ with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="ok") as xDialog:
xTabs = xDialog.getChild("tabcontrol")
select_pos(xTabs, "4")
xindentatmf = xDialog.getChild("indentatmf")
@@ -193,7 +193,7 @@ class formatBulletsNumbering(UITestCase):
self.assertEqual(indentValue < indentValue2 , True)
xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE":
"BACKSPACE"}))
- with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="cancel") as xDialog:
+ with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="ok") as xDialog:
xTabs = xDialog.getChild("tabcontrol")
select_pos(xTabs, "4")
xindentatmf = xDialog.getChild("indentatmf")
@@ -214,7 +214,7 @@ class formatBulletsNumbering(UITestCase):
self.xUITest.executeCommand(".uno:DecrementSubLevels")
- with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="cancel") as xDialog:
+ with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="ok") as xDialog:
xTabs = xDialog.getChild("tabcontrol")
select_pos(xTabs, "4")
xindentatmf = xDialog.getChild("indentatmf")
@@ -222,7 +222,7 @@ class formatBulletsNumbering(UITestCase):
self.assertEqual(indentValue < indentValue2 , True)
self.xUITest.executeCommand(".uno:IncrementLevel")
- with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="cancel") as xDialog:
+ with
self.ui_test.execute_dialog_through_command(".uno:BulletsAndNumberingDialog",
close_button="ok") as xDialog:
xTabs = xDialog.getChild("tabcontrol")
select_pos(xTabs, "4")
xindentatmf = xDialog.getChild("indentatmf")
diff --git a/sw/source/ui/misc/num.cxx b/sw/source/ui/misc/num.cxx
index 38763d825e29..4905a49eba55 100644
--- a/sw/source/ui/misc/num.cxx
+++ b/sw/source/ui/misc/num.cxx
@@ -870,6 +870,8 @@
SwSvxNumBulletTabDialog::SwSvxNumBulletTabDialog(weld::Window* pParent,
weld::Button* pButton = GetUserButton();
pButton->connect_clicked(LINK(this, SwSvxNumBulletTabDialog,
RemoveNumberingHdl));
pButton->set_sensitive(m_rWrtSh.GetNumRuleAtCurrCursorPos() != nullptr);
+ weld::Button& pCancelButton = GetCancelButton();
+ pCancelButton.connect_clicked(LINK(this, SwSvxNumBulletTabDialog,
CancelHdl));
AddTabPage(u"singlenum"_ustr, RID_SVXPAGE_PICK_SINGLE_NUM );
AddTabPage(u"bullets"_ustr, RID_SVXPAGE_PICK_BULLET );
AddTabPage(u"outlinenum"_ustr, RID_SVXPAGE_PICK_NUM );
@@ -946,4 +948,11 @@ IMPL_LINK_NOARG(SwSvxNumBulletTabDialog,
RemoveNumberingHdl, weld::Button&, void
m_xDialog->response(RET_USER);
}
+IMPL_LINK_NOARG(SwSvxNumBulletTabDialog, CancelHdl, weld::Button&, void)
+{
+ PrepareCancel();
+
+ m_xDialog->response(RET_CANCEL);
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/uibase/inc/num.hxx b/sw/source/uibase/inc/num.hxx
index 9dfa2bf9ea4f..1799ad3296cc 100644
--- a/sw/source/uibase/inc/num.hxx
+++ b/sw/source/uibase/inc/num.hxx
@@ -124,6 +124,7 @@ class SwSvxNumBulletTabDialog final : public
SfxTabDialogController
virtual short Ok() override;
virtual void PageCreated(const OUString& rPageId, SfxTabPage& rPage)
override;
DECL_LINK(RemoveNumberingHdl, weld::Button&, void);
+ DECL_LINK(CancelHdl, weld::Button&, void);
std::unique_ptr<weld::ComboBox> m_xDummyCombo;
commit 6762c86c1b04c062fdf900912e3aeb5538ec1d99
Author: Oliver Specht <[email protected]>
AuthorDate: Mon Jul 22 09:42:41 2024 +0200
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:22 2024 +0200
Minimal size of variable field page increased
With this change the edit size is almost the same as the
insert field dialog shows.
Change-Id: Iafee3d60d33c9eee6020e9ef49aaac900222a0e6
diff --git a/sw/uiconfig/swriter/ui/fldvarpage.ui
b/sw/uiconfig/swriter/ui/fldvarpage.ui
index 94782577de46..d6bea58f3034 100644
--- a/sw/uiconfig/swriter/ui/fldvarpage.ui
+++ b/sw/uiconfig/swriter/ui/fldvarpage.ui
@@ -46,8 +46,8 @@
</object>
<!-- n-columns=3 n-rows=2 -->
<object class="GtkGrid" id="FieldVarPage">
- <property name="width-request">600</property>
- <property name="height-request">300</property>
+ <property name="width-request">700</property>
+ <property name="height-request">400</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
commit 20340f38c555cc739b21a244c6a61ab138a02878
Author: Vasily Melenchuk <[email protected]>
AuthorDate: Mon Mar 25 16:01:48 2024 +0300
Commit: Thorsten Behrens <[email protected]>
CommitDate: Thu Oct 24 07:22:22 2024 +0200
tdf#160553: writerfilter: RTF import: fix problem with first table in
section
Handles section properties between tables.
JUnit test included
Change-Id: I1db8b80749d18c0e73112e4fd1d13d6331aa7291
Change-Id: I8b00bfeb260af024f48ba8a3e6e6ac38e834b684
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170924
Tested-by: Thorsten Behrens <[email protected]>
Reviewed-by: Thorsten Behrens <[email protected]>
-e
... etc. - the rest is truncated