summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/qa/unit/tiledrendering/tiledrendering.cxx46
-rw-r--r--sc/source/ui/app/inputhdl.cxx10
2 files changed, 48 insertions, 8 deletions
diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx b/sc/qa/unit/tiledrendering/tiledrendering.cxx
index c9a005fd5136..d6eab7cafea2 100644
--- a/sc/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx
@@ -3562,18 +3562,50 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testInputHandlerSyncedZoom)
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::F2);
Scheduler::ProcessEventsToIdle();
- const ScViewData* pViewData = ScDocShell::GetViewData();
- CPPUNIT_ASSERT(pViewData);
+ const ScViewData* pViewData1 = ScDocShell::GetViewData();
+ CPPUNIT_ASSERT(pViewData1);
// Get that active EditView
- EditView* pEditView = pViewData->GetEditView(SC_SPLIT_BOTTOMLEFT);
- CPPUNIT_ASSERT(pEditView);
- EditEngine& rEditEngine = pEditView->getEditEngine();
+ EditView* pEditView1 = pViewData1->GetEditView(SC_SPLIT_BOTTOMLEFT);
+ CPPUNIT_ASSERT(pEditView1);
+ EditEngine& rEditEngine1 = pEditView1->getEditEngine();
// These must match, if they don't then text will have a different width in edit and view modes
CPPUNIT_ASSERT_EQUAL_MESSAGE("EditEngine Ref Dev Zoom and ViewData Zoom should match",
- pViewData->GetZoomX(), rEditEngine.GetRefMapMode().GetScaleX());
+ pViewData1->GetZoomX(), rEditEngine1.GetRefMapMode().GetScaleX());
CPPUNIT_ASSERT_EQUAL_MESSAGE("EditEngine Ref Dev Zoom and ViewData Zoom should match",
- pViewData->GetZoomY(), rEditEngine.GetRefMapMode().GetScaleY());
+ pViewData1->GetZoomY(), rEditEngine1.GetRefMapMode().GetScaleY());
+
+ // Create a View #2
+ SfxLokHelper::createView();
+ pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>());
+
+ // Set View #2 to the same zoom as View #1
+ pModelObj->setClientVisibleArea(tools::Rectangle(0, 0, 17933, 4853));
+ pModelObj->setClientZoom(256, 256, 1333, 1333);
+
+ ScTabViewShell* pView2 = dynamic_cast<ScTabViewShell*>(SfxViewShell::Current());
+ CPPUNIT_ASSERT(pView2);
+ pView2->SetCursor(0, 5); // A6
+
+ Scheduler::ProcessEventsToIdle();
+
+ // Activate edit mode in that A6 cell
+ pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::F2);
+ pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::F2);
+ Scheduler::ProcessEventsToIdle();
+
+ const ScViewData* pViewData2 = ScDocShell::GetViewData();
+ CPPUNIT_ASSERT(pViewData2);
+
+ // Get the View #2 EditView
+ EditView* pEditView2 = pViewData2->GetEditView(SC_SPLIT_BOTTOMLEFT);
+ CPPUNIT_ASSERT(pEditView2);
+ EditEngine& rEditEngine2 = pEditView2->getEditEngine();
+ CPPUNIT_ASSERT(&rEditEngine1 != &rEditEngine2);
+ // Before the fix, these had different settings, resulting in the text
+ // dancing for the second user as they toggle in and out of edit mode, but
+ // each user should have the same settings.
+ CPPUNIT_ASSERT_EQUAL(rEditEngine1.GetControlWord(), rEditEngine2.GetControlWord());
}
CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testStatusBarLocale)
diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index 8ea3f33157a9..1b261ac46d77 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -908,7 +908,15 @@ void ScInputHandler::UpdateRefDevice()
bool bTextWysiwyg = SC_MOD()->GetInputOptions().GetTextWysiwyg();
bool bInPlace = pActiveViewSh && pActiveViewSh->GetViewFrame().GetFrame().IsInPlace();
EEControlBits nCtrl = mpEditEngine->GetControlWord();
- if ( bTextWysiwyg || bInPlace )
+ bool bFormat100Percent = bTextWysiwyg || bInPlace;
+ // FORMAT100 is an odd thing only used by calc since #i51508# and possibly
+ // redundant at this stage by resolution independent text layout and
+ // rendering, at least for the kit case we want the text layout to be done
+ // accurately at the provided scaling of the reference device
+ if (comphelper::LibreOfficeKit::isActive())
+ bFormat100Percent = false;
+
+ if (bFormat100Percent)
nCtrl |= EEControlBits::FORMAT100; // EditEngine default: always format for 100%
else
nCtrl &= ~EEControlBits::FORMAT100; // when formatting for screen, use the actual MapMode