diff options
Diffstat (limited to 'sc/source')
-rw-r--r-- | sc/source/ui/view/cellsh.cxx | 6 | ||||
-rw-r--r-- | sc/source/ui/view/cellsh1.cxx | 21 |
2 files changed, 24 insertions, 3 deletions
diff --git a/sc/source/ui/view/cellsh.cxx b/sc/source/ui/view/cellsh.cxx index c82c3808e66c..0e3d1301bfc9 100644 --- a/sc/source/ui/view/cellsh.cxx +++ b/sc/source/ui/view/cellsh.cxx @@ -19,6 +19,7 @@ #include "scitems.hxx" +#include <comphelper/lok.hxx> #include <svl/slstitm.hxx> #include <svl/stritem.hxx> #include <svl/whiter.hxx> @@ -312,7 +313,7 @@ void ScCellShell::GetCellState( SfxItemSet& rSet ) ScDocument& rDoc = GetViewData()->GetDocShell()->GetDocument(); ScAddress aCursor( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() ); - + bool isLOKNoTiledAnnotations = comphelper::LibreOfficeKit::isActive() && !comphelper::LibreOfficeKit::isTiledAnnotations(); SfxWhichIter aIter(rSet); sal_uInt16 nWhich = aIter.FirstWhich(); while ( nWhich ) @@ -371,7 +372,8 @@ void ScCellShell::GetCellState( SfxItemSet& rSet ) case SID_EDIT_POSTIT: { ScAddress aPos( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() ); - if( rDoc.GetNote(aPos) ) + // Allow editing annotation by Id (without selecting the cell) for LOK + if( isLOKNoTiledAnnotations || rDoc.GetNote(aPos) ) { bDisable = false; } diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx index a836749b3fbe..6f34b75b5f4c 100644 --- a/sc/source/ui/view/cellsh1.cxx +++ b/sc/source/ui/view/cellsh1.cxx @@ -2201,10 +2201,29 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) const SfxPoolItem* pText; if ( pReqArgs && pReqArgs->HasItem( SID_ATTR_POSTIT_TEXT, &pText) ) { + const SfxPoolItem* pCellId; + OUString aCellId; + // SID_ATTR_POSTIT_ID only argument for SID_EDIT_POSTIT + if (pReqArgs->HasItem( SID_ATTR_POSTIT_ID, &pCellId )) + aCellId = static_cast<const SvxPostItIdItem*>(pCellId)->GetValue(); + const SvxPostItTextItem* pTextItem = static_cast<const SvxPostItTextItem*>( pText ); - const SvxPostItAuthorItem* pAuthorItem = static_cast<const SvxPostItAuthorItem*>( pReqArgs->GetItem( SID_ATTR_POSTIT_AUTHOR) ); + const SvxPostItAuthorItem* pAuthorItem = static_cast<const SvxPostItAuthorItem*>( pReqArgs->GetItem( SID_ATTR_POSTIT_AUTHOR ) ); const SvxPostItDateItem* pDateItem = static_cast<const SvxPostItDateItem*>( pReqArgs->GetItem( SID_ATTR_POSTIT_DATE ) ); + if (!aCellId.isEmpty()) + { + ScAddress aParsedPos; + ScRefFlags nRes = aParsedPos.Parse(aCellId, + GetViewData()->GetDocument(), + ScAddress::Details(formula::FormulaGrammar::AddressConvention::CONV_ODF)); + if (nRes & ScRefFlags::VALID) + { + pTabViewShell->SetTabNo(aParsedPos.Tab()); + pTabViewShell->SetCursor(aParsedPos.Col(), aParsedPos.Row()); + } + } + ScAddress aPos( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() ); pTabViewShell->ReplaceNote( aPos, pTextItem->GetValue(), pAuthorItem ? &pAuthorItem->GetValue() : nullptr, |