officecfg/registry/schema/org/openoffice/Office/Writer.xcs | 25 +++++++++++++ sw/inc/viewopt.hxx | 10 +++++ sw/source/ui/config/optpage.cxx | 1 sw/source/uibase/config/cfgitems.cxx | 6 ++- sw/source/uibase/config/usrpref.cxx | 21 ++++++++-- sw/source/uibase/config/viewopt.cxx | 23 +++++++++++ sw/source/uibase/frmdlg/frmmgr.cxx | 4 +- sw/source/uibase/inc/cfgitems.hxx | 1 sw/source/uibase/inc/optpage.hxx | 2 + 9 files changed, 86 insertions(+), 7 deletions(-)
New commits: commit cbcfada382a5a9aa33d55e996e7865487f5b769e Author: Heiko Tietze <tietze.he...@gmail.com> AuthorDate: Tue Dec 1 12:21:10 2020 +0100 Commit: Gabor Kelemen <kelem...@ubuntu.com> CommitDate: Sun Jun 11 23:17:54 2023 +0200 Resolves tdf#99646 - Make default type of anchoring optional Option introduced at Tools > Options > Writer > Formatting Aids Change-Id: I8d890f84107647821c39669114b991c301727788 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106970 Tested-by: Jenkins Reviewed-by: Heiko Tietze <heiko.tie...@documentfoundation.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152794 Tested-by: Gabor Kelemen <kelem...@ubuntu.com> Reviewed-by: Gabor Kelemen <kelem...@ubuntu.com> diff --git a/officecfg/registry/schema/org/openoffice/Office/Writer.xcs b/officecfg/registry/schema/org/openoffice/Office/Writer.xcs index 0c25de006f9e..88ac40f5057d 100644 --- a/officecfg/registry/schema/org/openoffice/Office/Writer.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/Writer.xcs @@ -1079,6 +1079,31 @@ </info> <value>true</value> </prop> + <prop oor:name="DefaultAnchor" oor:type="xs:int" oor:nillable="false"> + <!-- UIHints: Tools - Options - Writer - View - Default Anchor --> + <info> + <desc>Specifies the anchor of newly inserted images.</desc> + <label>Default Anchor</label> + </info> + <constraints> + <enumeration oor:value="0"> + <info> + <desc>FLY_TO_PARA</desc> + </info> + </enumeration> + <enumeration oor:value="1"> + <info> + <desc>FLY_TO_CHAR</desc> + </info> + </enumeration> + <enumeration oor:value="2"> + <info> + <desc>FLY_AS_CHAR</desc> + </info> + </enumeration> + </constraints> + <value>1</value> + </prop> </group> <group oor:name="NonprintingCharacter"> <info> diff --git a/sw/inc/viewopt.hxx b/sw/inc/viewopt.hxx index 11d2914ed028..3a2148c7911c 100644 --- a/sw/inc/viewopt.hxx +++ b/sw/inc/viewopt.hxx @@ -25,6 +25,7 @@ #include <tools/gen.hxx> #include <tools/color.hxx> +#include <svx/swframetypes.hxx> #include <sfx2/zoomitem.hxx> #include "swdllapi.h" @@ -169,6 +170,7 @@ class SW_DLLPUBLIC SwViewOption bool mbHideWhitespaceMode : 1; // Hide header, footer, and pagebreak. bool m_bShowPlaceHolderFields : 1; // Only used in printing! mutable bool m_bIdle; + sal_Int32 m_nDefaultAnchor; // GetDefaultAnchorType() to convert int to RndStdIds // Scale sal_uInt16 m_nZoom; // In percent. @@ -649,6 +651,14 @@ public: static void SetDocBoundaries(bool bSet) {SetAppearanceFlag(ViewOptFlags::DocBoundaries, bSet);} static void ApplyColorConfigValues(const svtools::ColorConfig& rConfig); + + // get/set default anchor (0..2); use GetDefaultAnchorType() to convert into RndStdIds::FLY_* + sal_Int32 GetDefaultAnchor() const + { return m_nDefaultAnchor; } + void SetDefaultAnchor( const sal_Int32 aFlag ) + { m_nDefaultAnchor = aFlag; } + + RndStdIds GetDefaultAnchorType(); }; inline bool SwViewOption::operator==( const SwViewOption &rOpt ) const diff --git a/sw/source/ui/config/optpage.cxx b/sw/source/ui/config/optpage.cxx index 88b6740e8a9a..98359cc2ae05 100644 --- a/sw/source/ui/config/optpage.cxx +++ b/sw/source/ui/config/optpage.cxx @@ -1218,6 +1218,7 @@ SwShdwCursorOptionsTabPage::SwShdwCursorOptionsTabPage(weld::Container* pPage, w , m_xFillSpaceRB(m_xBuilder->weld_radio_button("fillspace")) , m_xCursorProtFrame(m_xBuilder->weld_frame("crsrprotframe")) , m_xCursorInProtCB(m_xBuilder->weld_check_button("cursorinprot")) + , m_xDefaultAnchorType(m_xBuilder->weld_combo_box("cxDefaultAnchor")) , m_xMathBaselineAlignmentCB(m_xBuilder->weld_check_button("mathbaseline")) { const SfxPoolItem* pItem = nullptr; diff --git a/sw/source/uibase/config/cfgitems.cxx b/sw/source/uibase/config/cfgitems.cxx index efbbdf4154b4..a5e8718aa718 100644 --- a/sw/source/uibase/config/cfgitems.cxx +++ b/sw/source/uibase/config/cfgitems.cxx @@ -41,6 +41,7 @@ SwDocDisplayItem::SwDocDisplayItem() : bCharHiddenText = bBookmarks = bManualBreak = true; + m_xDefaultAnchor = 1; //FLY_TO_CHAR }; // Item for the Settings dialog, page document view @@ -55,6 +56,7 @@ SwDocDisplayItem::SwDocDisplayItem(const SwViewOption& rVOpt ) : bCharHiddenText = rVOpt.IsShowHiddenChar(true); bBookmarks = rVOpt.IsShowBookmarks(true); bManualBreak = rVOpt.IsLineBreak(true); + m_xDefaultAnchor = rVOpt.GetDefaultAnchor(); } SfxPoolItem* SwDocDisplayItem::Clone( SfxItemPool* ) const @@ -75,7 +77,8 @@ bool SwDocDisplayItem::operator==( const SfxPoolItem& rAttr ) const bSoftHyphen == rItem.bSoftHyphen && bCharHiddenText == rItem.bCharHiddenText && bBookmarks == rItem.bBookmarks && - bManualBreak == rItem.bManualBreak ); + bManualBreak == rItem.bManualBreak && + m_xDefaultAnchor == rItem.m_xDefaultAnchor); } void SwDocDisplayItem::FillViewOptions( SwViewOption& rVOpt) const @@ -88,6 +91,7 @@ void SwDocDisplayItem::FillViewOptions( SwViewOption& rVOpt) const rVOpt.SetShowHiddenChar(bCharHiddenText ); rVOpt.SetShowBookmarks(bBookmarks ); rVOpt.SetLineBreak (bManualBreak ); + rVOpt.SetDefaultAnchor( m_xDefaultAnchor ); } SwElemItem::SwElemItem() : diff --git a/sw/source/uibase/config/usrpref.cxx b/sw/source/uibase/config/usrpref.cxx index cfc6142314c6..7f368346f66c 100644 --- a/sw/source/uibase/config/usrpref.cxx +++ b/sw/source/uibase/config/usrpref.cxx @@ -83,6 +83,7 @@ SwMasterUsrPref::~SwMasterUsrPref() } static const auto g_UpdateLinkIndex = 17; +const auto g_DefaultAnchor = 22; Sequence<OUString> SwContentViewConfig::GetPropertyNames() const { @@ -93,8 +94,8 @@ Sequence<OUString> SwContentViewConfig::GetPropertyNames() const "Display/DrawingControl", // 2 "Display/FieldCode", // 3 "Display/Note", // 4 - "Display/ShowContentTips", // 5 - "NonprintingCharacter/MetaCharacters", // 6 + "Display/ShowContentTips", // 5 + "NonprintingCharacter/MetaCharacters", // 6 "NonprintingCharacter/ParagraphEnd", // 7 "NonprintingCharacter/OptionalHyphen", // 8 "NonprintingCharacter/Space", // 9 @@ -109,7 +110,8 @@ Sequence<OUString> SwContentViewConfig::GetPropertyNames() const "Update/Field", // 18 "Update/Chart", // 19 "Display/ShowInlineTooltips", // 20 - "Display/UseHeaderFooterMenu" // 21 + "Display/UseHeaderFooterMenu", // 21 + "Display/DefaultAnchor" // 22 }; #if defined(__GNUC__) && !defined(__clang__) // clang 8.0.0 says strcmp isn't constexpr @@ -177,8 +179,9 @@ void SwContentViewConfig::ImplCommit() case 19: bVal = rParent.IsUpdateCharts(); break;// "Update/Chart" case 20: bVal = rParent.IsShowInlineTooltips(); break;// "Display/ShowInlineTooltips" case 21: bVal = rParent.IsUseHeaderFooterMenu(); break;// "Display/UseHeaderFooterMenu" + case 22: pValues[nProp] <<= rParent.GetDefaultAnchor(); break;// "Display/DefaultAnchor" } - if (nProp != g_UpdateLinkIndex) + if ((nProp != g_UpdateLinkIndex) && (nProp != g_DefaultAnchor)) pValues[nProp] <<= bVal; } PutProperties(aNames, aValues); @@ -196,7 +199,8 @@ void SwContentViewConfig::Load() { if(pValues[nProp].hasValue()) { - bool bSet = nProp != g_UpdateLinkIndex && *o3tl::doAccess<bool>(pValues[nProp]); + bool bSet = ((nProp != g_UpdateLinkIndex) && (nProp != g_DefaultAnchor)) + && *o3tl::doAccess<bool>(pValues[nProp]); switch(nProp) { case 0: rParent.SetGraphic(bSet); break;// "Display/GraphicObject", @@ -227,6 +231,13 @@ void SwContentViewConfig::Load() case 19: rParent.SetUpdateCharts(bSet); break;// "Update/Chart" case 20: rParent.SetShowInlineTooltips(bSet); break;// "Display/ShowInlineTooltips" case 21: rParent.SetUseHeaderFooterMenu(bSet); break;// "Display/UseHeaderFooterMenu" + case 22: + { + sal_Int32 nSet = 0; + pValues[nProp] >>= nSet; + rParent.SetDefaultAnchor(nSet); + } + break; // "Display/DefaultAnchor" } } } diff --git a/sw/source/uibase/config/viewopt.cxx b/sw/source/uibase/config/viewopt.cxx index 6059ef5ec8c8..6fa49a4258f0 100644 --- a/sw/source/uibase/config/viewopt.cxx +++ b/sw/source/uibase/config/viewopt.cxx @@ -83,6 +83,7 @@ bool SwViewOption::IsEqualFlags( const SwViewOption &rOpt ) const && mbHideWhitespaceMode == rOpt.mbHideWhitespaceMode && m_bShowPlaceHolderFields == rOpt.m_bShowPlaceHolderFields && m_bIdle == rOpt.m_bIdle + && m_nDefaultAnchor == rOpt.m_nDefaultAnchor #ifdef DBG_UTIL // correspond to the statements in ui/config/cfgvw.src && m_bTest1 == rOpt.IsTest1() @@ -210,6 +211,8 @@ SwViewOption::SwViewOption() : m_bIdle = true; + m_nDefaultAnchor = 1; //FLY_TO_CHAR + #ifdef DBG_UTIL // correspond to the statements in ui/config/cfgvw.src m_bTest1 = m_bTest2 = m_bTest3 = m_bTest4 = @@ -248,6 +251,7 @@ SwViewOption::SwViewOption(const SwViewOption& rVOpt) mbHideWhitespaceMode = rVOpt.mbHideWhitespaceMode; m_bShowPlaceHolderFields = rVOpt.m_bShowPlaceHolderFields; m_bIdle = rVOpt.m_bIdle; + m_nDefaultAnchor = rVOpt.m_nDefaultAnchor; #ifdef DBG_UTIL m_bTest1 = rVOpt.m_bTest1; @@ -289,6 +293,7 @@ SwViewOption& SwViewOption::operator=( const SwViewOption &rVOpt ) mbHideWhitespaceMode = rVOpt.mbHideWhitespaceMode; m_bShowPlaceHolderFields = rVOpt.m_bShowPlaceHolderFields; m_bIdle = rVOpt.m_bIdle; + m_nDefaultAnchor = rVOpt.m_nDefaultAnchor; #ifdef DBG_UTIL m_bTest1 = rVOpt.m_bTest1; @@ -360,6 +365,24 @@ sal_uInt16 GetHtmlMode(const SwDocShell* pShell) return nRet; } +RndStdIds SwViewOption::GetDefaultAnchorType() +{ + switch ( m_nDefaultAnchor ) + { + case 0: + return RndStdIds::FLY_AT_PARA; //0 + break; + case 1: + return RndStdIds::FLY_AT_CHAR; //4 + break; + case 2: + return RndStdIds::FLY_AS_CHAR; //1 + break; + default: + return RndStdIds::FLY_AT_CHAR; //4 + }//switch +} + Color& SwViewOption::GetDocColor() { return s_aDocColor; diff --git a/sw/source/uibase/frmdlg/frmmgr.cxx b/sw/source/uibase/frmdlg/frmmgr.cxx index e09d42623ee1..db6b036a7cc8 100644 --- a/sw/source/uibase/frmdlg/frmmgr.cxx +++ b/sw/source/uibase/frmdlg/frmmgr.cxx @@ -88,7 +88,9 @@ SwFlyFrameAttrMgr::SwFlyFrameAttrMgr( bool bNew, SwWrtShell* pSh, Frmmgr_Type nT if (nType == Frmmgr_Type::GRF || nType == Frmmgr_Type::OLE) { - m_aSet.Put(SwFormatAnchor(RndStdIds::FLY_AT_CHAR)); + // Default anchor for new graphics and objects is at-char, except for Math objects. + SwViewOption aViewOpt(*pSh->GetViewOptions()); + m_aSet.Put(SwFormatAnchor(aViewOpt.GetDefaultAnchorType()));//RndStdIds::FLY_AT_CHAR } } else if ( nType == Frmmgr_Type::NONE ) diff --git a/sw/source/uibase/inc/cfgitems.hxx b/sw/source/uibase/inc/cfgitems.hxx index 297ac1846faa..11fc13baecc0 100644 --- a/sw/source/uibase/inc/cfgitems.hxx +++ b/sw/source/uibase/inc/cfgitems.hxx @@ -51,6 +51,7 @@ class SW_DLLPUBLIC SwDocDisplayItem : public SfxPoolItem bool bCharHiddenText :1; bool bBookmarks :1; bool bManualBreak :1; + sal_Int32 m_xDefaultAnchor; public: SwDocDisplayItem(); diff --git a/sw/source/uibase/inc/optpage.hxx b/sw/source/uibase/inc/optpage.hxx index 8de1394b633e..d85091a4572e 100644 --- a/sw/source/uibase/inc/optpage.hxx +++ b/sw/source/uibase/inc/optpage.hxx @@ -244,6 +244,8 @@ class SwShdwCursorOptionsTabPage : public SfxTabPage std::unique_ptr<weld::Frame> m_xCursorProtFrame; std::unique_ptr<weld::CheckButton> m_xCursorInProtCB; + std::unique_ptr<weld::ComboBox> m_xDefaultAnchorType; + std::unique_ptr<weld::CheckButton> m_xMathBaselineAlignmentCB; public: