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:

Reply via email to