diff options
-rw-r--r-- | basctl/source/basicide/baside2.hxx | 3 | ||||
-rw-r--r-- | basctl/source/basicide/baside2b.cxx | 19 |
2 files changed, 21 insertions, 1 deletions
diff --git a/basctl/source/basicide/baside2.hxx b/basctl/source/basicide/baside2.hxx index 81401763c9ae..ba9f5b43f0fb 100644 --- a/basctl/source/basicide/baside2.hxx +++ b/basctl/source/basicide/baside2.hxx @@ -85,10 +85,13 @@ private: long nCurTextWidth; + ImplSVEvent* m_nSetSourceInBasicId; + SyntaxHighlighter aHighlighter; Idle aSyntaxIdle; std::set<sal_uInt16> aSyntaxLineTable; DECL_LINK(SyntaxTimerHdl, Timer *, void); + DECL_LINK(SetSourceInBasicHdl, void*, void); // progress bar class ProgressInfo; diff --git a/basctl/source/basicide/baside2b.cxx b/basctl/source/basicide/baside2b.cxx index 6bf425a65c8b..d07222a44d27 100644 --- a/basctl/source/basicide/baside2b.cxx +++ b/basctl/source/basicide/baside2b.cxx @@ -229,6 +229,7 @@ EditorWindow::EditorWindow (vcl::Window* pParent, ModulWindow* pModulWindow) : Window(pParent, WB_BORDER), rModulWindow(*pModulWindow), nCurTextWidth(0), + m_nSetSourceInBasicId(nullptr), aHighlighter(HighlighterLanguage::Basic), bHighlighting(false), bDoSyntaxHighlight(true), @@ -259,6 +260,12 @@ EditorWindow::~EditorWindow() void EditorWindow::dispose() { + if (m_nSetSourceInBasicId) + { + Application::RemoveUserEvent(m_nSetSourceInBasicId); + m_nSetSourceInBasicId = nullptr; + } + Reference< beans::XMultiPropertySet > n; { osl::MutexGuard g(mutex_); @@ -926,10 +933,20 @@ void EditorWindow::Paint(vcl::RenderContext& rRenderContext, const tools::Rectan void EditorWindow::LoseFocus() { - SetSourceInBasic(); + // tdf#114258 wait until the next event loop cycle to do this so it doesn't + // happen during a mouse down/up selection in the treeview whose contents + // this may update + if (!m_nSetSourceInBasicId) + m_nSetSourceInBasicId = Application::PostUserEvent(LINK(this, EditorWindow, SetSourceInBasicHdl)); Window::LoseFocus(); } +IMPL_LINK_NOARG(EditorWindow, SetSourceInBasicHdl, void*, void) +{ + m_nSetSourceInBasicId = nullptr; + SetSourceInBasic(); +} + void EditorWindow::SetSourceInBasic() { if ( pEditEngine && pEditEngine->IsModified() |