[Libreoffice-commits] core.git: Branch 'feature/cib_contract3756' - include/sfx2 offapi/com sfx2/source sw/qa

Samuel Mehrbrodt (via logerrit) logerrit at kemper.freedesktop.org
Wed Oct 23 17:37:38 UTC 2019


 include/sfx2/sfxsids.hrc                         |    1 
 include/sfx2/viewsh.hxx                          |    1 
 offapi/com/sun/star/document/MediaDescriptor.idl |    6 ++
 offapi/com/sun/star/frame/XModel2.idl            |    1 
 sfx2/source/appl/appuno.cxx                      |   18 +++++++
 sfx2/source/doc/sfxbasemodel.cxx                 |    5 ++
 sfx2/source/view/viewsh.cxx                      |   53 +++++++++++++----------
 sw/qa/python/check_xmodel.py                     |    4 +
 8 files changed, 67 insertions(+), 22 deletions(-)

New commits:
commit 87c6f86b6a678911698e8951a28667ba7c953b7b
Author:     Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
AuthorDate: Tue Oct 22 15:58:31 2019 +0200
Commit:     Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
CommitDate: Wed Oct 23 19:36:44 2019 +0200

    Add document-level option to lock down printing
    
    Change-Id: I85694021d74be79293079d04d5ba1d9b48cfa557
    Reviewed-on: https://gerrit.libreoffice.org/81340
    Tested-by: Jenkins
    Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
    (cherry picked from commit d5d96e04ad8014f3e68351ccb54221d9610b565b)
    Reviewed-on: https://gerrit.libreoffice.org/81391
    Tested-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>

diff --git a/include/sfx2/sfxsids.hrc b/include/sfx2/sfxsids.hrc
index 0b5eeb73a32b..d323147ec456 100644
--- a/include/sfx2/sfxsids.hrc
+++ b/include/sfx2/sfxsids.hrc
@@ -266,6 +266,7 @@ class SvxSearchItem;
 #define SID_IS_REDACT_MODE                  (SID_SFX_START + 1733)
 #define SID_REDACTION_STYLE                 (SID_SFX_START + 1734)
 #define SID_DIALOG_PARENT                   (SID_SFX_START + 1735)
+#define SID_LOCK_PRINT                      (SID_SFX_START + 1736)
 
 //      SID_SFX_free_START                  (SID_SFX_START + 1737)
 //      SID_SFX_free_END                    (SID_SFX_START + 3999)
diff --git a/include/sfx2/viewsh.hxx b/include/sfx2/viewsh.hxx
index 525cc111d216..6a82b3cd8189 100644
--- a/include/sfx2/viewsh.hxx
+++ b/include/sfx2/viewsh.hxx
@@ -290,6 +290,7 @@ public:
     css::uno::Reference< css::datatransfer::clipboard::XClipboardNotifier > GetClipboardNotifier() const;
     bool isContentExtractionLocked();
     bool isExportLocked();
+    bool isPrintLocked();
 
     SAL_DLLPRIVATE SfxInPlaceClient* GetUIActiveIPClient_Impl() const;
     SAL_DLLPRIVATE void AddContextMenuInterceptor_Impl( const css::uno::Reference < css::ui::XContextMenuInterceptor >& xInterceptor );
diff --git a/offapi/com/sun/star/document/MediaDescriptor.idl b/offapi/com/sun/star/document/MediaDescriptor.idl
index f7c248d85803..b7ff7c50356a 100644
--- a/offapi/com/sun/star/document/MediaDescriptor.idl
+++ b/offapi/com/sun/star/document/MediaDescriptor.idl
@@ -576,6 +576,12 @@ service MediaDescriptor
         @since LibreOffice 6.4
      */
     [optional,property] boolean LockExport;
+
+    /** Setting this option will disable all print functions (including Printer setup)
+
+        @since LibreOffice 6.4
+     */
+    [optional,property] boolean LockPrint;
 };
 
 
diff --git a/offapi/com/sun/star/frame/XModel2.idl b/offapi/com/sun/star/frame/XModel2.idl
index 6e6e90666ec0..4424193cdd0f 100644
--- a/offapi/com/sun/star/frame/XModel2.idl
+++ b/offapi/com/sun/star/frame/XModel2.idl
@@ -145,6 +145,7 @@ interface XModel2 : com::sun::star::frame::XModel
                 <li>com::sun::star::document::MediaDescriptor::EncryptionData</li>
                 <li>com::sun::star::document::MediaDescriptor::LockContentExtraction</li>
                 <li>com::sun::star::document::MediaDescriptor::LockExport</li>
+                <li>com::sun::star::document::MediaDescriptor::LockPrint</li>
             </ul>
 
         @throws com::sun::star::lang::IllegalArgumentException When trying to set an unsupported property
diff --git a/sfx2/source/appl/appuno.cxx b/sfx2/source/appl/appuno.cxx
index 3d0a4b156294..bab87d847644 100644
--- a/sfx2/source/appl/appuno.cxx
+++ b/sfx2/source/appl/appuno.cxx
@@ -171,6 +171,7 @@ static char const sFilterProvider[] = "FilterProvider";
 static char const sImageFilter[] = "ImageFilter";
 static char const sLockContentExtraction[] = "LockContentExtraction";
 static char const sLockExport[] = "LockExport";
+static char const sLockPrint[] = "LockPrint";
 
 static bool isMediaDescriptor( sal_uInt16 nSlotId )
 {
@@ -863,6 +864,14 @@ void TransformParameters( sal_uInt16 nSlotId, const uno::Sequence<beans::Propert
                 if (bOK)
                     rSet.Put( SfxBoolItem( SID_LOCK_EXPORT, bVal ) );
             }
+            else if (aName == sLockPrint)
+            {
+                bool bVal = false;
+                bool bOK = (rProp.Value >>= bVal);
+                DBG_ASSERT( bOK, "invalid type for LockPrint" );
+                if (bOK)
+                    rSet.Put( SfxBoolItem( SID_LOCK_PRINT, bVal ) );
+            }
 #ifdef DBG_UTIL
             else
                 --nFoundArgs;
@@ -1084,6 +1093,8 @@ void TransformItems( sal_uInt16 nSlotId, const SfxItemSet& rSet, uno::Sequence<b
                 nAdditional++;
             if ( rSet.GetItemState( SID_LOCK_EXPORT ) == SfxItemState::SET )
                 nAdditional++;
+            if ( rSet.GetItemState( SID_LOCK_PRINT ) == SfxItemState::SET )
+                nAdditional++;
 
             // consider additional arguments
             nProps += nAdditional;
@@ -1245,6 +1256,8 @@ void TransformItems( sal_uInt16 nSlotId, const SfxItemSet& rSet, uno::Sequence<b
                         continue;
                     if ( nId == SID_LOCK_EXPORT )
                         continue;
+                    if ( nId == SID_LOCK_PRINT )
+                        continue;
                }
 
                 OString aDbg = "Unknown item detected: " + OString::number(static_cast<sal_Int32>(nId));
@@ -1649,6 +1662,11 @@ void TransformItems( sal_uInt16 nSlotId, const SfxItemSet& rSet, uno::Sequence<b
             pValue[nActProp].Name = sLockExport;
             pValue[nActProp++].Value <<= static_cast<const SfxBoolItem*>(pItem)->GetValue() ;
         }
+        if ( rSet.GetItemState( SID_LOCK_PRINT, false, &pItem ) == SfxItemState::SET )
+        {
+            pValue[nActProp].Name = sLockPrint;
+            pValue[nActProp++].Value <<= static_cast<const SfxBoolItem*>(pItem)->GetValue() ;
+        }
     }
 
     rArgs = aSequ;
diff --git a/sfx2/source/doc/sfxbasemodel.cxx b/sfx2/source/doc/sfxbasemodel.cxx
index b858ac6707e8..9b7b71a0e095 100644
--- a/sfx2/source/doc/sfxbasemodel.cxx
+++ b/sfx2/source/doc/sfxbasemodel.cxx
@@ -1093,6 +1093,11 @@ void SAL_CALL SfxBaseModel::setArgs(const Sequence<beans::PropertyValue>& aArgs)
             rArg.Value >>= bValue;
             pMedium->GetItemSet()->Put(SfxBoolItem(SID_LOCK_EXPORT, bValue));
         }
+        else if (rArg.Name == "LockPrint")
+        {
+            rArg.Value >>= bValue;
+            pMedium->GetItemSet()->Put(SfxBoolItem(SID_LOCK_PRINT, bValue));
+        }
         else
         {
             throw lang::IllegalArgumentException("Setting property not supported: " + rArg.Name,
diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx
index e8638badac64..123aa18dcb58 100644
--- a/sfx2/source/view/viewsh.cxx
+++ b/sfx2/source/view/viewsh.cxx
@@ -700,32 +700,34 @@ void SfxViewShell::GetState_Impl( SfxItemSet &rSet )
             case SID_SETUPPRINTER:
             case SID_PRINTER_NAME:
             {
-                bool bEnabled = !Application::GetSettings().GetMiscSettings().GetDisablePrinting();
-                if ( bEnabled )
+                if (Application::GetSettings().GetMiscSettings().GetDisablePrinting() || isPrintLocked())
                 {
-                    SfxPrinter *pPrinter = GetPrinter();
+                    rSet.DisableItem(nSID);
+                    break;
+                }
+
+                SfxPrinter *pPrinter = GetPrinter();
 
-                    if ( SID_PRINTDOCDIRECT == nSID )
+                if ( SID_PRINTDOCDIRECT == nSID )
+                {
+                    OUString aPrinterName;
+                    if ( pPrinter != nullptr )
+                        aPrinterName = pPrinter->GetName();
+                    else
+                        aPrinterName = Printer::GetDefaultPrinterName();
+                    if ( !aPrinterName.isEmpty() )
                     {
-                        OUString aPrinterName;
-                        if ( pPrinter != nullptr )
-                            aPrinterName = pPrinter->GetName();
-                        else
-                            aPrinterName = Printer::GetDefaultPrinterName();
-                        if ( !aPrinterName.isEmpty() )
-                        {
-                            uno::Reference < frame::XFrame > xFrame( pFrame->GetFrame().GetFrameInterface() );
+                        uno::Reference < frame::XFrame > xFrame( pFrame->GetFrame().GetFrameInterface() );
 
-                            OUStringBuffer aBuffer( 60 );
-                            aBuffer.append( vcl::CommandInfoProvider::GetLabelForCommand(
-                                ".uno:PrintDefault",
-                                vcl::CommandInfoProvider::GetModuleIdentifier( xFrame ) ) );
-                            aBuffer.append( " (" );
-                            aBuffer.append( aPrinterName );
-                            aBuffer.append(')');
+                        OUStringBuffer aBuffer( 60 );
+                        aBuffer.append( vcl::CommandInfoProvider::GetLabelForCommand(
+                            ".uno:PrintDefault",
+                            vcl::CommandInfoProvider::GetModuleIdentifier( xFrame ) ) );
+                        aBuffer.append( " (" );
+                        aBuffer.append( aPrinterName );
+                        aBuffer.append(')');
 
-                            rSet.Put( SfxStringItem( SID_PRINTDOCDIRECT, aBuffer.makeStringAndClear() ) );
-                        }
+                        rSet.Put( SfxStringItem( SID_PRINTDOCDIRECT, aBuffer.makeStringAndClear() ) );
                     }
                 }
                 break;
@@ -1765,6 +1767,15 @@ bool SfxViewShell::isExportLocked()
     return aArgs.getOrDefault("LockExport", false);
 }
 
+bool SfxViewShell::isPrintLocked()
+{
+    Reference<XModel> xModel = GetCurrentDocument();
+    if (!xModel.is())
+        return false;
+    comphelper::NamedValueCollection aArgs(xModel->getArgs());
+    return aArgs.getOrDefault("LockPrint", false);
+}
+
 Reference < XController > SfxViewShell::GetController() const
 {
     return pImpl->m_pController.get();
diff --git a/sw/qa/python/check_xmodel.py b/sw/qa/python/check_xmodel.py
index bcceed6acd77..5b1f8722016b 100644
--- a/sw/qa/python/check_xmodel.py
+++ b/sw/qa/python/check_xmodel.py
@@ -34,7 +34,8 @@ class TestXModel(unittest.TestCase):
         p2 = PropertyValue(Name="SuggestedSaveAsDir", Value="/my/dir")
         p3 = PropertyValue(Name="LockContentExtraction", Value=True)
         p4 = PropertyValue(Name="LockExport", Value=True)
-        xDoc.setArgs([p1, p2, p3, p4])
+        p5 = PropertyValue(Name="LockPrint", Value=True)
+        xDoc.setArgs([p1, p2, p3, p4, p5])
 
         # Make sure that all properties are returned with getArgs()
         args = xDoc.getArgs()
@@ -42,6 +43,7 @@ class TestXModel(unittest.TestCase):
         self.assertTrue(p2 in args)
         self.assertTrue(p3 in args)
         self.assertTrue(p4 in args)
+        self.assertTrue(p5 in args)
 
         xDoc.close(True)
 


More information about the Libreoffice-commits mailing list