summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--editeng/source/editeng/editview.cxx10
-rw-r--r--editeng/source/editeng/impedit.cxx3
-rw-r--r--editeng/source/editeng/impedit.hxx6
-rw-r--r--include/editeng/editview.hxx3
-rw-r--r--sc/source/ui/view/gridwin4.cxx37
5 files changed, 57 insertions, 2 deletions
diff --git a/editeng/source/editeng/editview.cxx b/editeng/source/editeng/editview.cxx
index f96a9f6f5519..23cd5010c1ab 100644
--- a/editeng/source/editeng/editview.cxx
+++ b/editeng/source/editeng/editview.cxx
@@ -1606,4 +1606,14 @@ bool EditView::HasLOKSpecialPositioning() const
return pImpEditView->HasLOKSpecialPositioning();
}
+void EditView::SupressLOKMessages(bool bSet)
+{
+ pImpEditView->SupressLOKMessages(bSet);
+}
+
+bool EditView::IsSupressLOKMessages() const
+{
+ return pImpEditView->IsSupressLOKMessages();
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx
index 27036c689721..ed2c8d43bf9c 100644
--- a/editeng/source/editeng/impedit.cxx
+++ b/editeng/source/editeng/impedit.cxx
@@ -191,6 +191,7 @@ ImpEditView::ImpEditView( EditView* pView, EditEngine* pEng, vcl::Window* pWindo
eAnchorMode = EEAnchorMode::TopLeft;
mpEditViewCallbacks = nullptr;
mbBroadcastLOKViewCursor = comphelper::LibreOfficeKit::isActive();
+ mbSupressLOKMessages = false;
nInvMore = 1;
nTravelXPos = TRAVEL_X_DONTKNOW;
nControl = EVControlBits::AUTOSCROLL | EVControlBits::ENABLEPASTE;
@@ -1263,7 +1264,7 @@ void ImpEditView::ShowCursor( bool bGotoCursor, bool bForceVisCursor )
GetCursor()->SetSize( aCursorSz );
- if (comphelper::LibreOfficeKit::isActive() && mpViewShell)
+ if (comphelper::LibreOfficeKit::isActive() && mpViewShell && !mbSupressLOKMessages)
{
Point aPos = GetCursor()->GetPos();
boost::property_tree::ptree aMessageParams;
diff --git a/editeng/source/editeng/impedit.hxx b/editeng/source/editeng/impedit.hxx
index 5568beecd3f5..3e76d820db60 100644
--- a/editeng/source/editeng/impedit.hxx
+++ b/editeng/source/editeng/impedit.hxx
@@ -309,7 +309,8 @@ private:
// repaints of the EditView(s)
const EditViewCallbacks* mpEditViewCallbacks;
std::unique_ptr<LOKSpecialPositioning> mpLOKSpecialPositioning;
- bool mbBroadcastLOKViewCursor;
+ bool mbBroadcastLOKViewCursor:1;
+ bool mbSupressLOKMessages:1;
const EditViewCallbacks* getEditViewCallbacks() const
{
@@ -469,6 +470,9 @@ public:
void SetLOKSpecialVisArea(const tools::Rectangle& rVisArea);
tools::Rectangle GetLOKSpecialVisArea() const;
bool HasLOKSpecialPositioning() const;
+
+ void SupressLOKMessages(bool bSet) { mbSupressLOKMessages = bSet; }
+ bool IsSupressLOKMessages() const { return mbSupressLOKMessages; }
};
diff --git a/include/editeng/editview.hxx b/include/editeng/editview.hxx
index c8a2e3149a10..a7f3180711f5 100644
--- a/include/editeng/editview.hxx
+++ b/include/editeng/editview.hxx
@@ -334,6 +334,9 @@ public:
void SetLOKSpecialVisArea(const tools::Rectangle& rVisArea);
tools::Rectangle GetLOKSpecialVisArea() const;
bool HasLOKSpecialPositioning() const;
+
+ void SupressLOKMessages(bool bSet);
+ bool IsSupressLOKMessages() const;
};
#endif // INCLUDED_EDITENG_EDITVIEW_HXX
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index 4d122af6d269..2a1ac2439b65 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -571,6 +571,32 @@ void ScGridWindow::Draw( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, ScUpdateMod
rDoc.PrepareFormulaCalc();
}
+namespace {
+
+class SupressEditViewMessagesGuard
+{
+public:
+ SupressEditViewMessagesGuard(EditView& rEditView) :
+ mrEditView(rEditView),
+ mbOrigSupressFlag(rEditView.IsSupressLOKMessages())
+ {
+ if (!mbOrigSupressFlag)
+ mrEditView.SupressLOKMessages(true);
+ }
+
+ ~SupressEditViewMessagesGuard()
+ {
+ if (mrEditView.IsSupressLOKMessages() != mbOrigSupressFlag)
+ mrEditView.SupressLOKMessages(mbOrigSupressFlag);
+ }
+
+private:
+ EditView& mrEditView;
+ const bool mbOrigSupressFlag;
+};
+
+}
+
void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableInfo, ScOutputData& aOutputData,
bool bLogicText)
{
@@ -1019,6 +1045,11 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableI
const tools::Rectangle aOrigOutputArea(pOtherEditView->GetOutputArea()); // Not in pixels.
const MapMode aOrigMapMode = pOtherWin->GetMapMode();
pOtherWin->SetMapMode(rDevice.GetMapMode());
+
+ // Avoid sending wrong cursor/selection messages by the 'other' view, as the output-area is going
+ // to be tweaked temporarily to match the current view's zoom.
+ SupressEditViewMessagesGuard aGuard(*pOtherEditView);
+
pOtherEditView->SetOutputArea(rDevice.PixelToLogic(aEditRect));
pOtherEditView->Paint(rDevice.PixelToLogic(aEditRect), &rDevice);
@@ -1117,6 +1148,12 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableI
const tools::Rectangle aOrigOutputArea(pEditView->GetOutputArea()); // Not in pixels.
const MapMode aOrigMapMode = GetMapMode();
SetMapMode(rDevice.GetMapMode());
+
+ // Avoid sending wrong cursor/selection messages by the current view, as the output-area is going
+ // to be tweaked temporarily to match other view's zoom. (This does not affect the manual
+ // cursor-messaging done in the non print-twips mode)
+ SupressEditViewMessagesGuard aGuard(*pEditView);
+
pEditView->SetOutputArea(rDevice.PixelToLogic(aEditRect));
pEditView->Paint(rDevice.PixelToLogic(aEditRect), &rDevice);