diff options
author | Eike Rathke <erack@redhat.com> | 2016-07-18 23:53:46 +0200 |
---|---|---|
committer | Christian Lohmaier <lohmaier+LibreOffice@googlemail.com> | 2016-07-19 18:53:04 +0000 |
commit | ebddfbaeb71383ae94ff491da0b307c86c35e447 (patch) | |
tree | dc416388ccf02dd79a696a5fbf751ab603b17812 | |
parent | fb80c308de982282803ae98b8d5523864d6bd1b3 (diff) |
This reverts commit 6610ad9aee0c8299880cd1da6cd6a756860ccad9.
It simply doesn't work, the dialog ends up being modal because
bRefInputMode is always false.
Calling SyncFocusState() in ctor doesn't help because
pEdFilterArea->HasFocus() returns false even if we just called
pEdFilterArea->GrabFocus() ... why?
Also manipulating things with
pRefInputEdit = pEdFilterArea;
bRefInputMode = true;
doesn't help. This is odd..
Conflicts:
sc/source/ui/dbgui/sfiltdlg.cxx
(cherry picked from commit 62442d9066ea553a4b68b8a93fa54748cbe96e06)
Revert "Resolves: tdf#99360 can't select filter criteria with mouse"
This reverts commit db279db13286653bff269f8ae7471b22498be319.
It does not solve the problem but prevents revert of
6610ad9aee0c8299880cd1da6cd6a756860ccad9.
(cherry picked from commit 181a1a3b2df7ca427802c1c17f3344a869c91444)
8ae22ee9af57bccb9812a7c40802cf19782bedd3
Change-Id: I90fc8cd99a2ab91dd581acfc51d7ca5eea8e1f61
Reviewed-on: https://gerrit.libreoffice.org/27309
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
Tested-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
-rw-r--r-- | sc/source/ui/dbgui/sfiltdlg.cxx | 53 | ||||
-rw-r--r-- | sc/source/ui/inc/filtdlg.hxx | 5 |
2 files changed, 37 insertions, 21 deletions
diff --git a/sc/source/ui/dbgui/sfiltdlg.cxx b/sc/source/ui/dbgui/sfiltdlg.cxx index c78040f1c7b5..6051c2abfa4b 100644 --- a/sc/source/ui/dbgui/sfiltdlg.cxx +++ b/sc/source/ui/dbgui/sfiltdlg.cxx @@ -18,6 +18,7 @@ */ #include <sfx2/dispatch.hxx> +#include <vcl/idle.hxx> #include "uiitems.hxx" #include "rangenam.hxx" @@ -56,7 +57,8 @@ ScSpecialFilterDlg::ScSpecialFilterDlg( SfxBindings* pB, SfxChildWindow* pCW, vc pViewData ( nullptr ), pDoc ( nullptr ), pRefInputEdit ( nullptr ), - bRefInputMode ( false ) + bRefInputMode ( false ), + pIdle ( nullptr ) { get(pLbFilterArea,"lbfilterarea"); get(pEdFilterArea,"edfilterarea"); @@ -83,6 +85,12 @@ ScSpecialFilterDlg::ScSpecialFilterDlg( SfxBindings* pB, SfxChildWindow* pCW, vc Init( rArgSet ); pEdFilterArea->GrabFocus(); + // Hack: RefInput-Kontrolle + pIdle = new Idle; + // FIXME: this is an abomination + pIdle->SetPriority( SchedulerPriority::LOWEST ); + pIdle->SetIdleHdl( LINK( this, ScSpecialFilterDlg, TimeOutHdl ) ); + pIdle->Start(); pLbCopyArea->SetAccessibleName(pBtnCopyResult->GetText()); pEdCopyArea->SetAccessibleName(pBtnCopyResult->GetText()); @@ -104,6 +112,10 @@ void ScSpecialFilterDlg::dispose() delete pOutItem; + // Hack: RefInput-Kontrolle + pIdle->Stop(); + delete pIdle; + pLbFilterArea.clear(); pEdFilterArea.clear(); pRbFilterArea.clear(); @@ -216,7 +228,6 @@ bool ScSpecialFilterDlg::Close() void ScSpecialFilterDlg::SetReference( const ScRange& rRef, ScDocument* pDocP ) { - SyncFocusState(); if ( bRefInputMode && pRefInputEdit ) // Nur moeglich, wenn im Referenz-Editmodus { if ( rRef.aStart != rRef.aEnd ) @@ -236,7 +247,6 @@ void ScSpecialFilterDlg::SetReference( const ScRange& rRef, ScDocument* pDocP ) void ScSpecialFilterDlg::SetActive() { - SyncFocusState(); if ( bRefInputMode ) { if ( pRefInputEdit == pEdCopyArea ) @@ -389,27 +399,30 @@ IMPL_LINK_TYPED( ScSpecialFilterDlg, EndDlgHdl, Button*, pBtn, void ) } } - -void ScSpecialFilterDlg::SyncFocusState() +IMPL_LINK_TYPED( ScSpecialFilterDlg, TimeOutHdl, Idle*, _pIdle, void ) { - if (!IsActive()) - return; + // every 50ms check whether RefInputMode is still true - if( pEdCopyArea->HasFocus() || pRbCopyArea->HasFocus() ) - { - pRefInputEdit = pEdCopyArea; - bRefInputMode = true; - } - else if( pEdFilterArea->HasFocus() || pRbFilterArea->HasFocus() ) + if( (_pIdle == pIdle) && IsActive() ) { - pRefInputEdit = pEdFilterArea; - bRefInputMode = true; - } - else if( bRefInputMode ) - { - pRefInputEdit = nullptr; - bRefInputMode = false; + if( pEdCopyArea->HasFocus() || pRbCopyArea->HasFocus() ) + { + pRefInputEdit = pEdCopyArea; + bRefInputMode = true; + } + else if( pEdFilterArea->HasFocus() || pRbFilterArea->HasFocus() ) + { + pRefInputEdit = pEdFilterArea; + bRefInputMode = true; + } + else if( bRefInputMode ) + { + pRefInputEdit = nullptr; + bRefInputMode = false; + } } + + pIdle->Start(); } IMPL_LINK_TYPED( ScSpecialFilterDlg, FilterAreaSelHdl, ListBox&, rLb, void ) diff --git a/sc/source/ui/inc/filtdlg.hxx b/sc/source/ui/inc/filtdlg.hxx index 98f7d4d054e3..2e3e8b9303a6 100644 --- a/sc/source/ui/inc/filtdlg.hxx +++ b/sc/source/ui/inc/filtdlg.hxx @@ -64,6 +64,7 @@ public: virtual bool IsRefInputMode() const override; virtual void SetActive() override; + virtual bool Close() override; void SliderMoved(); size_t GetSliderPos(); @@ -167,7 +168,7 @@ public: virtual void dispose() override; virtual void SetReference( const ScRange& rRef, ScDocument* pDoc ) override; - void SyncFocusState(); + virtual bool IsRefInputMode() const override; virtual void SetActive() override; @@ -206,6 +207,8 @@ private: VclPtr<formula::RefEdit> pRefInputEdit; bool bRefInputMode; + // Hack: RefInput control + Idle* pIdle; private: void Init( const SfxItemSet& rArgSet ); |