sc/source/ui/view/gridwin.cxx |   51 ++++++++++++++++++++++++------------------
 1 file changed, 30 insertions(+), 21 deletions(-)

New commits:
commit bdc5f71c94d44834aa8ad863d9c19325d59ce36a
Author:     Caolán McNamara <[email protected]>
AuthorDate: Fri Jan 19 11:48:01 2024 +0000
Commit:     Caolán McNamara <[email protected]>
CommitDate: Tue Jan 23 11:28:37 2024 +0100

    use a ScopeGuard to restore the original map mode
    
    in these cases the original map mode was *not* always restored,
    but the intent seems to be like the others that the mapmode should
    be the same on exit as on enter.
    
    Change-Id: Id7b668a9977c4c84df5234288baca8bd6f4232e5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162276
    Reviewed-by: Michael Stahl <[email protected]>
    Tested-by: Jenkins

diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 187f760b50d8..ddbc8e250709 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -6169,10 +6169,16 @@ void ScGridWindow::DeleteCopySourceOverlay()
 
 void ScGridWindow::UpdateCopySourceOverlay()
 {
-    MapMode aDrawMode = GetDrawMapMode();
-    MapMode aOldMode = GetMapMode();
-    if ( aOldMode != aDrawMode )
-        SetMapMode( aDrawMode );
+    const MapMode aDrawMode = GetDrawMapMode();
+    const MapMode aOldMode = GetMapMode();
+    comphelper::ScopeGuard aMapModeGuard(
+        [&aOldMode, &aDrawMode, this] {
+            if (aOldMode != aDrawMode)
+                SetMapMode(aOldMode);
+        }
+    );
+    if (aOldMode != aDrawMode)
+        SetMapMode(aDrawMode);
 
     DeleteCopySourceOverlay();
 
@@ -6223,9 +6229,6 @@ void ScGridWindow::UpdateCopySourceOverlay()
         xOverlayManager->add(*pDashedBorder);
         mpOOSelectionBorder->append(std::move(pDashedBorder));
     }
-
-    if ( aOldMode != aDrawMode )
-        SetMapMode( aOldMode );
 }
 
 static std::vector<tools::Rectangle> convertPixelToLogical(
@@ -6416,10 +6419,16 @@ void ScGridWindow::UpdateCursorOverlay()
 {
     ScDocument& rDoc = mrViewData.GetDocument();
 
-    MapMode aDrawMode = GetDrawMapMode();
-    MapMode aOldMode = GetMapMode();
-    if ( aOldMode != aDrawMode )
-        SetMapMode( aDrawMode );
+    const MapMode aDrawMode = GetDrawMapMode();
+    const MapMode aOldMode = GetMapMode();
+    comphelper::ScopeGuard aMapModeGuard(
+        [&aOldMode, &aDrawMode, this] {
+            if (aOldMode != aDrawMode)
+                SetMapMode(aOldMode);
+        }
+    );
+    if (aOldMode != aDrawMode)
+        SetMapMode(aDrawMode);
 
     // Existing OverlayObjects may be transformed in later versions.
     // For now, just re-create them.
@@ -6578,9 +6587,6 @@ void ScGridWindow::UpdateCursorOverlay()
             }
         }
     }
-
-    if ( aOldMode != aDrawMode )
-        SetMapMode( aOldMode );
 }
 
 void ScGridWindow::GetCellSelection(std::vector<tools::Rectangle>& rLogicRects)
@@ -6748,10 +6754,16 @@ void ScGridWindow::DeleteAutoFillOverlay()
 
 void ScGridWindow::UpdateAutoFillOverlay()
 {
-    MapMode aDrawMode = GetDrawMapMode();
-    MapMode aOldMode = GetMapMode();
-    if ( aOldMode != aDrawMode )
-        SetMapMode( aDrawMode );
+    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();
 
@@ -6830,9 +6842,6 @@ void ScGridWindow::UpdateAutoFillOverlay()
         mpOOAutoFill.reset(new sdr::overlay::OverlayObjectList);
         mpOOAutoFill->append(std::move(pOverlay));
     }
-
-    if ( aOldMode != aDrawMode )
-        SetMapMode( aOldMode );
 }
 
 void ScGridWindow::DeleteDragRectOverlay()

Reply via email to