From 663a073a3485943058871567d588989536e8ba4e Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Wed, 6 Jun 2018 12:17:59 +0100 Subject: tdf#116552 restore copy on focus and jump focus to source MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is surely an utter abuse of focus and an a11y disaster, but it used to work this way. Change-Id: I265a2bafbc2cdd17ff4a5b7c2805def63c510d5c Reviewed-on: https://gerrit.libreoffice.org/55670 Reviewed-by: Eike Rathke Tested-by: Xisco Faulí Reviewed-by: Christian Lohmaier --- sc/source/ui/dbgui/PivotLayoutDialog.cxx | 2 ++ sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx | 22 ++++++++++++++++++++++ sc/source/ui/inc/PivotLayoutDialog.hxx | 2 ++ sc/source/ui/inc/PivotLayoutTreeListBase.hxx | 3 +++ 4 files changed, 29 insertions(+) diff --git a/sc/source/ui/dbgui/PivotLayoutDialog.cxx b/sc/source/ui/dbgui/PivotLayoutDialog.cxx index 129969c926f3..70f436c0396e 100644 --- a/sc/source/ui/dbgui/PivotLayoutDialog.cxx +++ b/sc/source/ui/dbgui/PivotLayoutDialog.cxx @@ -71,6 +71,7 @@ ScPivotLayoutDialog::ScPivotLayoutDialog( ScViewData* pViewData, const ScDPObject* pPivotTableObject, bool bNewPivotTable) : ScAnyRefDlg (pSfxBindings, pChildWindow, pParent, "PivotTableLayout", "modules/scalc/ui/pivottablelayoutdialog.ui"), maPivotTableObject (*pPivotTableObject), + mpPreviouslyFocusedListBox(nullptr), mpViewData (pViewData), mpDocument (pViewData->GetDocument()), mbNewPivotTable (bNewPivotTable), @@ -188,6 +189,7 @@ ScPivotLayoutDialog::~ScPivotLayoutDialog() void ScPivotLayoutDialog::dispose() { + mpPreviouslyFocusedListBox.clear(); mpListBoxField.clear(); mpListBoxPage.clear(); mpListBoxColumn.clear(); diff --git a/sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx b/sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx index 236a939655ca..d6512365197b 100644 --- a/sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx +++ b/sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx @@ -117,4 +117,26 @@ void ScPivotLayoutTreeListBase::RemoveEntryForItem(const ScItemValue* pItemValue } } +void ScPivotLayoutTreeListBase::GetFocus() +{ + SvTreeListBox::GetFocus(); + + if (!mpParent || !mpParent->mpPreviouslyFocusedListBox) + return; + + if (GetGetFocusFlags() & GetFocusFlags::Mnemonic) + { + SvTreeListEntry* pEntry = mpParent->mpPreviouslyFocusedListBox->GetCurEntry(); + if (pEntry) + InsertEntryForSourceTarget(pEntry, nullptr); + mpParent->mpPreviouslyFocusedListBox->GrabFocus(); + } +} + +void ScPivotLayoutTreeListBase::LoseFocus() +{ + SvTreeListBox::LoseFocus(); + if (mpParent) + mpParent->mpPreviouslyFocusedListBox = this; +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/inc/PivotLayoutDialog.hxx b/sc/source/ui/inc/PivotLayoutDialog.hxx index 25f12db90e5d..96d6218adb3d 100644 --- a/sc/source/ui/inc/PivotLayoutDialog.hxx +++ b/sc/source/ui/inc/PivotLayoutDialog.hxx @@ -42,6 +42,8 @@ class ScPivotLayoutDialog : public ScAnyRefDlg public: ScDPObject maPivotTableObject; + VclPtr mpPreviouslyFocusedListBox; + private: ScViewData* mpViewData; ScDocument* mpDocument; diff --git a/sc/source/ui/inc/PivotLayoutTreeListBase.hxx b/sc/source/ui/inc/PivotLayoutTreeListBase.hxx index 41ff3a344909..b651f7e132af 100644 --- a/sc/source/ui/inc/PivotLayoutTreeListBase.hxx +++ b/sc/source/ui/inc/PivotLayoutTreeListBase.hxx @@ -53,6 +53,9 @@ public: SvTreeListEntry* pEntry) override; virtual void DragFinished(sal_Int8 nDropAction) override; + virtual void GetFocus() override; + virtual void LoseFocus() override; + void PushEntriesToPivotFieldVector(ScPivotFieldVector& rVector); void RemoveEntryForItem(const ScItemValue* pItemValue); -- cgit