sc/source/ui/view/gridwin4.cxx | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-)
New commits: commit c54e1c22f30c23d00e2fe7521217569fcec59cc4 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Thu Nov 12 14:16:38 2020 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Fri Nov 13 13:39:11 2020 +0100 tdf#138157 turn off cursor earlier Before the first time SetMapMode is changed, because that triggers a redraw of the cursor using the new mapmode and so it appears in the wrong place. We are going to turn off the cursor anyway, so do that earlier. Change-Id: Ib28a2af446436c6ebe450f0b5d1b3820ec7f479e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105757 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx index cc3fa9c7ff0b..c5230e949fea 100644 --- a/sc/source/ui/view/gridwin4.cxx +++ b/sc/source/ui/view/gridwin4.cxx @@ -709,6 +709,20 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableI aDrawingRectLogic = PixelToLogic(aDrawingRectPixel, aDrawMode); } + bool bInPlaceEditing = bEditMode && (mrViewData.GetRefTabNo() == mrViewData.GetTabNo()); + vcl::Cursor* pInPlaceCrsr = nullptr; + bool bInPlaceVisCursor = false; + if (bInPlaceEditing) + { + // toggle the cursor off if its on to ensure the cursor invert + // background logic remains valid after the background is cleared on + // the next cursor flash + pInPlaceCrsr = pEditView->GetCursor(); + bInPlaceVisCursor = pInPlaceCrsr && pInPlaceCrsr->IsVisible(); + if (bInPlaceVisCursor) + pInPlaceCrsr->Hide(); + } + OutputDevice* pContentDev = &rDevice; // device for document content, used by overlay manager SdrPaintWindow* pTargetPaintWindow = nullptr; // #i74769# work with SdrPaintWindow directly @@ -1074,7 +1088,7 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableI // using the editeng. // It's being done after EndDrawLayers() to get it outside the overlay // buffer and on top of everything. - if ( bEditMode && (mrViewData.GetRefTabNo() == mrViewData.GetTabNo()) ) + if (bInPlaceEditing) { // get the coordinates of the area we need to clear (overpaint by // the background) @@ -1092,14 +1106,6 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableI aEnd.AdjustX( -(2 * nLayoutSign) ); aEnd.AdjustY( -2 ); - // toggle the cursor off if its on to ensure the cursor invert - // background logic remains valid after the background is cleared on - // the next cursor flash - vcl::Cursor* pCrsr = pEditView->GetCursor(); - const bool bVisCursor = pCrsr && pCrsr->IsVisible(); - if (bVisCursor) - pCrsr->Hide(); - // set the correct mapmode tools::Rectangle aBackground(aStart, aEnd); tools::Rectangle aBGAbs(aStart, aEnd); @@ -1199,8 +1205,8 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableI rDevice.SetMapMode(MapMode(MapUnit::MapPixel)); // restore the cursor it was originally visible - if (bVisCursor) - pCrsr->Show(); + if (bInPlaceVisCursor) + pInPlaceCrsr->Show(); } if (mrViewData.HasEditView(eWhich)) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits