cui/inc/strings.hrc                                    |    1 
 cui/source/options/appearance.cxx                      |    1 
 include/svtools/colorcfg.hxx                           |    2 
 officecfg/registry/data/org/openoffice/Office/UI.xcu   |    5 
 officecfg/registry/schema/org/openoffice/Office/UI.xcs |   10 
 sc/source/ui/inc/gridwin.hxx                           |    6 
 sc/source/ui/inc/viewdata.hxx                          |    2 
 sc/source/ui/view/gridwin.cxx                          |  185 +++++++++++++----
 sc/source/ui/view/select.cxx                           |   38 +++
 sc/source/ui/view/tabvwsh4.cxx                         |   29 +-
 svtools/source/config/colorcfg.cxx                     |    6 
 11 files changed, 235 insertions(+), 50 deletions(-)

New commits:
commit dd06c834b1e0c3bd2c5b9796fba8d853a9f7d7b0
Author:     Markus Mohrhard <[email protected]>
AuthorDate: Mon Jul 21 08:26:26 2025 +0800
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Nov 17 18:58:45 2025 +0100

    show indication of selected database range in Calc
    
    This will show a rectangle around the database range covering the
    selected cell. The fill handle allows to change the size of the
    DB range.
    
    cherry-pick from: d90807926d56dae13dfcacee251d04bda31df548
    
    Change-Id: I9b1bdcebfb957ffe064000f05a379e2fd35e095c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/193664
    Tested-by: Andras Timar <[email protected]>
    Reviewed-by: Andras Timar <[email protected]>

diff --git a/cui/inc/strings.hrc b/cui/inc/strings.hrc
index e200921a7ac3..4b8ec0da311d 100644
--- a/cui/inc/strings.hrc
+++ b/cui/inc/strings.hrc
@@ -478,6 +478,7 @@
 #define REG_HTMLUNKNOWN                     NC_("REG_HTMLUNKNOWN", "HTML Text 
Highlighting")
 #define REG_CALCGRID                        NC_("REG_CALCGRID", "Calc Grid")
 #define REG_CALCCELLFOCUS                   NC_("REG_CALCCELLFOCUS", "Calc 
Cell focus")
+#define REG_CALCDBFOCUS                     NC_("REG_CALCDBFOCUS", "Table 
Style focus")
 #define REG_CALCPAGEBREAK                   NC_("REG_CALCPAGEBREAK", "Calc 
Page break")
 #define REG_CALCPAGEBREAKMANUAL             NC_("REG_CALCPAGEBREAKMANUAL", 
"Calc Manual page breaks")
 #define REG_CALCPAGEBREAKAUTOMATIC          NC_("REG_CALCPAGEBREAKAUTOMATIC", 
"Calc Automatic page breaks")
diff --git a/cui/source/options/appearance.cxx 
b/cui/source/options/appearance.cxx
index 098874c205db..718603f8549a 100644
--- a/cui/source/options/appearance.cxx
+++ b/cui/source/options/appearance.cxx
@@ -622,6 +622,7 @@ void SvxAppearanceTabPage::FillItemsList()
             { HTMLUNKNOWN, CuiResId(REG_HTMLUNKNOWN) },
             { CALCGRID, CuiResId(REG_CALCGRID) },
             { CALCCELLFOCUS, CuiResId(REG_CALCCELLFOCUS) },
+            { CALCDBFOCUS, CuiResId(REG_CALCDBFOCUS) },
             { CALCPAGEBREAK, CuiResId(REG_CALCPAGEBREAK) },
             { CALCPAGEBREAKMANUAL, CuiResId(REG_CALCPAGEBREAKMANUAL) },
             { CALCPAGEBREAKAUTOMATIC, CuiResId(REG_CALCPAGEBREAKAUTOMATIC) },
diff --git a/include/svtools/colorcfg.hxx b/include/svtools/colorcfg.hxx
index 0275cfda26b8..40417e507a0c 100644
--- a/include/svtools/colorcfg.hxx
+++ b/include/svtools/colorcfg.hxx
@@ -57,6 +57,7 @@ enum ColorConfigEntry : int
     HTMLUNKNOWN         ,
     CALCGRID            ,
     CALCCELLFOCUS       ,
+    CALCDBFOCUS         ,
     CALCPAGEBREAK       ,
     CALCPAGEBREAKMANUAL,
     CALCPAGEBREAKAUTOMATIC,
@@ -167,6 +168,7 @@ namespace {
         { std::u16string_view(u"HTMLUnknown"), false, false },
         { std::u16string_view(u"CalcGrid"), false, false },
         { std::u16string_view(u"CalcCellFocus"), false, false },
+        { std::u16string_view(u"CalcDBFocus"), false, false },
         { std::u16string_view(u"CalcPageBreak"), false, false },
         { std::u16string_view(u"CalcPageBreakManual"), false, false },
         { std::u16string_view(u"CalcPageBreakAutomatic"), false, false },
diff --git a/officecfg/registry/data/org/openoffice/Office/UI.xcu 
b/officecfg/registry/data/org/openoffice/Office/UI.xcu
index de7f04e4b15e..4524acda923b 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI.xcu
@@ -371,6 +371,11 @@
             <value xsi:nil="true"/>
           </prop>
         </node>
+        <node oor:name="CalcDBFocus">
+          <prop oor:name="Color">
+            <value xsi:nil="true"/>
+          </prop>
+        </node>
         <node oor:name="CalcPageBreak">
           <prop oor:name="Light">
             <value xsi:nil="true"/>
diff --git a/officecfg/registry/schema/org/openoffice/Office/UI.xcs 
b/officecfg/registry/schema/org/openoffice/Office/UI.xcs
index a1a5d3113186..4623c42567ae 100644
--- a/officecfg/registry/schema/org/openoffice/Office/UI.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/UI.xcs
@@ -488,6 +488,16 @@
           </info>
         </prop>
       </group>
+      <group oor:name="CalcDBFocus">
+        <info>
+        <desc>Specifies the setting to change the database range highlight in 
Calc</desc>
+        </info>
+        <prop oor:name="Color" oor:type="xs:int">
+          <info>
+            <desc>Specifies the color for the database range highlight in 
Calc.</desc>
+          </info>
+        </prop>
+      </group>
       <group oor:name="CalcPageBreak">
         <info>
           <desc>Specifies the settings used for page breaks in the page break 
preview in Calc.</desc>
diff --git a/sc/source/ui/inc/gridwin.hxx b/sc/source/ui/inc/gridwin.hxx
index bf9863f3d817..9b06a208fd9a 100644
--- a/sc/source/ui/inc/gridwin.hxx
+++ b/sc/source/ui/inc/gridwin.hxx
@@ -122,8 +122,11 @@ class SAL_DLLPUBLIC_RTTI ScGridWindow : public 
vcl::DocWindow, public DropTarget
     std::unique_ptr<sdr::overlay::OverlayObjectList> mpOOHeader;
     std::unique_ptr<sdr::overlay::OverlayObjectList> mpOOShrink;
     std::unique_ptr<sdr::overlay::OverlayObjectList> mpOOSparklineGroup;
+    std::unique_ptr<sdr::overlay::OverlayObjectList> mpOODatabase;
 
     std::optional<tools::Rectangle> mpAutoFillRect;
+    std::optional<tools::Rectangle> mpDBExpandRect;
+    ScRange maDBRange;
 
     /// LibreOfficeKit needs a persistent FmFormView for tiled rendering,
     /// otherwise the invalidations from drawinglayer do not work.
@@ -335,6 +338,7 @@ class SAL_DLLPUBLIC_RTTI ScGridWindow : public 
vcl::DocWindow, public DropTarget
     void            UpdateFormulaRange(SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW 
nY2);
 
     std::unique_ptr<sdr::overlay::OverlayObject> DrawOverlay(const 
std::vector<tools::Rectangle>& rRects, const Color& rColor, bool bBorder, bool 
bContrastOutline, sdr::overlay::OverlayType eOverlayType);
+    std::unique_ptr<sdr::overlay::OverlayObjectList> DrawFillMarker(SCCOL 
nCol, SCROW nRow, std::optional<tools::Rectangle>& rRect);
 
 protected:
     virtual void    PrePaint(vcl::RenderContext& rRenderContext) override;
@@ -498,6 +502,8 @@ public:
     void            UpdateCursorOverlay();
     void            DeleteSelectionOverlay();
     void            UpdateSelectionOverlay();
+    void UpdateDatabaseOverlay();
+    void DeleteDatabaseOverlay();
     void            UpdateHighlightOverlay();
     void            DeleteAutoFillOverlay();
     void            UpdateAutoFillOverlay();
diff --git a/sc/source/ui/inc/viewdata.hxx b/sc/source/ui/inc/viewdata.hxx
index 7552fe86d5f8..05753470e82b 100644
--- a/sc/source/ui/inc/viewdata.hxx
+++ b/sc/source/ui/inc/viewdata.hxx
@@ -39,6 +39,7 @@ enum class ScFillMode
     EMBED_LT    = 2,
     EMBED_RB    = 3,
     MATRIX      = 4,
+    DBEXPAND    = 5, // using a fill mode is a bit of a hack but the DB 
expansion behaves like a auto fill
 };
 
 enum ScSplitMode { SC_SPLIT_NONE = 0, SC_SPLIT_NORMAL, SC_SPLIT_FIX, 
SC_SPLIT_MODE_MAX_ENUM = SC_SPLIT_FIX };
@@ -555,6 +556,7 @@ public:
     void            ResetFillMode();
     bool            IsAnyFillMode() const       { return nFillMode != 
ScFillMode::NONE; }
     bool            IsFillMode() const          { return nFillMode == 
ScFillMode::FILL; }
+    bool            IsDBExpandMode() const      { return nFillMode == 
ScFillMode::DBEXPAND; }
     ScFillMode      GetFillMode() const         { return nFillMode; }
 
     SvxAdjust       GetEditAdjust() const {return eEditAdjust; }
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 9bf831ff0ca0..d85723ea7ec6 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -1744,10 +1744,10 @@ bool ScGridWindow::TestMouse( const MouseEvent& rMEvt, 
bool bAction )
         ScRange aMarkRange;
         if (mrViewData.GetSimpleArea( aMarkRange ) == SC_MARK_SIMPLE)
         {
-            if (aMarkRange.aStart.Tab() == mrViewData.CurrentTabForData() && 
mpAutoFillRect)
+            if (aMarkRange.aStart.Tab() == mrViewData.CurrentTabForData())
             {
                 Point aMousePos = rMEvt.GetPosPixel();
-                if (mpAutoFillRect->Contains(aMousePos))
+                if (mpAutoFillRect && mpAutoFillRect->Contains(aMousePos))
                 {
                     SetPointer( PointerStyle::Cross );     //! bold cross ?
                     if (bAction)
@@ -1768,6 +1768,19 @@ bool ScGridWindow::TestMouse( const MouseEvent& rMEvt, 
bool bAction )
                     }
                     bNewPointer = true;
                 }
+                else if (mpDBExpandRect && mpDBExpandRect->Contains(aMousePos))
+                {
+                    SetPointer( PointerStyle::Cross );     //! bold cross ?
+                    if (bAction)
+                    {
+                        SCCOL nX = maDBRange.aEnd.Col();
+                        SCROW nY = maDBRange.aEnd.Row();
+
+                        mrViewData.SetDragMode(
+                            maDBRange.aStart.Col(), maDBRange.aStart.Row(), 
nX, nY, ScFillMode::DBEXPAND );
+                    }
+                    bNewPointer = true;
+                }
             }
         }
 
@@ -2013,7 +2026,6 @@ void ScGridWindow::HandleMouseButtonDown( const 
MouseEvent& rMEvt, MouseEventSta
 
     RfCorner rCorner = NONE;
     bool bFound = HitRangeFinder(rMEvt.GetPosPixel(), rCorner, &nRFIndex, 
&nRFAddX, &nRFAddY);
-    bRFSize = (rCorner != NONE);
     aRFSelectedCorned = rCorner;
 
     if (bFound)
@@ -2457,6 +2469,32 @@ void ScGridWindow::MouseButtonUp( const MouseEvent& 
rMEvt )
             mrViewData.GetView()->MarkRange( ScRange( aBlockRange.aStart, 
aEndPos ) );
         }
     }
+    else if (mrViewData.IsDBExpandMode())
+    {
+        SCCOL nStartCol;
+        SCROW nStartRow;
+        SCCOL nEndCol;
+        SCROW nEndRow;
+        mrViewData.GetFillData( nStartCol, nStartRow, nEndCol, nEndRow );
+        SCCOL nFillCol = mrViewData.GetRefEndX();
+        SCROW nFillRow = mrViewData.GetRefEndY();
+        ScViewFunc* pView = mrViewData.GetView();
+        pView->StopRefMode();
+        mrViewData.ResetFillMode();
+        pView->GetFunctionSet().SetAnchorFlag( false );    // #i5819# don't 
use AutoFill anchor flag for selection
+        ScAddress aCurrentAddress = mrViewData.GetCurPos();
+        ScDocument& rDocument = mrViewData.GetDocument();
+        if (ScDBData* pDBData = rDocument.GetDBAtCursor(aCurrentAddress.Col(), 
aCurrentAddress.Row(), aCurrentAddress.Tab(), ScDBDataPortion::AREA))
+        {
+            SCTAB nTab = mrViewData.GetTabNumber();
+            ScDBDocFunc aFunc( *mrViewData.GetDocShell() );
+            ScDBData aNewDBData(*pDBData);
+            ScRange aNewDBRange(nStartCol, nStartRow, nTab, nFillCol, 
nFillRow, nTab);
+            aNewDBRange.PutInOrder();
+            aNewDBData.SetArea(nTab, aNewDBRange.aStart.Col(), 
aNewDBRange.aStart.Row(), aNewDBRange.aEnd.Col(), aNewDBRange.aEnd.Row());
+            aFunc.ModifyDBData(aNewDBData);
+        }
+    }
     else if (mrViewData.IsAnyFillMode())
     {
                                                 // Embedded area has been 
changed
@@ -3185,7 +3223,9 @@ void ScGridWindow::StartDrag( sal_Int8 /* nAction */, 
const Point& rPosPixel )
     }
     else
         if ( !DrawCommand(aDragEvent) )
