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(
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,8 +1537,8 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
}
else
{
if (mxTempAcc.is() && mpTempAccEdit)
mpTempAccEdit->GotFocus();
if (mpEditObj.is())
mpEditObj->GotFocus();
else if (mpAccessibleSpreadsheet.is())
mpAccessibleSpreadsheet->GotFocus();
else
......@@ -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),
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 = mpTempAccEdit;
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())
......
......@@ -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;
......
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