summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Francis <dennis.francis@collabora.com>2020-06-03 17:27:28 +0530
committerDennis Francis <dennis.francis@collabora.com>2020-07-09 11:26:42 +0200
commitd45b6561ef5a229669b50c65f15c42d47e034434 (patch)
tree8098736ffbbf460d2618aaed954be789144b97df
parentcb21c44b01a640fc121c034346d70a02ef67cdb2 (diff)
lokit: Avoid sending wrong edit-cursor/selection messages when...
the EditView's output-area needs to be tweaked temporarily to render it to a tile which is meant for another view. Change-Id: I2b8fc1986c247ce65c18ea64e3b43d25625c7e9c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98129 Tested-by: Jenkins Reviewed-by: Dennis Francis <dennis.francis@collabora.com>
-rw-r--r--editeng/source/editeng/editview.cxx10
-rw-r--r--editeng/source/editeng/impedit.cxx5
-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, 58 insertions, 3 deletions
diff --git a/editeng/source/editeng/editview.cxx b/editeng/source/editeng/editview.cxx
index 4a8b6873946d..9da4d6cbf8d5 100644
--- a/editeng/source/editeng/editview.cxx
+++ b/editeng/source/editeng/editview.cxx
@@ -1602,4 +1602,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 efc1dee49b63..43165fefc1a0 100644
--- a/editeng/source/editeng/impedit.cxx
+++ b/editeng/source/editeng/impedit.cxx
@@ -190,7 +190,8 @@ ImpEditView::ImpEditView( EditView* pView, EditEngine* pEng, vcl::Window* pWindo
eSelectionMode(EESelectionMode::Std),
eAnchorMode(EEAnchorMode::TopLeft),
mpEditViewCallbacks(nullptr),
- mbBroadcastLOKViewCursor(comphelper::LibreOfficeKit::isActive())
+ mbBroadcastLOKViewCursor(comphelper::LibreOfficeKit::isActive()),
+ mbSupressLOKMessages(false)
{
aEditSelection.Min() = pEng->GetEditDoc().GetStartPaM();
aEditSelection.Max() = pEng->GetEditDoc().GetEndPaM();
@@ -1259,7 +1260,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 0e2b6df1d790..18e1ea9f9308 100644
--- a/editeng/source/editeng/impedit.hxx
+++ b/editeng/source/editeng/impedit.hxx
@@ -302,7 +302,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
{
@@ -462,6 +463,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 ccecb8c9da73..5b7f08228cff 100644
--- a/include/editeng/editview.hxx
+++ b/include/editeng/editview.hxx
@@ -335,6 +335,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 17f9b16a8ec9..eb76b69dd590 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);