1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_comphelper.hxx" 30 #include <comphelper/weakeventlistener.hxx> 31 #include <osl/diagnose.h> 32 33 34 //......................................................................... 35 namespace comphelper 36 { 37 //......................................................................... 38 39 using namespace ::com::sun::star::uno; 40 using namespace ::com::sun::star::lang; 41 42 //===================================================================== 43 //= OWeakListenerAdapter 44 //===================================================================== 45 //--------------------------------------------------------------------- 46 OWeakListenerAdapterBase::~OWeakListenerAdapterBase() 47 { 48 } 49 50 //===================================================================== 51 //= OWeakEventListenerAdapter 52 //===================================================================== 53 //--------------------------------------------------------------------- 54 OWeakEventListenerAdapter::OWeakEventListenerAdapter( Reference< XWeak > _rxListener, Reference< XComponent > _rxBroadcaster ) 55 :OWeakEventListenerAdapter_Base( _rxListener, _rxBroadcaster ) 56 { 57 // add ourself as listener to the broadcaster 58 OSL_ENSURE( _rxBroadcaster.is(), "OWeakEventListenerAdapter::OWeakEventListenerAdapter: invalid broadcaster!" ); 59 if ( _rxBroadcaster.is() ) 60 { 61 osl_incrementInterlockedCount( &m_refCount ); 62 { 63 _rxBroadcaster->addEventListener( this ); 64 } 65 osl_decrementInterlockedCount( &m_refCount ); 66 OSL_ENSURE( m_refCount > 0, "OWeakEventListenerAdapter::OWeakEventListenerAdapter: oops - not to be used with implementations which hold their listeners weak!" ); 67 // the one and only reason for this adapter class (A) is to add as listener to a component (C) which 68 // holds its listeners hard, and forward all calls then to another listener (L) which is 69 // held weak by A. 70 // Now if C holds listeners weak, then we do not need A, we can add L directly to C. 71 } 72 73 OSL_ENSURE( getListener().is(), "OWeakEventListenerAdapter::OWeakEventListenerAdapter: invalid listener (does not support the XEventListener interface)!" ); 74 } 75 76 //--------------------------------------------------------------------- 77 void SAL_CALL OWeakEventListenerAdapter::disposing( ) 78 { 79 Reference< XComponent > xBroadcaster( getBroadcaster( ), UNO_QUERY ); 80 OSL_ENSURE( xBroadcaster.is(), "OWeakEventListenerAdapter::disposing: broadcaster is invalid in the meantime! How this?" ); 81 if ( xBroadcaster.is() ) 82 { 83 xBroadcaster->removeEventListener( this ); 84 } 85 86 resetListener(); 87 } 88 89 //......................................................................... 90 } // namespace comphelper 91 //......................................................................... 92 93 94