summaryrefslogtreecommitdiff
path: root/sw/source
diff options
context:
space:
mode:
authorMuhammet Kara <muhammet.kara@collabora.com>2019-06-24 01:46:42 +0300
committerAndras Timar <andras.timar@collabora.com>2019-09-30 21:50:39 +0200
commit5a76cbb3570437f2eea4549b97dc6e08068d7a59 (patch)
tree6e9062275f312dc3482f7c570e21de5e71b53e2f /sw/source
parenteda88cd2eb4cba8f1a3482a3d1bfda66d29f3aab (diff)
Sync page orientation of Endnote page
Description: When changing the default page style to have a different orientation, end-notes are placed on a page with a custom ‘Endnote’ page style. This style does not inherit its orientation from the default style. Repro: Create a blank document, insert→End Note, Format→Page in the first page, select the Page tab, and alter the Orientation to Landscape, ‘Ok’. The End-note page should update its orientation too. NB. If the Endnote page style is manually set to a different value in a document template it will remain in the selected orientation. After this patch, Default style and the Endnote style have their orientations synced after each run of the Format > Page dialog. Ideally, this should be solved by resolving tdf#41316 on master: Page styles should support hierarchical parent-child relationships (like paragraph or character styles) Change-Id: I255b470d1aebb897f50a4a74b8678b771ffbab28 Reviewed-on: https://gerrit.libreoffice.org/79869 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'sw/source')
-rw-r--r--sw/source/uibase/app/docst.cxx86
1 files changed, 85 insertions, 1 deletions
diff --git a/sw/source/uibase/app/docst.cxx b/sw/source/uibase/app/docst.cxx
index 806c38b64bf2..59dfb6bbbfd5 100644
--- a/sw/source/uibase/app/docst.cxx
+++ b/sw/source/uibase/app/docst.cxx
@@ -86,6 +86,7 @@
#include <paratr.hxx>
#include <tblafmt.hxx>
#include <sfx2/watermarkitem.hxx>
+#include <strings.hrc>
using namespace ::com::sun::star;
@@ -641,6 +642,71 @@ IMPL_LINK_NOARG(ApplyStyle, ApplyHdl, LinkParamNone*, void)
pWrtShell->EndAllAction();
}
+namespace
+{
+/// Checks if there is an Endnote page style in use, and makes sure it has the same orientation
+/// with the Default (Standard) page style.
+void syncEndnoteOrientation(const uno::Reference< style::XStyleFamiliesSupplier >& xStyleFamSupp)
+{
+ if (!xStyleFamSupp.is())
+ {
+ SAL_WARN("sw.ui", "Ref to XStyleFamiliesSupplier is null.");
+ return;
+ }
+ uno::Reference<container::XNameAccess> xStyleFamilies(
+ xStyleFamSupp->getStyleFamilies(), uno::UNO_QUERY);
+
+ if (!xStyleFamilies.is())
+ return;
+
+ uno::Reference<container::XNameAccess> xPageStyles(xStyleFamilies->getByName("PageStyles"),
+ uno::UNO_QUERY);
+
+ if (!xPageStyles.is())
+ return;
+
+ uno::Reference<css::style::XStyle> xEndnotePageStyle(xPageStyles->getByName("Endnote"),
+ uno::UNO_QUERY);
+
+ if (!xEndnotePageStyle.is())
+ return;
+
+ // Language-independent name of the "Default Style" is "Standard"
+ uno::Reference<css::style::XStyle> xDefaultPageStyle(xPageStyles->getByName("Standard"),
+ uno::UNO_QUERY);
+ if (!xDefaultPageStyle.is())
+ return;
+
+ if (xEndnotePageStyle->isUserDefined() || !xEndnotePageStyle->isInUse())
+ return;
+
+ uno::Reference<beans::XPropertySet> xEndnotePagePropSet(xPageStyles->getByName("Endnote"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xDefaultPagePropSet(xPageStyles->getByName("Standard"), uno::UNO_QUERY);
+
+ if (!xEndnotePagePropSet.is() || !xDefaultPagePropSet.is())
+ {
+ SAL_WARN("sw.ui", "xEndnotePagePropSet or xDefaultPagePropSet is null.");
+ return;
+ }
+
+ sal_Int32 nWidth, nHeight;
+ bool bIsDefLandScape, bIsEndLandScape;
+
+ xDefaultPagePropSet->getPropertyValue("IsLandscape") >>= bIsDefLandScape;
+ xEndnotePagePropSet->getPropertyValue("IsLandscape") >>= bIsEndLandScape;
+
+ if (bIsDefLandScape == bIsEndLandScape)
+ return;
+
+ xEndnotePagePropSet->getPropertyValue("Width") >>= nWidth;
+ xEndnotePagePropSet->getPropertyValue("Height") >>= nHeight;
+
+ xEndnotePagePropSet->setPropertyValue("IsLandscape", css::uno::toAny(bIsDefLandScape));
+ xEndnotePagePropSet->setPropertyValue("Width", css::uno::toAny(nHeight));
+ xEndnotePagePropSet->setPropertyValue("Height", css::uno::toAny(nWidth));
+}
+}
+
void SwDocShell::Edit(
const OUString &rName,
const OUString &rParent,
@@ -830,7 +896,12 @@ void SwDocShell::Edit(
pReq->Ignore(); // the 'old' request is not relevant any more
}
- pDlg->StartExecuteAsync([bModified, bNew, nFamily, nSlot, nNewStyleUndoId, pApplyStyleHelper, pRequest, xTmp, this](sal_Int32 nResult){
+ bool bIsDefaultPage = nFamily == SfxStyleFamily::Page
+ && rName == SwResId(STR_POOLPAGE_STANDARD)
+ && pStyle->IsUsed()
+ && !pStyle->IsUserDefined();
+
+ pDlg->StartExecuteAsync([bIsDefaultPage, bModified, bNew, nFamily, nSlot, nNewStyleUndoId, pApplyStyleHelper, pRequest, xTmp, this](sal_Int32 nResult){
if (RET_OK == nResult)
pApplyStyleHelper->apply();
@@ -865,6 +936,19 @@ void SwDocShell::Edit(
if (pRequest)
pRequest->Done();
+
+ if (bIsDefaultPage && bModified)
+ {
+ uno::Reference< style::XStyleFamiliesSupplier > xStyleFamSupp(GetModel(), uno::UNO_QUERY);
+
+ if (!xStyleFamSupp.is())
+ {
+ SAL_WARN("sw.ui", "Ref to XStyleFamiliesSupplier is null.");
+ return;
+ }
+
+ syncEndnoteOrientation(xStyleFamSupp);
+ }
});
}
else