diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2016-11-19 14:47:48 -0500 |
---|---|---|
committer | Kohei Yoshida <libreoffice@kohei.us> | 2016-11-19 22:02:24 +0000 |
commit | da7aa2561297da42058da55ed2629d0df6fb03f3 (patch) | |
tree | 391419d238e37dafbe3afd4bee2245afc23e9dc0 /sc | |
parent | 4d73205ae4227a90d2087153c6fc82a51ea513ae (diff) |
Use rtl::Reference to wrap ScAccessibleEditObject here.
And avoid ScAccessibleEditObject from getting instantiated every
time cell edit mode is triggered.
Change-Id: Id214248c7b6fcc28ab33777e1c44cdfc07276620
Reviewed-on: https://gerrit.libreoffice.org/30991
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Kohei Yoshida <libreoffice@kohei.us>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/ui/Accessibility/AccessibleDocument.cxx | 40 | ||||
-rw-r--r-- | sc/source/ui/inc/AccessibleDocument.hxx | 3 |
2 files changed, 23 insertions, 20 deletions
diff --git a/sc/source/ui/Accessibility/AccessibleDocument.cxx b/sc/source/ui/Accessibility/AccessibleDocument.cxx index f919af438e80..8591e6acd502 100644 --- a/sc/source/ui/Accessibility/AccessibleDocument.cxx +++ b/sc/source/ui/Accessibility/AccessibleDocument.cxx @@ -1397,7 +1397,6 @@ ScAccessibleDocument::ScAccessibleDocument( mpViewShell(pViewShell), meSplitPos(eSplitPos), mpChildrenShapes(nullptr), - mpTempAccEdit(nullptr), mbCompleteSheetSelected(false) { maVisArea = GetVisibleArea_Impl(); @@ -1508,8 +1507,8 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) const ScAccGridWinFocusLostHint* pFocusLostHint = static_cast<const ScAccGridWinFocusLostHint *>(&rHint); if (pFocusLostHint->GetOldGridWin() == meSplitPos) { - if (mxTempAcc.is() && mpTempAccEdit) - mpTempAccEdit->LostFocus(); + if (mpEditObj.is()) + mpEditObj->LostFocus(); else if (mpAccessibleSpreadsheet.is()) mpAccessibleSpreadsheet->LostFocus(); else @@ -1538,12 +1537,12 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) } else { - if (mxTempAcc.is() && mpTempAccEdit) - mpTempAccEdit->GotFocus(); - else if (mpAccessibleSpreadsheet.is()) - mpAccessibleSpreadsheet->GotFocus(); - else - CommitFocusGained(); + if (mpEditObj.is()) + mpEditObj->GotFocus(); + else if (mpAccessibleSpreadsheet.is()) + mpAccessibleSpreadsheet->GotFocus(); + else + CommitFocusGained(); } } } @@ -1587,11 +1586,14 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) const EditEngine* pEditEng = rViewData.GetEditView(meSplitPos)->GetEditEngine(); if (pEditEng && pEditEng->GetUpdateMode()) { - mpTempAccEdit = new ScAccessibleEditObject(this, rViewData.GetEditView(meSplitPos), - mpViewShell->GetWindowByPos(meSplitPos), GetCurrentCellName(), - OUString(ScResId(STR_ACC_EDITLINE_DESCR)), ScAccessibleEditObject::CellInEditMode); - uno::Reference<XAccessible> xAcc = mpTempAccEdit; + if (!mpEditObj.is()) + { + mpEditObj.set(new ScAccessibleEditObject(this, rViewData.GetEditView(meSplitPos), + mpViewShell->GetWindowByPos(meSplitPos), GetCurrentCellName(), + OUString(ScResId(STR_ACC_EDITLINE_DESCR)), ScAccessibleEditObject::CellInEditMode)); + } + uno::Reference<XAccessible> xAcc = mpEditObj.get(); AddChild(xAcc, true); if (mpAccessibleSpreadsheet.is()) @@ -1599,19 +1601,19 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) else CommitFocusLost(); - mpTempAccEdit->GotFocus(); + mpEditObj->GotFocus(); } } } else if (rHint.GetId() == SC_HINT_ACC_LEAVEEDITMODE) { - if (mxTempAcc.is()) + if (mpEditObj.is()) { - if (mpTempAccEdit) - mpTempAccEdit->LostFocus(); + mpEditObj->LostFocus(); + + uno::Reference<XAccessible> xAcc = mpEditObj.get(); + RemoveChild(xAcc, true); - mpTempAccEdit = nullptr; - RemoveChild(mxTempAcc, true); if (mpAccessibleSpreadsheet.is() && mpViewShell && mpViewShell->IsActive()) mpAccessibleSpreadsheet->GotFocus(); else if( mpViewShell && mpViewShell->IsActive()) diff --git a/sc/source/ui/inc/AccessibleDocument.hxx b/sc/source/ui/inc/AccessibleDocument.hxx index 9a2807d54336..0f08c4cd73ec 100644 --- a/sc/source/ui/inc/AccessibleDocument.hxx +++ b/sc/source/ui/inc/AccessibleDocument.hxx @@ -259,8 +259,9 @@ private: ScTabViewShell* mpViewShell; ScSplitPos meSplitPos; rtl::Reference<ScAccessibleSpreadsheet> mpAccessibleSpreadsheet; + rtl::Reference<ScAccessibleEditObject> mpEditObj; ScChildrenShapes* mpChildrenShapes; - ScAccessibleEditObject* mpTempAccEdit; + css::uno::Reference<css::accessibility::XAccessible> mxTempAcc; Rectangle maVisArea; bool mbCompleteSheetSelected; |