+        {
             mrViewData.GetView()->GetSelEngine()->Command( aDragEvent );
+        }
 }
 
 static void lcl_SetTextCursorPos( ScViewData& rViewData, ScSplitPos eWhich, 
vcl::Window* pWin )
@@ -6278,6 +6318,7 @@ void ScGridWindow::CursorChanged()
     UpdateCursorOverlay();
     UpdateAutoFillOverlay();
     UpdateSparklineGroupOverlay();
+    UpdateDatabaseOverlay();
 }
 
 void ScGridWindow::ImpCreateOverlayObjects()
@@ -6291,6 +6332,7 @@ void ScGridWindow::ImpCreateOverlayObjects()
     UpdateHeaderOverlay();
     UpdateShrinkOverlay();
     UpdateSparklineGroupOverlay();
+    UpdateDatabaseOverlay();
 }
 
 void ScGridWindow::ImpDestroyOverlayObjects()
@@ -6304,6 +6346,7 @@ void ScGridWindow::ImpDestroyOverlayObjects()
     DeleteHeaderOverlay();
     DeleteShrinkOverlay();
     DeleteSparklineGroupOverlay();
+    DeleteDatabaseOverlay();
 }
 
 void ScGridWindow::UpdateAllOverlays()
@@ -6905,6 +6948,66 @@ void ScGridWindow::UpdateSelectionOverlay()
     }
 }
 
