[Libreoffice-commits] core.git: Branch 'feature/cib_contract57c' - 3 commits - filter/source sw/source

Jan-Marek Glogowski (via logerrit) logerrit at kemper.freedesktop.org
Wed Aug 7 10:45:22 UTC 2019


 filter/source/pdf/impdialog.cxx   |  110 ++++++++++++++++++++------------------
 filter/source/pdf/impdialog.hxx   |    4 +
 filter/source/pdf/pdfexport.cxx   |    1 
 sw/source/core/bastyp/swcache.cxx |    2 
 4 files changed, 65 insertions(+), 52 deletions(-)

New commits:
commit f94a50f0556bc0c6e18ad390af589b9521ceb28c
Author:     Jan-Marek Glogowski <jan-marek.glogowski at extern.cib.de>
AuthorDate: Wed Aug 7 10:18:06 2019 +0000
Commit:     Jan-Marek Glogowski <jan-marek.glogowski at extern.cib.de>
CommitDate: Wed Aug 7 10:33:39 2019 +0000

    Explicitly disable form export for PDF/A-2
    
    Give BRZ some time to actually adapt their scripts. They'll have to
    set ExportFormFields for LO >= 6.3 in any way, as general from
    export was enabled by commit c864d894a901 ("tdf#126642 always allow
    PDF/A form export"), which will be backported for 6.3 too to have
    a consistent state.
    
    Change-Id: I16b476a4b51b654161efe5f6f92420f76db1e294

diff --git a/filter/source/pdf/pdfexport.cxx b/filter/source/pdf/pdfexport.cxx
index 387e2307ae9a..d17fffc7a120 100644
--- a/filter/source/pdf/pdfexport.cxx
+++ b/filter/source/pdf/pdfexport.cxx
@@ -575,6 +575,7 @@ bool PDFExport::Export( const OUString& rFile, const Sequence< PropertyValue >&
             case 2:
                 aContext.Version    = vcl::PDFWriter::PDFVersion::PDF_A_2;
                 mbUseTaggedPDF = true;          // force the tagged PDF as well
+                mbExportFormFields = false;     // force disabling of form conversion
                 mbRemoveTransparencies = false; // PDF/A-2 does allow transparencies
                 mbEncrypt = false;              // no encryption
                 xEnc.clear();
commit 599447d56e3b2625f5e6d843b77b41ffd4b4f1f2
Author:     Jan-Marek Glogowski <jan-marek.glogowski at extern.cib.de>
AuthorDate: Thu Aug 1 14:10:05 2019 +0000
Commit:     Jan-Marek Glogowski <jan-marek.glogowski at extern.cib.de>
CommitDate: Wed Aug 7 10:33:39 2019 +0000

    tdf#126642 correctly handle the PDF/A settings
    
    This is in the spirit of the master fix. But instead of enabling
    broken PDF/A form handling, which would eventually require many
    more fixes, this correctly handles the user setting and disables
    the form export for PDF/A.
    
    The code therefore is almost the same, minus the radio button
    PDF/A type handling plus disabling the form frame.
    
    This includes some adaptions, as the customer branch just contains
    the first commit from tdf#62728.
    
    Reviewed-on: https://gerrit.libreoffice.org/76820
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    (cherry picked from commit aac306e7ea42eeac3d6c1860f25061148ba2f547)
    
    Change-Id: I31f96a36d776468a5547042fb9e4c0605751fbba

diff --git a/filter/source/pdf/impdialog.cxx b/filter/source/pdf/impdialog.cxx
index 372505851e33..e55e9f10c33a 100644
--- a/filter/source/pdf/impdialog.cxx
+++ b/filter/source/pdf/impdialog.cxx
@@ -70,6 +70,7 @@ ImpPDFTabDialog::ImpPDFTabDialog(weld::Window* pParent, Sequence< PropertyValue
     mbReduceImageResolution( false ),
     mnMaxImageResolution( 300 ),
     mbUseTaggedPDF( false ),
+    mbUseTaggedPDFUserSelection( false ),
     mbExportNotes( true ),
     mbViewPDF( false ),
     mbUseReferenceXObject( false ),
@@ -81,6 +82,7 @@ ImpPDFTabDialog::ImpPDFTabDialog(weld::Window* pParent, Sequence< PropertyValue
     mbAddStream( false ),
     mnFormsType( 0 ),
     mbExportFormFields( true ),
+    mbExportFormFieldsUserSelection( true ),
     mbAllowDuplicateFieldNames( false ),
     mbExportBookmarks( true ),
     mbExportHiddenSlides ( false),
@@ -181,7 +183,10 @@ ImpPDFTabDialog::ImpPDFTabDialog(weld::Window* pParent, Sequence< PropertyValue
     mbReduceImageResolution = maConfigItem.ReadBool( "ReduceImageResolution", false );
     mnMaxImageResolution = maConfigItem.ReadInt32( "MaxImageResolution", 300 );
 
+    // this is always the user selection, independent from the PDF/A forced selection
     mbUseTaggedPDF = maConfigItem.ReadBool( "UseTaggedPDF", false );
+    mbUseTaggedPDFUserSelection = mbUseTaggedPDF;
+
     mnPDFTypeSelection =  maConfigItem.ReadInt32( "SelectPdfVersion", 0 );
     if ( mbIsPresentation )
     {
@@ -200,8 +205,11 @@ ImpPDFTabDialog::ImpPDFTabDialog(weld::Window* pParent, Sequence< PropertyValue
     mbIsExportPlaceholders = maConfigItem.ReadBool( "ExportPlaceholders", false );
     mbAddStream = maConfigItem.ReadBool( "IsAddStream", false );
 
-    mnFormsType = maConfigItem.ReadInt32( "FormsType", 0 );
+    // this is always the user selection, independent from the PDF/A forced selection
     mbExportFormFields = maConfigItem.ReadBool( "ExportFormFields", true );
+    mbExportFormFieldsUserSelection = mbExportFormFields;
+
+    mnFormsType = maConfigItem.ReadInt32( "FormsType", 0 );
     if ( ( mnFormsType < 0 ) || ( mnFormsType > 3 ) )
         mnFormsType = 0;
     mbAllowDuplicateFieldNames = maConfigItem.ReadBool( "AllowDuplicateFieldNames", false );
@@ -365,7 +373,9 @@ Sequence< PropertyValue > ImpPDFTabDialog::GetFilterData()
     maConfigItem.WriteBool( "ReduceImageResolution", mbReduceImageResolution );
     maConfigItem.WriteInt32("MaxImageResolution", mnMaxImageResolution );
 
-    maConfigItem.WriteBool( "UseTaggedPDF", mbUseTaggedPDF );
+    // always write the user selection, never the overridden PDF/A value
+    const bool bIsPDFA = (1 == mnPDFTypeSelection) || (2 == mnPDFTypeSelection);
+    maConfigItem.WriteBool("UseTaggedPDF", bIsPDFA ? mbUseTaggedPDFUserSelection : mbUseTaggedPDF);
     maConfigItem.WriteInt32("SelectPdfVersion", mnPDFTypeSelection );
 
     if ( mbIsPresentation )
@@ -389,7 +399,8 @@ Sequence< PropertyValue > ImpPDFTabDialog::GetFilterData()
     * ever be an additional form submit format this could get invalid.
     */
     maConfigItem.WriteInt32( "FormsType", mnFormsType );
-    maConfigItem.WriteBool( "ExportFormFields", mbExportFormFields );
+    // always write the user selection, never the overridden PDF/A value
+    maConfigItem.WriteBool("ExportFormFields", bIsPDFA ? mbExportFormFieldsUserSelection : mbExportFormFields);
     maConfigItem.WriteBool( "AllowDuplicateFieldNames", mbAllowDuplicateFieldNames );
 
     maConfigItem.WriteBool( "HideViewerToolbar", mbHideViewerToolbar );
@@ -445,7 +456,7 @@ Sequence< PropertyValue > ImpPDFTabDialog::GetFilterData()
 
 ImpPDFTabGeneralPage::ImpPDFTabGeneralPage(TabPageParent pParent, const SfxItemSet& rCoreSet)
     : SfxTabPage(pParent, "filter/ui/pdfgeneralpage.ui", "PdfGeneralPage", &rCoreSet)
-    , mbTaggedPDFUserSelection(false)
+    , mbUseTaggedPDFUserSelection(false)
     , mbExportFormFieldsUserSelection(false)
     , mbIsPresentation(false)
     , mbIsSpreadsheet(false)
@@ -539,24 +550,25 @@ void ImpPDFTabGeneralPage::SetFilterConfigItem(ImpPDFTabDialog* pParent)
     case 2: mxCbPDFA2b->set_active(true); // PDF/A-2a
         break;
     }
-    ToggleExportPDFAHdl( *mxCbPDFA2b );
-
-    mxCbExportFormFields->connect_toggled( LINK( this, ImpPDFTabGeneralPage, ToggleExportFormFieldsHdl ) );
-
-    // get the form values, for use with PDF/A-1 selection interface
-    mbTaggedPDFUserSelection = pParent->mbUseTaggedPDF;
-    mbExportFormFieldsUserSelection = pParent->mbExportFormFields;
 
-    if( !mxCbPDFA2b->get_active() )
+    // the ToggleExportPDFAHdl handler will read or write the *UserSelection variables based
+    // on the mxCbPDFA2b state, so we have to prepare the correct input state.
+    if (mxCbPDFA2b->get_active())
     {
-        // the value for PDF/A set by the ToggleExportPDFAHdl method called before
-        mxCbTaggedPDF->set_active( mbTaggedPDFUserSelection  );
-        mxCbExportFormFields->set_active( mbExportFormFieldsUserSelection );
+        mxCbTaggedPDF->set_active(pParent->mbUseTaggedPDFUserSelection);
+        mxCbExportFormFields->set_active(pParent->mbExportFormFieldsUserSelection);
     }
+    else
+    {
+        mbUseTaggedPDFUserSelection = pParent->mbUseTaggedPDFUserSelection;
+        mbExportFormFieldsUserSelection = pParent->mbExportFormFieldsUserSelection;
+    }
+    ToggleExportPDFAHdl( *mxCbPDFA2b );
+
+    mxCbExportFormFields->connect_toggled( LINK( this, ImpPDFTabGeneralPage, ToggleExportFormFieldsHdl ) );
 
     mxLbFormsFormat->set_active(static_cast<sal_uInt16>(pParent->mnFormsType));
     mxCbAllowDuplicateFieldNames->set_active( pParent->mbAllowDuplicateFieldNames );
-    mxFormsFrame->set_sensitive( pParent->mbExportFormFields );
 
     mxCbExportBookmarks->set_active( pParent->mbExportBookmarks );
 
@@ -643,17 +655,18 @@ void ImpPDFTabGeneralPage::GetFilterConfigItem( ImpPDFTabDialog* pParent )
     }
 
     pParent->mnPDFTypeSelection = 0;
+    pParent->mbUseTaggedPDF = mxCbTaggedPDF->get_active();
+    pParent->mbExportFormFields = mxCbExportFormFields->get_active();
+
     if( mxCbPDFA2b->get_active() )
-    {
         pParent->mnPDFTypeSelection = 2;
-        pParent->mbUseTaggedPDF =  mbTaggedPDFUserSelection;
-        pParent->mbExportFormFields = mbExportFormFieldsUserSelection;
-    }
     else
     {
-        pParent->mbUseTaggedPDF =  mxCbTaggedPDF->get_active();
-        pParent->mbExportFormFields = mxCbExportFormFields->get_active();
+        mbUseTaggedPDFUserSelection = pParent->mbUseTaggedPDF;
+        mbExportFormFieldsUserSelection = pParent->mbExportFormFields;
     }
+    pParent->mbUseTaggedPDFUserSelection = mbUseTaggedPDFUserSelection;
+    pParent->mbExportFormFieldsUserSelection = mbExportFormFieldsUserSelection;
 
     if( mxCbWatermark->get_active() )
         pParent->maWatermarkText = mxEdWatermark->get_text();
@@ -755,49 +768,46 @@ IMPL_LINK_NOARG(ImpPDFTabGeneralPage, ToggleAddStreamHdl, weld::ToggleButton&, v
 
 IMPL_LINK_NOARG(ImpPDFTabGeneralPage, ToggleExportPDFAHdl, weld::ToggleButton&, void)
 {
+    const bool bIsPDFA = mxCbPDFA2b->get_active();
+
     // set the security page status (and its controls as well)
     ImpPDFTabSecurityPage* pSecPage = mpParent ? mpParent->getSecurityPage() : nullptr;
     if (pSecPage)
-    {
-        pSecPage->ImplPDFASecurityControl(!mxCbPDFA2b->get_active());
-    }
+        pSecPage->ImplPDFASecurityControl(!bIsPDFA);
+
+    mxCbTaggedPDF->set_sensitive(!bIsPDFA);
+    mxCbExportFormFields->set_sensitive(!bIsPDFA);
+    mxFormsFrame->set_sensitive(!bIsPDFA);
 
-    // PDF/A-1 needs tagged PDF, so force disable the control, will be forced in pdfexport.
-    bool bPDFA1Sel = mxCbPDFA2b->get_active();
-    mxFormsFrame->set_sensitive(bPDFA1Sel);
-    if(bPDFA1Sel)
+    if (bIsPDFA)
     {
-        // store the values of subordinate controls
-        mbTaggedPDFUserSelection = mxCbTaggedPDF->get_active();
-        mxCbTaggedPDF->set_active(true);
-        mxCbTaggedPDF->set_sensitive(false);
+        // store the users selection of subordinate controls and set required PDF/A values
+        mbUseTaggedPDFUserSelection = mxCbTaggedPDF->get_active();
         mbExportFormFieldsUserSelection = mxCbExportFormFields->get_active();
+
+        mxCbTaggedPDF->set_active(true);
         mxCbExportFormFields->set_active(false);
-        mxCbExportFormFields->set_sensitive(false);
+
+        // if a password was set, inform the user that this will not be used
+        if (pSecPage && pSecPage->hasPassword())
+        {
+            std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xContainer.get(),
+                                                      VclMessageType::Warning, VclButtonsType::Ok,
+                                                      PDFFilterResId(STR_WARN_PASSWORD_PDFA)));
+            xBox->run();
+        }
     }
     else
     {
-        // retrieve the values of subordinate controls
-        mxCbTaggedPDF->set_sensitive(true);
-        mxCbTaggedPDF->set_active(mbTaggedPDFUserSelection);
+        // restore the users values of subordinate controls
+        mxCbTaggedPDF->set_active(mbUseTaggedPDFUserSelection);
         mxCbExportFormFields->set_active(mbExportFormFieldsUserSelection);
-        mxCbExportFormFields->set_sensitive(true);
     }
 
-    // PDF/A-2 doesn't allow launch action, so enable/disable the selection on
-    // Link page
+    // PDF/A doesn't allow launch action, so enable/disable the selection on Link page
     ImpPDFTabLinksPage* pLinksPage = mpParent ? mpParent->getLinksPage() : nullptr;
     if (pLinksPage)
-        pLinksPage->ImplPDFALinkControl(!mxCbPDFA2b->get_active());
-
-    // if a password was set, inform the user that this will not be used in PDF/A case
-    if( mxCbPDFA2b->get_active() && pSecPage && pSecPage->hasPassword() )
-    {
-        std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xContainer.get(),
-                                                  VclMessageType::Warning, VclButtonsType::Ok,
-                                                  PDFFilterResId(STR_WARN_PASSWORD_PDFA)));
-        xBox->run();
-    }
+        pLinksPage->ImplPDFALinkControl(!bIsPDFA);
 }
 
 /// The option features tab page
diff --git a/filter/source/pdf/impdialog.hxx b/filter/source/pdf/impdialog.hxx
index 6381c554bc47..c9d205a4a063 100644
--- a/filter/source/pdf/impdialog.hxx
+++ b/filter/source/pdf/impdialog.hxx
@@ -81,6 +81,7 @@ class ImpPDFTabDialog final : public SfxTabDialogController
     bool                        mbReduceImageResolution;
     sal_Int32                   mnMaxImageResolution;
     bool                        mbUseTaggedPDF;
+    bool                        mbUseTaggedPDFUserSelection;
     sal_Int32                   mnPDFTypeSelection;
     bool                        mbExportNotes;
     bool                        mbViewPDF;
@@ -93,6 +94,7 @@ class ImpPDFTabDialog final : public SfxTabDialogController
     bool                        mbAddStream;
     sal_Int32                   mnFormsType;
     bool                        mbExportFormFields;
+    bool                        mbExportFormFieldsUserSelection;
     bool                        mbAllowDuplicateFieldNames;
     bool                        mbExportBookmarks;
     bool                        mbExportHiddenSlides;
@@ -172,7 +174,7 @@ class ImpPDFTabGeneralPage : public SfxTabPage
 {
     friend class ImpPDFTabLinksPage;
 
-    bool                         mbTaggedPDFUserSelection;
+    bool                         mbUseTaggedPDFUserSelection;
     bool                         mbExportFormFieldsUserSelection;
     bool                         mbIsPresentation;
     bool                         mbIsSpreadsheet;
commit dc9bd8f552cc2960784ee9d2d0edf20810ed2a8c
Author:     Jan-Marek Glogowski <jan-marek.glogowski at extern.cib.de>
AuthorDate: Fri Aug 2 14:22:10 2019 +0000
Commit:     Jan-Marek Glogowski <jan-marek.glogowski at extern.cib.de>
CommitDate: Wed Aug 7 12:12:36 2019 +0200

    Fix build with enabled asserts
    
    Regression from commit 774a0185fb47 ("tdf#125475 sw: update
    SwTextFrames when SwTextLine cache shrinks").
    
    Change-Id: Iaab0ede4e993a8cebd56115d3345092529d48e3b

diff --git a/sw/source/core/bastyp/swcache.cxx b/sw/source/core/bastyp/swcache.cxx
index 69f5bc91d586..513381512a7d 100644
--- a/sw/source/core/bastyp/swcache.cxx
+++ b/sw/source/core/bastyp/swcache.cxx
@@ -299,7 +299,7 @@ void SwCache::DeleteObj( SwCacheObj *pObj )
         pObj->GetNext()->SetPrev( pObj->GetPrev() );
 
     m_aFreePositions.push_back( pObj->GetCachePos() );
-    assert(m_aCacheObjects[pObj->GetCachePos()].get() == pObj);
+    assert(m_aCacheObjects[pObj->GetCachePos()] == pObj);
     m_aCacheObjects[pObj->GetCachePos()] = nullptr;
     delete pObj;
 


More information about the Libreoffice-commits mailing list