summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2021-09-09 10:15:01 +0100
committerMike Kaganski <mike.kaganski@collabora.com>2021-09-09 13:29:27 +0200
commit76bb5cb8578bdfe50ce6bef307e628037d938a94 (patch)
treedf7854fed5f8e8ace15a36b9e59c7ab8f47cc2e1
parenttdf#142458 Set correct ScrolledWindow BorderWidth in the ctor (diff)
downloadcore-76bb5cb8578bdfe50ce6bef307e628037d938a94.tar.gz
core-76bb5cb8578bdfe50ce6bef307e628037d938a94.zip
Resolves: tdf#144376 focus into protected ScTextWnd shouldn't be possible
the expectations are that this isn't possible and if it happens then under windows there is a QueryCharPosition which will trigger the deletion of the ScTextWnd EditView due to that expectation before it is then unconditionally dereferenced Change-Id: Ied5d8031ae7d74669a2958dbcdec87843a26d384 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121769 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
-rw-r--r--include/svx/weldeditview.hxx1
-rw-r--r--sc/source/ui/app/inputwin.cxx7
-rw-r--r--sc/source/ui/inc/inputwin.hxx1
-rw-r--r--svx/source/dialog/weldeditview.cxx4
4 files changed, 11 insertions, 2 deletions
diff --git a/include/svx/weldeditview.hxx b/include/svx/weldeditview.hxx
index 4593d0ecf26a..004be7b609fb 100644
--- a/include/svx/weldeditview.hxx
+++ b/include/svx/weldeditview.hxx
@@ -68,6 +68,7 @@ public:
virtual bool MouseButtonUp(const MouseEvent& rMEvt) override;
virtual bool KeyInput(const KeyEvent& rKEvt) override;
virtual bool Command(const CommandEvent& rCEvt) override;
+ virtual bool CanFocus() const;
virtual void GetFocus() override;
virtual void LoseFocus() override;
virtual void Resize() override;
diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx
index 52de56543a80..862d729edffd 100644
--- a/sc/source/ui/app/inputwin.cxx
+++ b/sc/source/ui/app/inputwin.cxx
@@ -1596,12 +1596,17 @@ bool ScTextWnd::MouseMove( const MouseEvent& rMEvt )
return m_xEditView && m_xEditView->MouseMove(rMEvt);
}
+bool ScTextWnd::CanFocus() const
+{
+ return SC_MOD()->IsEditMode();
+}
+
bool ScTextWnd::MouseButtonDown( const MouseEvent& rMEvt )
{
if (!HasFocus())
{
StartEditEngine();
- if ( SC_MOD()->IsEditMode() )
+ if (CanFocus())
TextGrabFocus();
}
diff --git a/sc/source/ui/inc/inputwin.hxx b/sc/source/ui/inc/inputwin.hxx
index 20991ac85908..86cc6594910c 100644
--- a/sc/source/ui/inc/inputwin.hxx
+++ b/sc/source/ui/inc/inputwin.hxx
@@ -120,6 +120,7 @@ protected:
virtual bool MouseButtonUp( const MouseEvent& rMEvt ) override;
virtual bool Command( const CommandEvent& rCEvt ) override;
virtual bool KeyInput(const KeyEvent& rKEvt) override;
+ virtual bool CanFocus() const override;
virtual void GetFocus() override;
virtual bool StartDrag() override;
diff --git a/svx/source/dialog/weldeditview.cxx b/svx/source/dialog/weldeditview.cxx
index 7dd58d31275f..2f24c0cc8dfa 100644
--- a/svx/source/dialog/weldeditview.cxx
+++ b/svx/source/dialog/weldeditview.cxx
@@ -260,7 +260,7 @@ bool WeldEditView::MouseButtonDown(const MouseEvent& rMEvt)
if (!IsMouseCaptured())
CaptureMouse();
- if (!HasFocus())
+ if (!HasFocus() && CanFocus())
{
GrabFocus();
GetFocus();
@@ -1630,6 +1630,8 @@ void WeldEditView::LoseFocus()
}
}
+bool WeldEditView::CanFocus() const { return true; }
+
css::uno::Reference<css::datatransfer::dnd::XDropTarget> WeldEditView::GetDropTarget()
{
if (!m_xDropTarget)