+void ScGridWindow::DeleteDatabaseOverlay()
+{
+    mpOODatabase.reset();
+}
+
+void ScGridWindow::UpdateDatabaseOverlay()
+{
+    const MapMode aDrawMode = GetDrawMapMode();
+    const MapMode aOldMode = GetMapMode();
+    comphelper::ScopeGuard aMapModeGuard(
+        [&aOldMode, &aDrawMode, this] {
+            if (aOldMode != aDrawMode)
+                SetMapMode(aOldMode);
+        }
+    );
+    if (aOldMode != aDrawMode)
+        SetMapMode(aDrawMode);
+
+    DeleteDatabaseOverlay();
+
+    ScDocument& rDocument = mrViewData.GetDocument();
+    ScAddress aCurrentAddress = mrViewData.GetCurPos();
+    std::vector<basegfx::B2DRange> aRanges;
+    ScRange aCurrRange;
+    if (ScDBData* pDBData = rDocument.GetDBAtCursor(aCurrentAddress.Col(), 
aCurrentAddress.Row(), aCurrentAddress.Tab(), ScDBDataPortion::AREA))
+    {
+        pDBData->GetArea(aCurrRange);
+        Point aStart = mrViewData.GetScrPos(aCurrRange.aStart.Col(),
+                                            aCurrRange.aStart.Row(), eWhich);
+        Point aEnd = mrViewData.GetScrPos(aCurrRange.aEnd.Col() + 1,
+                                          aCurrRange.aEnd.Row() + 1, eWhich);
+
+        basegfx::B2DRange aRange(aStart.X(), aStart.Y(), aEnd.X(), aEnd.Y());
+        const basegfx::B2DHomMatrix 
aTransform(GetOutDev()->GetInverseViewTransformation());
+        aRange.transform(aTransform);
+        aRanges.push_back(aRange);
+
+        maDBRange = aCurrRange;
+    }
+
+    if (!aRanges.empty())
+    {
+        ScModule* mod = ScModule::get();
+        Color aDBColor = 
mod->GetColorConfig().GetColorValue(svtools::CALCDBFOCUS).nColor;
+
+        // #i70788# get the OverlayManager safely
+        rtl::Reference<sdr::overlay::OverlayManager> xOverlayManager = 
getOverlayManager();
+        std::unique_ptr<sdr::overlay::OverlayObject> pOverlay(new 
sdr::overlay::OverlaySelection(
+            sdr::overlay::OverlayType::NoFill,
+            aDBColor,
+            std::move(aRanges),
+            true, true));
+
+        xOverlayManager->add(*pOverlay);
+        std::unique_ptr<sdr::overlay::OverlayObjectList> pOverlayList = 
DrawFillMarker(aCurrRange.aEnd.Col(), aCurrRange.aEnd.Row(), mpDBExpandRect);
+        mpOODatabase.swap(pOverlayList);
+        mpOODatabase->append(std::move(pOverlay));
+    }
+}
+
 void ScGridWindow::UpdateHighlightOverlay()
 {
     mpOOHighlight.reset();          // DeleteHighlightOverlay
@@ -6939,36 +7042,8 @@ void ScGridWindow::DeleteAutoFillOverlay()
     mpAutoFillRect.reset();
 }
 
-void ScGridWindow::UpdateAutoFillOverlay()
+std::unique_ptr<sdr::overlay::OverlayObjectList> 
ScGridWindow::DrawFillMarker(SCCOL nX, SCROW nY, 
std::optional<tools::Rectangle>& rRect)
 {
-    const MapMode aDrawMode = GetDrawMapMode();
-    const MapMode aOldMode = GetMapMode();
-    comphelper::ScopeGuard aMapModeGuard(
-        [&aOldMode, &aDrawMode, this] {
-            if (aOldMode != aDrawMode)
-                SetMapMode(aOldMode);
-        }
-    );
-    if (aOldMode != aDrawMode)
-        SetMapMode(aDrawMode);
-
-    DeleteAutoFillOverlay();
-
-    //  get the AutoFill handle rectangle in pixels
-
-    if ( !(bAutoMarkVisible && aAutoMarkPos.Tab() == 
mrViewData.CurrentTabForData() &&
-         !mrViewData.HasEditView(eWhich) && mrViewData.IsActive()) )
-        return;
-
-    SCCOL nX = aAutoMarkPos.Col();
-    SCROW nY = aAutoMarkPos.Row();
-
-    if (!maVisibleRange.isInside(nX, nY) && 
!comphelper::LibreOfficeKit::isActive())
-    {
-        // Autofill mark is not visible.  Bail out.
-        return;
-    }
-
     SCTAB nTab = mrViewData.CurrentTabForData();
     ScDocument& rDoc = mrViewData.GetDocument();
     bool bLayoutRTL = rDoc.IsLayoutRTL( nTab );
@@ -7005,8 +7080,8 @@ void ScGridWindow::UpdateAutoFillOverlay()
     tools::Rectangle aFillRect(aFillPos, aFillHandleSize);
 
     // expand rect to increase hit area
-    mpAutoFillRect = aFillRect;
-    mpAutoFillRect->expand(fScaleFactor);
+    rRect = aFillRect;
+    rRect->expand(fScaleFactor);
 
     // #i70788# get the OverlayManager safely
     rtl::Reference<sdr::overlay::OverlayManager> xOverlayManager = 
getOverlayManager();
@@ -7055,10 +7130,46 @@ void ScGridWindow::UpdateAutoFillOverlay()
 
         xOverlayManager->add(*pOverlayOuter);
         xOverlayManager->add(*pOverlayInner);
-        mpOOAutoFill.reset(new sdr::overlay::OverlayObjectList);
-        mpOOAutoFill->append(std::move(pOverlayOuter));
-        mpOOAutoFill->append(std::move(pOverlayInner));
+        std::unique_ptr<sdr::overlay::OverlayObjectList> pOverlayList(new 
sdr::overlay::OverlayObjectList);
+        pOverlayList->append(std::move(pOverlayOuter));
+        pOverlayList->append(std::move(pOverlayInner));
+
+        return pOverlayList;
     }
