sc/source/ui/dbgui/sfiltdlg.cxx | 31 +++++++++++++------------------ sc/source/ui/inc/filtdlg.hxx | 7 ++----- 2 files changed, 15 insertions(+), 23 deletions(-)
New commits: commit 329baa7a796d9d7c16af8b10fc168820f10459ad Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Wed Apr 17 18:22:46 2019 +0200 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Mon Sep 16 16:16:21 2019 +0200 sc: Get rid of the Idle hack in the Special Filter Dialog. The problem is that with LOK, the creation of Idle here causes a deadlock when the dialog is being opened and its first paint is requested. No real idea what change now causes the problem (this used to work), but given that the use of the Idle is a hack in the first place, let's use the GetFocus/LoseFocus handlers instead, and act accordingly only when the focus of the interesting controls changes. Reviewed-on: https://gerrit.libreoffice.org/70917 Reviewed-by: Aron Budea <aron.bu...@collabora.com> Tested-by: Aron Budea <aron.bu...@collabora.com> (cherry picked from commit 9bb32c6629b068c18d1f7df63a86d1cab66856eb) Change-Id: Ib6c0267a064cb31438544e47fe3e0869b575ef7c Reviewed-on: https://gerrit.libreoffice.org/78785 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Andras Timar <andras.ti...@collabora.com> diff --git a/sc/source/ui/dbgui/sfiltdlg.cxx b/sc/source/ui/dbgui/sfiltdlg.cxx index 33010a009833..fa5266b8b89e 100644 --- a/sc/source/ui/dbgui/sfiltdlg.cxx +++ b/sc/source/ui/dbgui/sfiltdlg.cxx @@ -18,7 +18,6 @@ */ #include <sfx2/dispatch.hxx> -#include <vcl/idle.hxx> #include <uiitems.hxx> #include <rangenam.hxx> @@ -89,14 +88,18 @@ ScSpecialFilterDlg::ScSpecialFilterDlg( SfxBindings* pB, SfxChildWindow* pCW, vc get(pExpander,"more"); Init( rArgSet ); - pEdFilterArea->GrabFocus(); - // hack: control of RefInput - pIdle.reset( new Idle("Special Filter Dialog") ); - // FIXME: this is an abomination - pIdle->SetPriority( TaskPriority::LOWEST ); - pIdle->SetInvokeHandler( LINK( this, ScSpecialFilterDlg, TimeOutHdl ) ); - pIdle->Start(); + Link<Control&, void> aLink = LINK(this, ScSpecialFilterDlg, RefInputControlHdl); + pEdCopyArea->SetGetFocusHdl(aLink); + pRbCopyArea->SetGetFocusHdl(aLink); + pEdFilterArea->SetGetFocusHdl(aLink); + pRbFilterArea->SetGetFocusHdl(aLink); + pEdCopyArea->SetLoseFocusHdl(aLink); + pRbCopyArea->SetLoseFocusHdl(aLink); + pEdFilterArea->SetLoseFocusHdl(aLink); + pRbFilterArea->SetLoseFocusHdl(aLink); + + pEdFilterArea->GrabFocus(); } ScSpecialFilterDlg::~ScSpecialFilterDlg() @@ -115,10 +118,6 @@ void ScSpecialFilterDlg::dispose() pOutItem.reset(); - // hack: control of RefInput - pIdle->Stop(); - pIdle.reset(); - pLbFilterArea.clear(); pEdFilterArea.clear(); pRbFilterArea.clear(); @@ -393,11 +392,9 @@ IMPL_LINK( ScSpecialFilterDlg, EndDlgHdl, Button*, pBtn, void ) } } -IMPL_LINK( ScSpecialFilterDlg, TimeOutHdl, Timer*, _pIdle, void ) +IMPL_LINK_NOARG(ScSpecialFilterDlg, RefInputControlHdl, Control&, void) { - // every 50ms check whether RefInputMode is still true - - if( (_pIdle == pIdle.get()) && IsActive() ) + if (IsActive()) { if( pEdCopyArea->HasFocus() || pRbCopyArea->HasFocus() ) { @@ -415,8 +412,6 @@ IMPL_LINK( ScSpecialFilterDlg, TimeOutHdl, Timer*, _pIdle, void ) bRefInputMode = false; } } - - pIdle->Start(); } IMPL_LINK( ScSpecialFilterDlg, FilterAreaSelHdl, ListBox&, rLb, void ) diff --git a/sc/source/ui/inc/filtdlg.hxx b/sc/source/ui/inc/filtdlg.hxx index 5a2ab1542c34..c82dcfa3fba1 100644 --- a/sc/source/ui/inc/filtdlg.hxx +++ b/sc/source/ui/inc/filtdlg.hxx @@ -204,9 +204,6 @@ private: VclPtr<formula::RefEdit> pRefInputEdit; bool bRefInputMode; - // Hack: RefInput control - std::unique_ptr<Idle> pIdle; - private: void Init( const SfxItemSet& rArgSet ); ScQueryItem* GetOutputItem( const ScQueryParam& rParam, @@ -217,8 +214,8 @@ private: DECL_LINK( FilterAreaModHdl, Edit&, void ); DECL_LINK( EndDlgHdl, Button*, void ); - // Hack: RefInput control - DECL_LINK( TimeOutHdl, Timer*, void ); + // RefInput control + DECL_LINK( RefInputControlHdl, Control&, void ); }; #endif // INCLUDED_SC_SOURCE_UI_INC_FILTDLG_HXX _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits