1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 25 #ifndef _WINCLIPBIMPL_HXX_ 26 #define _WINCLIPBIMPL_HXX_ 27 28 //------------------------------------------------------------------------ 29 // includes 30 //------------------------------------------------------------------------ 31 32 #include <sal/types.h> 33 #include <rtl/ustring.hxx> 34 #include <com/sun/star/datatransfer/XTransferable.hpp> 35 #include <com/sun/star/datatransfer/clipboard/XClipboardListener.hpp> 36 #include <com/sun/star/datatransfer/clipboard/XClipboardOwner.hpp> 37 #include "..\..\inc\MtaOleClipb.hxx" 38 39 #if defined _MSC_VER 40 #pragma warning(push,1) 41 #endif 42 #include <windows.h> 43 #if defined _MSC_VER 44 #pragma warning(pop) 45 #endif 46 47 class CWinClipboard; 48 class CXNotifyingDataObject; 49 50 //--------------------------------------------------- 51 // impl class to avoid deadlocks between XTDataObject 52 // and the clipboard implementation 53 //--------------------------------------------------- 54 55 class CWinClipbImpl 56 { 57 public: 58 ~CWinClipbImpl( ); 59 60 protected: 61 CWinClipbImpl( const ::rtl::OUString& aClipboardName, CWinClipboard* theWinClipboard ); 62 63 ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > SAL_CALL getContents( ) 64 throw( ::com::sun::star::uno::RuntimeException ); 65 66 void SAL_CALL setContents( 67 const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >& xTransferable, 68 const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner ) 69 throw( ::com::sun::star::uno::RuntimeException ); 70 71 ::rtl::OUString SAL_CALL getName( ) throw( ::com::sun::star::uno::RuntimeException ); 72 73 //------------------------------------------------ 74 // XClipboardEx 75 //------------------------------------------------ 76 77 sal_Int8 SAL_CALL getRenderingCapabilities( ) throw( ::com::sun::star::uno::RuntimeException ); 78 79 //------------------------------------------------ 80 // XFlushableClipboard 81 //------------------------------------------------ 82 83 void SAL_CALL flushClipboard( ) throw( com::sun::star::uno::RuntimeException ); 84 85 //------------------------------------------------ 86 // XComponent 87 //------------------------------------------------ 88 89 void SAL_CALL dispose( ) throw( ::com::sun::star::uno::RuntimeException ); 90 91 //------------------------------------------------ 92 // member functions 93 //------------------------------------------------ 94 95 void SAL_CALL registerClipboardViewer( ); 96 void SAL_CALL unregisterClipboardViewer( ); 97 98 static void WINAPI onClipboardContentChanged( void ); 99 100 private: 101 void SAL_CALL onReleaseDataObject( CXNotifyingDataObject* theCaller ); 102 103 private: 104 ::rtl::OUString m_itsName; 105 CMtaOleClipboard m_MtaOleClipboard; 106 CWinClipboard* m_pWinClipboard; 107 CXNotifyingDataObject* m_pCurrentClipContent; 108 osl::Mutex m_ClipContentMutex; 109 110 static osl::Mutex s_aMutex; 111 static CWinClipbImpl* s_pCWinClipbImpl; 112 113 private: 114 CWinClipbImpl( const CWinClipbImpl& ); 115 CWinClipbImpl& operator=( const CWinClipbImpl& ); 116 117 friend class CWinClipboard; 118 friend class CXNotifyingDataObject; 119 }; 120 121 #endif 122