lokdialog: convert the dialog File -> Properties... to async exec

Change-Id: I677760e9b154256c00ea4e99fd40204744f3cd21
Reviewed-on: https://gerrit.libreoffice.org/50600
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Henry Castro <hcastro@collabora.com>
diff --git a/sfx2/source/doc/objserv.cxx b/sfx2/source/doc/objserv.cxx
index c69cbe9..aaf71fb 100644
--- a/sfx2/source/doc/objserv.cxx
+++ b/sfx2/source/doc/objserv.cxx
@@ -468,30 +468,39 @@ void SfxObjectShell::ExecFile_Impl(SfxRequest &rReq)

                // creating dialog is done via virtual method; application will
                // add its own statistics page
                ScopedVclPtr<SfxDocumentInfoDialog> pDlg(CreateDocumentInfoDialog(aSet));
                if ( RET_OK == pDlg->Execute() )
                {
                    const SfxDocumentInfoItem* pDocInfoItem = SfxItemSet::GetItem<SfxDocumentInfoItem>(pDlg->GetOutputItemSet(), SID_DOCINFO, false);
                    if ( pDocInfoItem )
                    {
                        // user has done some changes to DocumentInfo
                        pDocInfoItem->UpdateDocumentInfo(getDocProperties());
                        uno::Sequence< document::CmisProperty > aNewCmisProperties =
                            pDocInfoItem->GetCmisProperties( );
                        if ( aNewCmisProperties.getLength( ) > 0 )
                            xCmisDoc->updateCmisProperties( aNewCmisProperties );
                        SetUseUserData( pDocInfoItem->IsUseUserData() );
                        SetUseThumbnailSave( pDocInfoItem-> IsUseThumbnailSave() );
                        // add data from dialog for possible recording purpose
                        rReq.AppendItem( SfxDocumentInfoItem( GetTitle(),
                            getDocProperties(), aNewCmisProperties, IsUseUserData(), IsUseThumbnailSave() ) );
                    }
                VclAbstractDialog::AsyncContext aCtx;
                std::shared_ptr<SfxRequest> pReq = std::make_shared<SfxRequest>(rReq);
                VclPtr<SfxDocumentInfoDialog> pDlg(CreateDocumentInfoDialog(aSet));

                    rReq.Done();
                }
                else
                    // nothing done; no recording
                    rReq.Ignore();
                aCtx.mxOwner = pDlg;
                aCtx.maEndDialogFn = [this, pDlg, xCmisDoc, pReq](sal_Int32 nResult)
                {
                    if (RET_OK == nResult)
                    {
                        const SfxDocumentInfoItem* pDocInfoItem = SfxItemSet::GetItem<SfxDocumentInfoItem>(pDlg->GetOutputItemSet(), SID_DOCINFO, false);
                        if ( pDocInfoItem )
                        {
                            // user has done some changes to DocumentInfo
                            pDocInfoItem->UpdateDocumentInfo(getDocProperties());
                            uno::Sequence< document::CmisProperty > aNewCmisProperties =
                                pDocInfoItem->GetCmisProperties( );
                            if ( aNewCmisProperties.getLength( ) > 0 )
                                xCmisDoc->updateCmisProperties( aNewCmisProperties );
                            SetUseUserData( pDocInfoItem->IsUseUserData() );
                            SetUseThumbnailSave( pDocInfoItem-> IsUseThumbnailSave() );
                            // add data from dialog for possible recording purpose
                            pReq->AppendItem( SfxDocumentInfoItem( GetTitle(),
                                getDocProperties(), aNewCmisProperties, IsUseUserData(), IsUseThumbnailSave() ) );
                        }
                        pReq->Done();
                    }
                    else
                        // nothing done; no recording
                        pReq->Ignore();
                };

                pDlg->StartExecuteAsync(aCtx);
                rReq.Ignore();
            }

            return;