+    return std::unique_ptr<sdr::overlay::OverlayObjectList>();
+}
+
+void ScGridWindow::UpdateAutoFillOverlay()
+{
+    const MapMode aDrawMode = GetDrawMapMode();
+    const MapMode aOldMode = GetMapMode();
+    comphelper::ScopeGuard aMapModeGuard(
+        [&aOldMode, &aDrawMode, this] {
+            if (aOldMode != aDrawMode)
+                SetMapMode(aOldMode);
+        }
+    );
+    if (aOldMode != aDrawMode)
+        SetMapMode(aDrawMode);
+
+    DeleteAutoFillOverlay();
+
+    //  get the AutoFill handle rectangle in pixels
+
+    if ( !(bAutoMarkVisible && aAutoMarkPos.Tab() == mrViewData.GetTabNumber() 
&&
+         !mrViewData.HasEditView(eWhich) && mrViewData.IsActive()) )
+        return;
+
+    SCCOL nX = aAutoMarkPos.Col();
+    SCROW nY = aAutoMarkPos.Row();
+
+    if (!maVisibleRange.isInside(nX, nY) && 
!comphelper::LibreOfficeKit::isActive())
+    {
+        // Autofill mark is not visible.  Bail out.
+        return;
+    }
+
+    mpOOAutoFill = DrawFillMarker(nX, nY, mpAutoFillRect);
 }
 
 void ScGridWindow::DeleteDragRectOverlay()
diff --git a/sc/source/ui/view/select.cxx b/sc/source/ui/view/select.cxx
index 03a882f05e64..612a04c9c0e8 100644
--- a/sc/source/ui/view/select.cxx
+++ b/sc/source/ui/view/select.cxx
@@ -625,6 +625,44 @@ bool ScViewFunctionSet::SetCursorAtCell( SCCOL nPosX, 
SCROW nPosY, bool bScroll
 
         pView->UpdateRef( nPosX, nPosY, nTab );
     }
