Kaydet (Commit) da7aa256 authored tarafından Kohei Yoshida's avatar Kohei Yoshida Kaydeden (comit) Kohei Yoshida

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/30991Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarKohei Yoshida <libreoffice@kohei.us>
üst 4d73205a
...@@ -1397,7 +1397,6 @@ ScAccessibleDocument::ScAccessibleDocument( ...@@ -1397,7 +1397,6 @@ ScAccessibleDocument::ScAccessibleDocument(
mpViewShell(pViewShell), mpViewShell(pViewShell),
meSplitPos(eSplitPos), meSplitPos(eSplitPos),
mpChildrenShapes(nullptr), mpChildrenShapes(nullptr),
mpTempAccEdit(nullptr),
mbCompleteSheetSelected(false) mbCompleteSheetSelected(false)
{ {
maVisArea = GetVisibleArea_Impl(); maVisArea = GetVisibleArea_Impl();
...@@ -1508,8 +1507,8 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) ...@@ -1508,8 +1507,8 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
const ScAccGridWinFocusLostHint* pFocusLostHint = static_cast<const ScAccGridWinFocusLostHint *>(&rHint); const ScAccGridWinFocusLostHint* pFocusLostHint = static_cast<const ScAccGridWinFocusLostHint *>(&rHint);
if (pFocusLostHint->GetOldGridWin() == meSplitPos) if (pFocusLostHint->GetOldGridWin() == meSplitPos)
{ {
if (mxTempAcc.is() && mpTempAccEdit) if (mpEditObj.is())
mpTempAccEdit->LostFocus(); mpEditObj->LostFocus();
else if (mpAccessibleSpreadsheet.is()) else if (mpAccessibleSpreadsheet.is())
mpAccessibleSpreadsheet->LostFocus(); mpAccessibleSpreadsheet->LostFocus();
else else
...@@ -1538,12 +1537,12 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) ...@@ -1538,12 +1537,12 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
} }
else else
{ {
if (mxTempAcc.is() && mpTempAccEdit) if (mpEditObj.is())
mpTempAccEdit->GotFocus(); mpEditObj->GotFocus();
else if (mpAccessibleSpreadsheet.is()) else if (mpAccessibleSpreadsheet.is())
mpAccessibleSpreadsheet->GotFocus(); mpAccessibleSpreadsheet->GotFocus();
else else
CommitFocusGained(); CommitFocusGained();
} }
} }
} }
...@@ -1587,11 +1586,14 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) ...@@ -1587,11 +1586,14 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
const EditEngine* pEditEng = rViewData.GetEditView(meSplitPos)->GetEditEngine(); const EditEngine* pEditEng = rViewData.GetEditView(meSplitPos)->GetEditEngine();
if (pEditEng && pEditEng->GetUpdateMode()) if (pEditEng && pEditEng->GetUpdateMode())
{ {
mpTempAccEdit = new ScAccessibleEditObject(this, rViewData.GetEditView(meSplitPos), if (!mpEditObj.is())
mpViewShell->GetWindowByPos(meSplitPos), GetCurrentCellName(), {
OUString(ScResId(STR_ACC_EDITLINE_DESCR)), ScAccessibleEditObject::CellInEditMode); mpEditObj.set(new ScAccessibleEditObject(this, rViewData.GetEditView(meSplitPos),
uno::Reference<XAccessible> xAcc = mpTempAccEdit; mpViewShell->GetWindowByPos(meSplitPos), GetCurrentCellName(),
OUString(ScResId(STR_ACC_EDITLINE_DESCR)), ScAccessibleEditObject::CellInEditMode));
}
uno::Reference<XAccessible> xAcc = mpEditObj.get();
AddChild(xAcc, true); AddChild(xAcc, true);
if (mpAccessibleSpreadsheet.is()) if (mpAccessibleSpreadsheet.is())
...@@ -1599,19 +1601,19 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) ...@@ -1599,19 +1601,19 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
else else
CommitFocusLost(); CommitFocusLost();
mpTempAccEdit->GotFocus(); mpEditObj->GotFocus();
} }
} }
} }
else if (rHint.GetId() == SC_HINT_ACC_LEAVEEDITMODE) else if (rHint.GetId() == SC_HINT_ACC_LEAVEEDITMODE)
{ {
if (mxTempAcc.is()) if (mpEditObj.is())
{ {
if (mpTempAccEdit) mpEditObj->LostFocus();
mpTempAccEdit->LostFocus();
uno::Reference<XAccessible> xAcc = mpEditObj.get();
RemoveChild(xAcc, true);
mpTempAccEdit = nullptr;
RemoveChild(mxTempAcc, true);
if (mpAccessibleSpreadsheet.is() && mpViewShell && mpViewShell->IsActive()) if (mpAccessibleSpreadsheet.is() && mpViewShell && mpViewShell->IsActive())
mpAccessibleSpreadsheet->GotFocus(); mpAccessibleSpreadsheet->GotFocus();
else if( mpViewShell && mpViewShell->IsActive()) else if( mpViewShell && mpViewShell->IsActive())
......
...@@ -259,8 +259,9 @@ private: ...@@ -259,8 +259,9 @@ private:
ScTabViewShell* mpViewShell; ScTabViewShell* mpViewShell;
ScSplitPos meSplitPos; ScSplitPos meSplitPos;
rtl::Reference<ScAccessibleSpreadsheet> mpAccessibleSpreadsheet; rtl::Reference<ScAccessibleSpreadsheet> mpAccessibleSpreadsheet;
rtl::Reference<ScAccessibleEditObject> mpEditObj;
ScChildrenShapes* mpChildrenShapes; ScChildrenShapes* mpChildrenShapes;
ScAccessibleEditObject* mpTempAccEdit;
css::uno::Reference<css::accessibility::XAccessible> mxTempAcc; css::uno::Reference<css::accessibility::XAccessible> mxTempAcc;
Rectangle maVisArea; Rectangle maVisArea;
bool mbCompleteSheetSelected; bool mbCompleteSheetSelected;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment