Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <comphelper/weakeventlistener.hxx>
21 : #include <osl/diagnose.h>
22 :
23 :
24 :
25 : namespace comphelper
26 : {
27 :
28 :
29 : using namespace ::com::sun::star::uno;
30 : using namespace ::com::sun::star::lang;
31 :
32 0 : OWeakListenerAdapterBase::~OWeakListenerAdapterBase()
33 : {
34 0 : }
35 :
36 0 : OWeakEventListenerAdapter::OWeakEventListenerAdapter( Reference< XWeak > _rxListener, Reference< XComponent > _rxBroadcaster )
37 0 : :OWeakEventListenerAdapter_Base( _rxListener, _rxBroadcaster )
38 : {
39 : // add ourself as listener to the broadcaster
40 : OSL_ENSURE( _rxBroadcaster.is(), "OWeakEventListenerAdapter::OWeakEventListenerAdapter: invalid broadcaster!" );
41 0 : if ( _rxBroadcaster.is() )
42 : {
43 0 : osl_atomic_increment( &m_refCount );
44 : {
45 0 : _rxBroadcaster->addEventListener( this );
46 : }
47 0 : osl_atomic_decrement( &m_refCount );
48 : OSL_ENSURE( m_refCount > 0, "OWeakEventListenerAdapter::OWeakEventListenerAdapter: oops - not to be used with implementations which hold their listeners weak!" );
49 : // the one and only reason for this adapter class (A) is to add as listener to a component (C) which
50 : // holds its listeners hard, and forward all calls then to another listener (L) which is
51 : // held weak by A.
52 : // Now if C holds listeners weak, then we do not need A, we can add L directly to C.
53 : }
54 :
55 : OSL_ENSURE( getListener().is(), "OWeakEventListenerAdapter::OWeakEventListenerAdapter: invalid listener (does not support the XEventListener interface)!" );
56 0 : }
57 :
58 :
59 0 : void SAL_CALL OWeakEventListenerAdapter::disposing( )
60 : {
61 0 : Reference< XComponent > xBroadcaster( getBroadcaster( ), UNO_QUERY );
62 : OSL_ENSURE( xBroadcaster.is(), "OWeakEventListenerAdapter::disposing: broadcaster is invalid in the meantime! How this?" );
63 0 : if ( xBroadcaster.is() )
64 : {
65 0 : xBroadcaster->removeEventListener( this );
66 : }
67 :
68 0 : resetListener();
69 0 : }
70 :
71 :
72 : } // namespace comphelper
73 :
74 :
75 :
76 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|