+    else if (m_pViewData->IsDBExpandMode())
+    {
+        SCCOL nFillColStart;
+        SCROW nFillRowStart;
+        SCCOL nFillColEnd;
+        SCROW nFillRowEnd;
+        m_pViewData->GetFillData(nFillColStart, nFillRowStart, nFillColEnd, 
nFillRowEnd);
+
+        bool bNegX = ( nPosX < nFillColStart );
+        bool bNegY = ( nPosY < nFillRowStart );
+
+        if ( bNegX )
+        {
+            //  in SetCursorAtPoint hidden columns are skipped.
+            //  They must be skipped here too, or the result will always be 
the first hidden column.
+            while ( nPosX<nFillColStart && rDoc.ColHidden(nPosX, nTab) ) 
++nPosX;
+        }
+
+        if ( bNegY )
+        {
+            //  in SetCursorAtPoint hidden rows are skipped.
+            //  They must be skipped here too, or the result will always be 
the first hidden row.
+            if (nPosY < nFillRowStart)
+            {
+                nPosY = rDoc.FirstVisibleRow(nPosY, nFillRowStart-1, nTab);
+                if (!rDoc.ValidRow(nPosY))
+                    nPosY = nFillRowStart;
+            }
+        }
+
+        if ( nFillColStart != m_pViewData->GetRefStartX() || nFillRowStart != 
m_pViewData->GetRefStartY() )
+        {
+            m_pViewData->GetView()->DoneRefMode();
+            m_pViewData->GetView()->InitRefMode( nFillColStart, nFillRowStart, 
nTab, SC_REFTYPE_FILL );
+        }
+
+        pView->UpdateRef( nPosX, nPosY, nTab );
+    }
     else if (m_pViewData->IsAnyFillMode())
     {
         ScFillMode nMode = m_pViewData->GetFillMode();
diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx
index 84d91fd11807..d3a46ec9b0bd 100644
--- a/sc/source/ui/view/tabvwsh4.cxx
+++ b/sc/source/ui/view/tabvwsh4.cxx
@@ -1760,20 +1760,23 @@ void SAL_CALL 
ScViewOptiChangesListener::changesOccurred(const util::ChangesEven
 {
     for (const auto& change : rEvent.Changes)
     {
-        if (OUString sChangedEntry;
-            (change.Accessor >>= sChangedEntry) && sChangedEntry == 
"ColumnRowHighlighting")
+        OUString sChangedEntry;
+        if (change.Accessor >>= sChangedEntry)
         {
-            mrViewShell.HighlightOverlay();
-            break;
-        }
-
-        if (OUString sChangedEntry; (change.Accessor >>= sChangedEntry) && 
sChangedEntry ==
-            
"ColorSchemes/org.openoffice.Office.UI:ColorScheme['COLOR_SCHEME_LIBREOFFICE_AUTOMATIC']/CalcCellFocus/Color")
-        {
-            mrViewShell.GetActiveWin()->UpdateCursorOverlay();
-            mrViewShell.GetActiveWin()->UpdateAutoFillOverlay();
-            mrViewShell.GetActiveWin()->UpdateHighlightOverlay();
-            break;
+            if (sChangedEntry == "ColumnRowHighlighting")
+            {
+                mrViewShell.HighlightOverlay();
+            }
+            else if (sChangedEntry == 
"ColorSchemes/org.openoffice.Office.UI:ColorScheme['COLOR_SCHEME_LIBREOFFICE_AUTOMATIC']/CalcCellFocus/Color")
+            {
+                mrViewShell.GetActiveWin()->UpdateCursorOverlay();
+                mrViewShell.GetActiveWin()->UpdateAutoFillOverlay();
+                mrViewShell.GetActiveWin()->UpdateHighlightOverlay();
+            }
+            else if (sChangedEntry == 
"ColorSchemes/org.openoffice.Office.UI:ColorScheme['COLOR_SCHEME_LIBREOFFICE_AUTOMATIC']/CalcDBFocus/Color")
+            {
+                mrViewShell.GetActiveWin()->UpdateDatabaseOverlay();
+            }
         }
     }
 }
diff --git a/svtools/source/config/colorcfg.cxx 
b/svtools/source/config/colorcfg.cxx
index 4934200d97ee..c3cd4a936983 100644
--- a/svtools/source/config/colorcfg.cxx
+++ b/svtools/source/config/colorcfg.cxx
@@ -37,6 +37,7 @@
 #include <vcl/window.hxx>
 
 #include "itemholder2.hxx"
+#include <tools/color.hxx>
 
 #include <vcl/svapp.hxx>
 #include <vcl/event.hxx>
@@ -626,6 +627,7 @@ Color ColorConfig::GetDefaultColor(ColorConfigEntry eEntry, 
int nMod)
         { COL_GRAY,         COL_GRAY        }, // HTMLUNKNOWN
         { COL_GRAY3,        COL_GRAY7       }, // CALCGRID
         { COL_LIGHTBLUE,    COL_LIGHTBLUE   }, // CALCCELLFOCUS
+        { COL_LIGHTGRAYBLUE, COL_LIGHTGRAYBLUE }, // CALCDBFOCUS
         { COL_BLUE,         COL_BLUE        }, // CALCPAGEBREAK
         { Color(0x2300dc),  Color(0x2300DC) }, // CALCPAGEBREAKMANUAL
         { COL_GRAY7,        COL_GRAY7       }, // CALCPAGEBREAKAUTOMATIC
@@ -685,6 +687,10 @@ Color ColorConfig::GetDefaultColor(ColorConfigEntry 
eEntry, int nMod)
             aRet = 
Application::GetSettings().GetStyleSettings().GetAccentColor();
             break;
 
+        case CALCDBFOCUS:
+            aRet = 
Application::GetSettings().GetStyleSettings().GetAccentColor();
+            break;
+
         default:
             int nAppMod;
 

Reply via email to