sw/sdi/_textsh.sdi | 6 +++ sw/source/uibase/shells/textsh1.cxx | 59 ++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+)
New commits: commit 4a4218eeece5a7b9740f8f6660075300e2efff8d Author: Tamás Zolnai <tamas.zol...@collabora.com> AuthorDate: Sat Feb 16 20:55:37 2019 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Sun Feb 17 11:06:28 2019 +0100 MSForms: Make Control Properties menu to work with drop-down form field Always forward the Execute and State method to the form shell, so if a form control is selected the Control Properites will work correctly. Otherwise we check whether there is any field next to the cursor. Reviewed-on: https://gerrit.libreoffice.org/67911 Tested-by: Jenkins Reviewed-by: Tamás Zolnai <tamas.zol...@collabora.com> (cherry picked from commit 770ef0d216a30efd756b4be26e9fc6e077748fed) Change-Id: I25055c17d887a2f2a716d8325f46825cc408179e Reviewed-on: https://gerrit.libreoffice.org/67926 Reviewed-by: Andras Timar <andras.ti...@collabora.com> Tested-by: Andras Timar <andras.ti...@collabora.com> diff --git a/sw/sdi/_textsh.sdi b/sw/sdi/_textsh.sdi index e5c260cc5f49..557c036a569d 100644 --- a/sw/sdi/_textsh.sdi +++ b/sw/sdi/_textsh.sdi @@ -1694,5 +1694,11 @@ interface BaseText StateMethod = StateField ; ] + SID_FM_CTL_PROPERTIES + [ + ExecMethod = Execute ; + StateMethod = GetState ; + ] + } //ende interface text diff --git a/sw/source/uibase/shells/textsh1.cxx b/sw/source/uibase/shells/textsh1.cxx index 3769fbcadb51..71c873313452 100644 --- a/sw/source/uibase/shells/textsh1.cxx +++ b/sw/source/uibase/shells/textsh1.cxx @@ -118,6 +118,8 @@ #include <svx/drawitem.hxx> #include <numrule.hxx> #include <memory> +#include <xmloff/odffields.hxx> +#include <swabstdlg.hxx> using namespace ::com::sun::star; using namespace com::sun::star::beans; @@ -1382,6 +1384,32 @@ void SwTextShell::Execute(SfxRequest &rReq) GetView().UpdateWordCount(this, nSlot); } break; + case SID_FM_CTL_PROPERTIES: + { + SwPosition aPos(*GetShell().GetCursor()->GetPoint()); + sw::mark::IFieldmark* pFieldBM = GetShell().getIDocumentMarkAccess()->getFieldmarkFor(aPos); + if ( !pFieldBM ) + { + --aPos.nContent; + pFieldBM = GetShell().getIDocumentMarkAccess()->getFieldmarkFor(aPos); + } + + if ( pFieldBM && pFieldBM->GetFieldname() == ODF_FORMDROPDOWN ) + { + SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); + ScopedVclPtr<VclAbstractDialog> pDlg(pFact->CreateDropDownFormFieldDialog(pFieldBM)); + pDlg->Execute(); + pFieldBM->Invalidate(); + rWrtSh.InvalidateWindows( rWrtSh.GetView().GetVisArea() ); + } + else + { + SfxRequest aReq( GetView().GetViewFrame(), SID_FM_CTL_PROPERTIES ); + aReq.AppendItem( SfxBoolItem( SID_FM_CTL_PROPERTIES, true ) ); + rWrtSh.GetView().GetFormShell()->Execute( aReq ); + } + } + break; default: OSL_ENSURE(false, "wrong dispatcher"); return; @@ -1921,6 +1949,37 @@ void SwTextShell::GetState( SfxItemSet &rSet ) rSet.DisableItem(nWhich); } break; + case SID_FM_CTL_PROPERTIES: + { + bool bDisable = false; + + // First get the state from the form shell + SfxItemSet aSet(GetShell().GetAttrPool(), svl::Items<SID_FM_CTL_PROPERTIES, SID_FM_CTL_PROPERTIES>{}); + aSet.Put(SfxBoolItem( SID_FM_CTL_PROPERTIES, true )); + GetShell().GetView().GetFormShell()->GetState( aSet ); + + if(SfxItemState::DISABLED == aSet.GetItemState(SID_FM_CTL_PROPERTIES)) + { + bDisable = true; + } + + // Enable it if we have a valid object other than what form shell knows + SwPosition aPos(*GetShell().GetCursor()->GetPoint()); + sw::mark::IFieldmark* pFieldBM = GetShell().getIDocumentMarkAccess()->getFieldmarkFor(aPos); + if ( !pFieldBM ) + { + --aPos.nContent; + pFieldBM = GetShell().getIDocumentMarkAccess()->getFieldmarkFor(aPos); + } + if ( pFieldBM && pFieldBM->GetFieldname() == ODF_FORMDROPDOWN ) + { + bDisable = false; + } + + if(bDisable) + rSet.DisableItem(nWhich); + } + break; } nWhich = aIter.NextWhich(); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits