diff options
author | Caolán McNamara <caolanm@redhat.com> | 2021-09-09 10:15:01 +0100 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2021-09-09 13:29:27 +0200 |
commit | 76bb5cb8578bdfe50ce6bef307e628037d938a94 (patch) | |
tree | df7854fed5f8e8ace15a36b9e59c7ab8f47cc2e1 | |
parent | tdf#142458 Set correct ScrolledWindow BorderWidth in the ctor (diff) | |
download | core-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.hxx | 1 | ||||
-rw-r--r-- | sc/source/ui/app/inputwin.cxx | 7 | ||||
-rw-r--r-- | sc/source/ui/inc/inputwin.hxx | 1 | ||||
-rw-r--r-- | svx/source/dialog/weldeditview.cxx | 4 |
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) |