desktop/Library_sofficeapp.mk              |    6 
 desktop/source/lib/init.cxx                |   34 ---
 oox/source/export/drawingml.cxx            |    2 
 solenv/bin/native-code.py                  |    2 
 sw/uiconfig/swriter/ui/wordcount-mobile.ui |   53 +++++
 vcl/Library_vcl.mk                         |    1 
 vcl/inc/ios/iosinst.hxx                    |    3 
 vcl/ios/clipboard.cxx                      |  257 -----------------------------
 vcl/ios/clipboard.hxx                      |  122 -------------
 9 files changed, 57 insertions(+), 423 deletions(-)

New commits:
commit c7f033650ccf60135c12e9562044c56977117510
Author:     Skyler Grey <[email protected]>
AuthorDate: Mon Nov 18 14:20:29 2024 +0000
Commit:     Andras Timar <[email protected]>
CommitDate: Fri Feb 14 13:00:01 2025 +0100

    fix(ooxmlexport): Prevent unknown media type crash
    
    To determine the extension of a media file, we just take whatever parts
    of the URL were left after the final dot.
    
    Normally this is something normal such as `mp4`, `mp3` or suchlike
    
    Unfortunately, sometimes (such as when in Collabora Online) this URL
    would is actually be something Uno-y, leaving an extension like
    
       Package:Media
    
    That's no good, because in Zip files we can't have colons in our names,
    at least according to our Zip file name checker, which looks through and
    denies access to any file names that have colons in
    
        bool OStorageHelper::IsValidZipEntryFileName( std::u16string_view 
aName, bool bSlashAllowed )
        {
            long nDots{0};
            for ( size_t i = 0; i < aName.size(); i++ )
            {
                switch ( aName[i] )
                {
                    // ------------------ 8< cut ------------------
                    case ':':
                        return false;
    
    Promptly causing us not to open a file output stream...
    
        if ( aElementName.isEmpty() || 
!::comphelper::OStorageHelper::IsValidZipEntryFileName( aElementName, false ) )
            throw lang::IllegalArgumentException( THROW_WHERE "Unexpected entry 
name syntax.", uno::Reference< uno::XInterface >(), 1 );
    
        -> leading to implOpenSubStorage failing to set xSubXStorage...
    
        if( mxStorage.is() ) try
        {
            // XStorage::isStorageElement may throw various exceptions...
            if( mxStorage->isStorageElement( rElementName ) )
                xSubXStorage = mxStorage->openStorageElement(
                    rElementName, css::embed::ElementModes::READ );
        } catch ... { ... }
    
    ...and eventually to us never having an output stream in the first place...
    
        Reference<XOutputStream> xOutStream = 
mpFB->openFragmentStream(sFileName, aMimeType);
    
        gdb$ print xOutStream
        $1 = empty uno::Reference
    
    ...and crashing the code that tries to copy to that stream.
    
    The upshot of this bug is that any videos inserted with Collabora Online
    (or presumably similar .uno command use) crash LO when you later try to
    save your .pptx
    
    The quick fix here is to replace colons with another character, which is
    what I've done here. Future followup patches could do other sensible
    things like stopping crashes if we can't open an output stream for
    whatever reason or figuring out what to do with names that aren't
    permitted for reasons other than colon use.
    
    Change-Id: I9113b272d29f74882dc25bf6e74306bd9ecd58a2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176719
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Szymon Kłos <[email protected]>

diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index d3bc81b08b26..754ae8bd7c32 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -1639,7 +1639,7 @@ void DrawingML::WriteMediaNonVisualProperties(const 
css::uno::Reference<css::dra
     const OUString& rURL(pMediaObj->getURL());
     int nLastDot = rURL.lastIndexOf('.');
     if (nLastDot >= 0)
-        aExtension = rURL.copy(nLastDot);
+        aExtension = rURL.copy(nLastDot).replace(':', '_'); // Colons are not 
allowed in Zip entry file names, see OStorageHelper::IsValidZipEntryFileName
 
     bool bEmbed = rURL.startsWith("vnd.sun.star.Package:");
     Relationship eMediaType = Relationship::VIDEO;
commit 93f1326bc45d430fd3df2ad129231c5531386716
Author:     Skyler Grey <[email protected]>
AuthorDate: Thu Nov 21 15:01:59 2024 +0000
Commit:     Andras Timar <[email protected]>
CommitDate: Fri Feb 14 13:00:01 2025 +0100

    fix(wordcount): Add docComments on mobile
    
    In I29ca811065cce83f9c8630f79a2b78c2c3fe0da1, we added a widget for
    docComments to the word counter UI. Unfortunately, we didn't properly
    handle the mobile case, leading to mobile crashing over it missing the
    label to display the result whenever the word count dialog was opened.
    
    Change-Id: Ib94c8db5beb88d0b71035081680ce25a74774d08
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176945
    Reviewed-by: Szymon Kłos <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/sw/uiconfig/swriter/ui/wordcount-mobile.ui 
b/sw/uiconfig/swriter/ui/wordcount-mobile.ui
index de6ef6f5e9cd..82b488cbbe7c 100644
--- a/sw/uiconfig/swriter/ui/wordcount-mobile.ui
+++ b/sw/uiconfig/swriter/ui/wordcount-mobile.ui
@@ -58,7 +58,7 @@
           </packing>
         </child>
         <child>
-          <!-- n-columns=2 n-rows=12 -->
+          <!-- n-columns=2 n-rows=13 -->
           <object class="GtkGrid" id="grid1">
             <property name="visible">True</property>
             <property name="can-focus">False</property>
@@ -631,6 +631,57 @@
                 <property name="top-attach">8</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkBox">
+                <property name="visible">True</property>
+                <property name="can-focus">False</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkLabel" id="commentslabel">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="label" translatable="yes" 
context="wordcount-mobile|comments">Comments</property>
+                    <property name="xalign">1</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">12</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkBox">
+                <property name="visible">True</property>
+                <property name="can-focus">False</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkLabel" id="docComments">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="halign">end</property>
+                    <property name="hexpand">True</property>
+                    <property name="label">            0</property>
+                    <property name="justify">right</property>
+                    <property name="xalign">1</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">12</property>
+              </packing>
+            </child>
             <child>
               <placeholder/>
             </child>
commit 59ae3f8c27c512e826f421f16fe659ecf15a2a48
Author:     Skyler Grey <[email protected]>
AuthorDate: Wed Nov 20 16:13:25 2024 +0000
Commit:     Andras Timar <[email protected]>
CommitDate: Fri Feb 14 13:00:01 2025 +0100

    fix(iOS): Remove missed clipboard method
    
    In I49671a0bdbd1e1699253c9e710366c1a860ca38d, we cleaned up the old
    obsolete iOS clipboard code. Unfortunately, we missed removing a method
    in our header files elsewhere. Worse, while we can build with a missing
    method we aren't able to package testflight builds for iOS with it,
    leading to everything working until the packaging step which fails.
    
    Change-Id: I47f8fbb6762d82da449886798f0fb7eacf76047a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176865
    Reviewed-by: Caolán McNamara <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/vcl/inc/ios/iosinst.hxx b/vcl/inc/ios/iosinst.hxx
index 63182bcd0c0a..aef3ea79c2d2 100644
--- a/vcl/inc/ios/iosinst.hxx
+++ b/vcl/inc/ios/iosinst.hxx
@@ -41,9 +41,6 @@ public:
 
     SalSystem* CreateSalSystem() override;
 
-    css::uno::Reference<css::uno::XInterface>
-    CreateClipboard(const css::uno::Sequence<css::uno::Any>& i_rArguments) 
override;
-
     void GetWorkArea(AbsoluteScreenPixelRectangle& rRect);
     SalFrame* CreateFrame(SalFrame* pParent, SalFrameStyleFlags nStyle) 
override;
     SalFrame* CreateChildFrame(SystemParentData* pParent, SalFrameStyleFlags 
nStyle) override;
commit c250432b5f3a2af09a04bbb2e67434053254720e
Author:     Skyler Grey <[email protected]>
AuthorDate: Fri Nov 8 17:53:47 2024 +0000
Commit:     Andras Timar <[email protected]>
CommitDate: Fri Feb 14 13:00:01 2025 +0100

    feat(iOS): Allow use of desktop clipboard code
    
    Historically, iOS has used pasteboard code instead of the normal
    clipboard code, forming a different clipboard flow for the Collabora
    Online app for iOS. This is "not ideal" for consistency in clipboard
    behavior between iOS and other platforms, so we're switching iOS to use
    the same clipboard APIs as everywhere else. This means that we need this
    desktop clipboard code to be compiled into iOS.
    
    Change-Id: I42567ad64641913817a26d1494858393501b6503
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176542
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Miklos Vajna <[email protected]>

diff --git a/desktop/Library_sofficeapp.mk b/desktop/Library_sofficeapp.mk
index cc39ccd12f92..8eb11fe42e37 100644
--- a/desktop/Library_sofficeapp.mk
+++ b/desktop/Library_sofficeapp.mk
@@ -138,13 +138,11 @@ ifneq ($(filter $(OS),ANDROID iOS MACOSX WNT),)
 $(eval $(call gb_Library_add_exception_objects,sofficeapp,\
        desktop/source/lib/init \
        desktop/source/lib/lokinteractionhandler \
-       $(if $(filter-out $(OS),iOS), \
-               desktop/source/lib/lokclipboard) \
+       desktop/source/lib/lokclipboard \
        $(if $(filter $(OS),ANDROID), \
                desktop/source/lib/lokandroid) \
 ))
-$(if $(filter-out $(OS),IOS), \
-    $(eval $(call 
gb_Library_set_componentfile,sofficeapp,desktop/lokclipboard,services)))
+$(eval $(call 
gb_Library_set_componentfile,sofficeapp,desktop/lokclipboard,services))
 else
 ifneq ($(filter TRUE,$(USING_X11) $(DISABLE_GUI))($filter EMSCRIPTEN,$(OS)),)
 $(eval $(call gb_Library_add_exception_objects,sofficeapp,\
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 236fe1402b90..ee30fc41147a 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -1352,8 +1352,6 @@ ITiledRenderable* 
getTiledRenderable(LibreOfficeKitDocument* pThis)
     return dynamic_cast<ITiledRenderable*>(pDocument->mxComponent.get());
 }
 
-#ifndef IOS
-
 /*
  * Unfortunately clipboard creation using UNO is insanely baroque.
  * we also need to ensure that this works for the first view which
@@ -1375,8 +1373,6 @@ rtl::Reference<LOKClipboard> 
forceSetClipboardForCurrentView(LibreOfficeKitDocum
     return xClip;
 }
 
-#endif
-
 const vcl::Font* FindFont(std::u16string_view rFontName)
 {
     SfxObjectShell* pDocSh = SfxObjectShell::Current();
@@ -1554,9 +1550,7 @@ LibLODocument_Impl::LibLODocument_Impl(uno::Reference 
<css::lang::XComponent> xC
     }
     pClass = m_pDocumentClass.get();
 
-#ifndef IOS
     forceSetClipboardForCurrentView(this);
-#endif
 }
 
 LibLODocument_Impl::~LibLODocument_Impl()
@@ -2334,12 +2328,10 @@ bool CallbackFlushHandler::processWindowEvent(int type, 
CallbackData& aCallbackD
             return false;
         }
 
-#ifndef IOS
         auto xClip = forceSetClipboardForCurrentView(m_pDocument);
 
         uno::Reference<datatransfer::clipboard::XClipboard> xClipboard(xClip);
         pWindow->SetClipboard(xClipboard);
-#endif
     }
     else if (aAction == "size_changed")
     {
@@ -5920,18 +5912,6 @@ static int doc_getClipboard(LibreOfficeKitDocument* 
pThis,
                             size_t     **pOutSizes,
                             char      ***pOutStreams)
 {
-#ifdef IOS
-    (void) pThis;
-    (void) pMimeTypes;
-    (void) pOutCount;
-    (void) pOutMimeTypes;
-    (void) pOutSizes;
-    (void) pOutStreams;
-
-    assert(!"doc_getClipboard should not be called on iOS");
-
-    return 0;
-#else
     comphelper::ProfileZone aZone("doc_getClipboard");
 
     SolarMutexGuard aGuard;
@@ -6011,7 +5991,6 @@ static int doc_getClipboard(LibreOfficeKitDocument* pThis,
     }
 
     return 1;
-#endif
 }
 
 static int doc_setClipboard(LibreOfficeKitDocument* pThis,
@@ -6020,13 +5999,6 @@ static int doc_setClipboard(LibreOfficeKitDocument* 
pThis,
                             const size_t  *pInSizes,
                             const char   **pInStreams)
 {
-#ifdef IOS
-    (void) pThis;
-    (void) nInCount;
-    (void) pInMimeTypes;
-    (void) pInSizes;
-    (void) pInStreams;
-#else
     comphelper::ProfileZone aZone("doc_setClipboard");
 
     SolarMutexGuard aGuard;
@@ -6051,7 +6023,7 @@ static int doc_setClipboard(LibreOfficeKitDocument* pThis,
         SetLastExceptionMsg(u"Document doesn't support this mime type"_ustr);
         return false;
     }
-#endif
+
     return true;
 }
 
@@ -6847,11 +6819,7 @@ static int 
doc_createViewWithOptions(LibreOfficeKitDocument* pThis,
 
     
vcl::lok::numberOfViewsChanged(SfxLokHelper::getViewsCount(pDocument->mnDocumentId));
 
-#ifdef IOS
-    (void) pThis;
-#else
     forceSetClipboardForCurrentView(pThis);
-#endif
 
     return nId;
 }
diff --git a/solenv/bin/native-code.py b/solenv/bin/native-code.py
index 20372dee3aea..9b6344b76ea6 100755
--- a/solenv/bin/native-code.py
+++ b/solenv/bin/native-code.py
@@ -127,7 +127,7 @@ core_constructor_list = [
     "com_sun_star_comp_dba_ODatabaseSource",
     "com_sun_star_comp_dba_ORowSet_get_implementation",
 # desktop/lokclipboard.component
-    ("desktop_LOKClipboard_get_implementation", "#ifndef IOS"),
+    "desktop_LOKClipboard_get_implementation",
 # drawinglayer/drawinglayer.component
     "drawinglayer_XPrimitive2DRenderer",
 # embeddedobj/util/embobj.component
commit 7a1b59cbfbe3537532274e661ffcb282ed554715
Author:     Skyler Grey <[email protected]>
AuthorDate: Tue Nov 12 13:21:08 2024 +0000
Commit:     Andras Timar <[email protected]>
CommitDate: Fri Feb 14 13:00:01 2025 +0100

    chore(iOS): Cleanup old iOS pasteboard code
    
    Since as we're switching to handling the clipboard the same in iOS as
    everywhere else, this old pasteboard code is no longer needed
    
    Change-Id: I49671a0bdbd1e1699253c9e710366c1a860ca38d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176543
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Miklos Vajna <[email protected]>

diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index 420024cc2ab2..199792d2feba 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -711,7 +711,6 @@ $(eval $(call gb_Library_add_objcxxobjects,vcl,\
 $(eval $(call gb_Library_add_exception_objects,vcl,\
     vcl/ios/iosinst \
     vcl/ios/dummies \
-    vcl/ios/clipboard \
     vcl/ios/salios \
     vcl/ios/iOSTransferable \
     vcl/ios/DataFlavorMapping \
diff --git a/vcl/ios/clipboard.cxx b/vcl/ios/clipboard.cxx
deleted file mode 100644
index 109f744e87c8..000000000000
--- a/vcl/ios/clipboard.cxx
+++ /dev/null
@@ -1,257 +0,0 @@
-/* -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; 
fill-column: 100 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include "ios/iosinst.hxx"
-#include "quartz/utils.h"
-
-#include "clipboard.hxx"
-
-#include "DataFlavorMapping.hxx"
-#include "iOSTransferable.hxx"
-#include <com/sun/star/datatransfer/MimeContentTypeFactory.hpp>
-#include <com/sun/star/lang/IllegalArgumentException.hpp>
-#include <comphelper/processfactory.hxx>
-#include <cppuhelper/supportsservice.hxx>
-
-@implementation PasteboardChangedEventListener
-
-- (PasteboardChangedEventListener*)initWithiOSClipboard:(iOSClipboard*)pcb
-{
-    self = [super init];
-
-    if (self)
-    {
-        // Just to be safe, set clipboard to a nullptr to ignore any
-        // synchronous callbacks that might occur when adding the observer
-        piOSClipboard = nullptr;
-
-        [[NSNotificationCenter defaultCenter] addObserver:self
-                                                 
selector:@selector(pasteboardChanged:)
-                                                     
name:UIPasteboardChangedNotification
-                                                   object:[UIPasteboard 
generalPasteboard]];
-
-        // According to following, no UIPasteboardChangedNotification
-        // notifications are received when an app is not active. So, post the
-        // notification so that the LibreOffice vcl/ios code can handle any
-        // clipboard changes:
-        //   
https://stackoverflow.com/questions/4240087/receiving-uipasteboard-generalpasteboard-notification-while-in-the-background
-        // Note: UIApplicationDidBecomeActiveNotification is never sent when
-        // running in Mac Catalyst so listen for UISceneDidActivateNotification
-        // instead.
-        [[NSNotificationCenter defaultCenter] addObserver:self
-                                                 
selector:@selector(pasteboardChanged:)
-                                                     
name:UISceneDidActivateNotification
-                                                   object:nil];
-
-        piOSClipboard = pcb;
-    }
-
-    return self;
-}
-
-- (void)pasteboardChanged:(NSNotification*)aNotification
-{
-    if (piOSClipboard)
-        piOSClipboard->contentsChanged();
-}
-
-- (void)disposing
-{
-    piOSClipboard = nullptr;
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-@end
-
-iOSClipboard::iOSClipboard()
-    : WeakComponentImplHelper<XSystemClipboard, XServiceInfo>(m_aMutex)
-{
-    auto xContext = comphelper::getProcessComponentContext();
-
-    mrXMimeCntFactory = 
css::datatransfer::MimeContentTypeFactory::create(xContext);
-
-    mpDataFlavorMapper.reset(new DataFlavorMapper());
-
-    mnPasteboardChangeCount = 0;
-    mpPasteboardChangedEventListener =
-        [[PasteboardChangedEventListener alloc] initWithiOSClipboard:this];
-}
-
-iOSClipboard::~iOSClipboard()
-{
-    [mpPasteboardChangedEventListener disposing];
-    [mpPasteboardChangedEventListener release];
-}
-
-css::uno::Reference<css::datatransfer::XTransferable> SAL_CALL 
iOSClipboard::getContents()
-{
-    osl::MutexGuard aGuard(m_aMutex);
-
-    return css::uno::Reference<css::datatransfer::XTransferable>(
-        new iOSTransferable(mrXMimeCntFactory, mpDataFlavorMapper));
-}
-
-void SAL_CALL iOSClipboard::setContents(
-    const css::uno::Reference<css::datatransfer::XTransferable>& xTransferable,
-    const css::uno::Reference<css::datatransfer::clipboard::XClipboardOwner>& 
/*xClipboardOwner*/)
-{
-    NSArray* types = xTransferable.is() ? 
mpDataFlavorMapper->flavorSequenceToTypesArray(
-                                              
xTransferable->getTransferDataFlavors())
-                                        : [NSArray array];
-
-    osl::ClearableMutexGuard aGuard(m_aMutex);
-
-    NSMutableDictionary* dict = [NSMutableDictionary dictionaryWithCapacity:1];
-    NSArray* array = @[ dict ];
-
-    for (sal_uInt32 i = 0; i < [types count]; ++i)
-    {
-        DataProviderPtr_t dp = mpDataFlavorMapper->getDataProvider(types[i], 
xTransferable);
-
-        if (dp.get() != nullptr)
-        {
-            NSData* pBoardData = (NSData*)dp->getSystemData();
-            dict[types[i]] = pBoardData;
-        }
-    }
-    SAL_INFO("vcl.ios.clipboard", "Setting pasteboard items: " << 
NSDictionaryKeysToOUString(dict));
-    [[UIPasteboard generalPasteboard] setItems:array options:@{}];
-
-    // We don't keep a copy of the clipboard contents around in-process, so 
fire the lost clipboard
-    // ownership event right away.
-    // fireLostClipboardOwnershipEvent(xClipboardOwner, xTransferable);
-
-    // fireClipboardChangedEvent(xTransferable);
-}
-
-OUString SAL_CALL iOSClipboard::getName() { return OUString(); }
-
-sal_Int8 SAL_CALL iOSClipboard::getRenderingCapabilities() { return 0; }
-
-void SAL_CALL iOSClipboard::addClipboardListener(
-    const 
css::uno::Reference<css::datatransfer::clipboard::XClipboardListener>& listener)
-{
-    osl::MutexGuard aGuard(m_aMutex);
-
-    if (!listener.is())
-        throw css::lang::IllegalArgumentException(
-            "empty reference", 
static_cast<css::datatransfer::clipboard::XClipboardEx*>(this), 1);
-
-    mClipboardListeners.push_back(listener);
-}
-
-void SAL_CALL iOSClipboard::removeClipboardListener(
-    const 
css::uno::Reference<css::datatransfer::clipboard::XClipboardListener>& listener)
-{
-    osl::MutexGuard aGuard(m_aMutex);
-
-    if (!listener.is())
-        throw css::lang::IllegalArgumentException(
-            "empty reference", 
static_cast<css::datatransfer::clipboard::XClipboardEx*>(this), 1);
-
-    mClipboardListeners.remove(listener);
-}
-
-void iOSClipboard::fireClipboardChangedEvent(
-    css::uno::Reference<css::datatransfer::XTransferable> xNewContents)
-{
-    osl::ClearableMutexGuard aGuard(m_aMutex);
-
-    
std::list<css::uno::Reference<css::datatransfer::clipboard::XClipboardListener>>
 listeners(
-        mClipboardListeners);
-    css::datatransfer::clipboard::ClipboardEvent aEvent;
-
-    if (!listeners.empty())
-    {
-        aEvent = css::datatransfer::clipboard::ClipboardEvent(getXWeak(), 
xNewContents);
-    }
-
-    aGuard.clear();
-
-    while (!listeners.empty())
-    {
-        if (listeners.front().is())
-        {
-            try
-            {
-                listeners.front()->changedContents(aEvent);
-            }
-            catch (const css::uno::RuntimeException&)
-            {
-            }
-        }
-        listeners.pop_front();
-    }
-}
-
-void iOSClipboard::fireLostClipboardOwnershipEvent(
-    css::uno::Reference<css::datatransfer::clipboard::XClipboardOwner> const& 
oldOwner,
-    css::uno::Reference<css::datatransfer::XTransferable> const& oldContent)
-{
-    assert(oldOwner.is());
-
-    try
-    {
-        
oldOwner->lostOwnership(static_cast<css::datatransfer::clipboard::XClipboardEx*>(this),
-                                oldContent);
-    }
-    catch (const css::uno::RuntimeException&)
-    {
-    }
-}
-
-OUString SAL_CALL iOSClipboard::getImplementationName()
-{
-    return OUString("com.sun.star.datatransfer.clipboard.iOSClipboard");
-}
-
-sal_Bool SAL_CALL iOSClipboard::supportsService(const OUString& ServiceName)
-{
-    return cppu::supportsService(this, ServiceName);
-}
-
-css::uno::Sequence<OUString> SAL_CALL iOSClipboard::getSupportedServiceNames()
-{
-    return { OUString("com.sun.star.datatransfer.clipboard.SystemClipboard") };
-}
-
-void iOSClipboard::contentsChanged()
-{
-    NSInteger nPasteboardChangeCount = [[UIPasteboard generalPasteboard] 
changeCount];
-    if (mnPasteboardChangeCount != nPasteboardChangeCount)
-    {
-        // cool#5839 fire a clipboard changed event in the iOS app
-        // A clipboard changed event needs to be fired whenever the
-        // native general pasteboard changes. Otherwise, if the clipboard
-        // is empty when a document is opened, the Paste and Paste Special
-        // menu items and toolbar buttons will be disabled and will never
-        // be enabled even after something has been copied to the general
-        // pasteboard.
-        mnPasteboardChangeCount = nPasteboardChangeCount;
-        fireClipboardChangedEvent(getContents());
-    }
-}
-
-css::uno::Reference<css::uno::XInterface>
-IosSalInstance::CreateClipboard(const css::uno::Sequence<css::uno::Any>&)
-{
-    return getXWeak(new iOSClipboard());
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/ios/clipboard.hxx b/vcl/ios/clipboard.hxx
deleted file mode 100644
index e1133f0ba0bf..000000000000
--- a/vcl/ios/clipboard.hxx
+++ /dev/null
@@ -1,122 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; 
fill-column: 100 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#pragma once
-
-#include "DataFlavorMapping.hxx"
-#include <rtl/ustring.hxx>
-#include <sal/types.h>
-#include <cppuhelper/compbase.hxx>
-#include <com/sun/star/datatransfer/XTransferable.hpp>
-#include <com/sun/star/datatransfer/clipboard/XClipboardEx.hpp>
-#include <com/sun/star/datatransfer/clipboard/XClipboardOwner.hpp>
-#include <com/sun/star/datatransfer/clipboard/XClipboardListener.hpp>
-#include <com/sun/star/datatransfer/clipboard/XClipboardNotifier.hpp>
-#include <com/sun/star/datatransfer/clipboard/XSystemClipboard.hpp>
-#include <com/sun/star/datatransfer/XMimeContentTypeFactory.hpp>
-#include <com/sun/star/datatransfer/clipboard/XFlushableClipboard.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <cppuhelper/basemutex.hxx>
-#include <com/sun/star/lang/XMultiComponentFactory.hpp>
-
-#include <list>
-
-#include <premac.h>
-#import <UIKit/UIKit.h>
-#include <postmac.h>
-
-class iOSClipboard;
-
-@interface PasteboardChangedEventListener : NSObject
-{
-    iOSClipboard* piOSClipboard;
-}
-- (PasteboardChangedEventListener*)initWithiOSClipboard:(iOSClipboard*)pcb;
-- (void)pasteboardChanged:(NSNotification*)aNotification;
-- (void)disposing;
-@end
-
-class iOSClipboard
-    : public ::cppu::BaseMutex,
-      public 
::cppu::WeakComponentImplHelper<css::datatransfer::clipboard::XSystemClipboard,
-                                             css::lang::XServiceInfo>
-{
-public:
-    iOSClipboard();
-
-    virtual ~iOSClipboard() override;
-    iOSClipboard(const iOSClipboard&) = delete;
-    iOSClipboard& operator=(const iOSClipboard&) = delete;
-
-    // XClipboard
-
-    css::uno::Reference<css::datatransfer::XTransferable> SAL_CALL 
getContents() override;
-
-    void SAL_CALL setContents(
-        const css::uno::Reference<css::datatransfer::XTransferable>& 
xTransferable,
-        const 
css::uno::Reference<css::datatransfer::clipboard::XClipboardOwner>& 
xClipboardOwner)
-        override;
-
-    OUString SAL_CALL getName() override;
-
-    // XClipboardEx
-
-    sal_Int8 SAL_CALL getRenderingCapabilities() override;
-
-    // XClipboardNotifier
-
-    void SAL_CALL addClipboardListener(
-        const 
css::uno::Reference<css::datatransfer::clipboard::XClipboardListener>& listener)
-        override;
-
-    void SAL_CALL removeClipboardListener(
-        const 
css::uno::Reference<css::datatransfer::clipboard::XClipboardListener>& listener)
-        override;
-
-    // XServiceInfo
-
-    OUString SAL_CALL getImplementationName() override;
-
-    sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
-
-    css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
-
-    void contentsChanged();
-
-private:
-    /* Notify the current clipboard owner that he is no longer the clipboard 
owner. */
-    void fireLostClipboardOwnershipEvent(
-        css::uno::Reference<css::datatransfer::clipboard::XClipboardOwner> 
const& oldOwner,
-        css::uno::Reference<css::datatransfer::XTransferable> const& 
oldContent);
-
-    /* Notify all registered XClipboardListener that the clipboard content has 
changed. */
-    void
-    
fireClipboardChangedEvent(css::uno::Reference<css::datatransfer::XTransferable> 
xNewContents);
-
-private:
-    css::uno::Reference<css::datatransfer::XMimeContentTypeFactory> 
mrXMimeCntFactory;
-    
std::list<css::uno::Reference<css::datatransfer::clipboard::XClipboardListener>>
-        mClipboardListeners;
-    css::uno::Reference<css::datatransfer::clipboard::XClipboardOwner> 
mXClipboardOwner;
-    std::shared_ptr<DataFlavorMapper> mpDataFlavorMapper;
-    NSInteger mnPasteboardChangeCount;
-    PasteboardChangedEventListener* mpPasteboardChangedEventListener;
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Reply via email to