diff options
author | Michael Stahl <mstahl@redhat.com> | 2013-11-26 19:37:50 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2013-11-28 14:37:05 +0100 |
commit | 9d623125c64b0d532fd0203d96128c6decd0efff (patch) | |
tree | cdb387b08a909745df0191b0079973cb7d2ec8c9 /winaccessibility/source | |
parent | 2fc9b893cb00d9643a56bc5df291e40a212e156f (diff) |
winaccessibility: use rtl::Reference for listener lifecycle
The manual acquire() call was apparently not coupled with a release()?
Change-Id: I069c969619e9afce2a4b836642cc1675025b11d0
(cherry picked from commit ef3f28d0ce641e9d51d91412b176a1ecbdc69773)
Diffstat (limited to 'winaccessibility/source')
-rw-r--r-- | winaccessibility/source/service/AccObject.cxx | 12 | ||||
-rw-r--r-- | winaccessibility/source/service/AccObjectWinManager.cxx | 68 |
2 files changed, 34 insertions, 46 deletions
diff --git a/winaccessibility/source/service/AccObject.cxx b/winaccessibility/source/service/AccObject.cxx index 3c9630886ba8..3b8fedd4ed25 100644 --- a/winaccessibility/source/service/AccObject.cxx +++ b/winaccessibility/source/service/AccObject.cxx @@ -144,12 +144,12 @@ const short ROLE_TABLE[][2] = * @return. */ AccObject::AccObject(XAccessible* pAcc, AccObjectManagerAgent* pAgent, - AccEventListener* listener) : + AccEventListener* pListener) : m_pIMAcc (NULL), m_resID (NULL), m_pParantID (NULL), m_pParentObj(NULL), - m_accListener (listener), + m_pListener (pListener), m_bShouldDestroy(sal_False), m_xAccRef( pAcc ) { @@ -1169,13 +1169,15 @@ void AccObject::SetParentHWND(HWND hWnd) { m_pParantID = hWnd; } -void AccObject::SetListener( AccEventListener* Listener ) + +void AccObject::SetListener(rtl::Reference<AccEventListener> const& pListener) { - m_accListener = Listener; + m_pListener = pListener; } + AccEventListener* AccObject::getListener() { - return m_accListener; + return m_pListener.get(); } long AccObject::GetResID() diff --git a/winaccessibility/source/service/AccObjectWinManager.cxx b/winaccessibility/source/service/AccObjectWinManager.cxx index 0e9c165024eb..7bd1856592a9 100644 --- a/winaccessibility/source/service/AccObjectWinManager.cxx +++ b/winaccessibility/source/service/AccObjectWinManager.cxx @@ -776,24 +776,16 @@ sal_Bool AccObjectWinManager::InsertAccObj( XAccessible* pXAcc,XAccessible* pPar } //end of file name - AccEventListener* listener = createAccEventListener(pXAcc, pAgent); - if(listener==NULL) + ::rtl::Reference<AccEventListener> const pListener = + CreateAccEventListener(pXAcc); + if (!pListener.is()) return sal_False; Reference<XAccessibleComponent> xComponent(pRContext,UNO_QUERY); Reference<XAccessibleEventBroadcaster> broadcaster(xComponent,UNO_QUERY); if (broadcaster.is()) { - Reference <XAccessibleEventListener> pp ( - static_cast< XAccessibleEventListener* >(listener),UNO_QUERY ); - if(pp.is()) - { - broadcaster->addAccessibleEventListener(pp); - } - else - { - delete listener; - return sal_False; - } + Reference<XAccessibleEventListener> const xListener(pListener.get()); + broadcaster->addAccessibleEventListener(xListener); } else return sal_False; @@ -805,9 +797,7 @@ sal_Bool AccObjectWinManager::InsertAccObj( XAccessible* pXAcc,XAccessible* pPar AccObject* pCurObj = GetAccObjByXAcc(pXAcc); if( pCurObj ) { - pCurObj->SetListener( listener ); - if(listener != NULL) - listener->acquire(); + pCurObj->SetListener(pListener); } AccObject* pParentObj = GetAccObjByXAcc(pParentXAcc); @@ -830,32 +820,29 @@ void AccObjectWinManager::SaveTopWindowHandle(HWND hWnd, com::sun::star::accessi } -/** - * create the corresponding listener. - * @param pXAcc XAccessible interface. - * @param Agent The agent kept in all listeners,it's the sole interface by which - * listener communicate with windows manager. - * @return - */ -AccEventListener* AccObjectWinManager::createAccEventListener(XAccessible* pXAcc, AccObjectManagerAgent* /* Agent */ ) +/** Create the corresponding listener. + * @param pXAcc XAccessible interface. + */ +::rtl::Reference<AccEventListener> +AccObjectWinManager::CreateAccEventListener(XAccessible* pXAcc) { - AccEventListener* listener = NULL; + ::rtl::Reference<AccEventListener> pRet; Reference<XAccessibleContext> xContext(pXAcc->getAccessibleContext(),UNO_QUERY); if(xContext.is()) { switch( xContext->getAccessibleRole() ) { case /*AccessibleRole::*/DIALOG: - listener = new AccDialogEventListener(pXAcc,pAgent); + pRet = new AccDialogEventListener(pXAcc,pAgent); break; case /*AccessibleRole::*/FRAME: - listener = new AccFrameEventListener(pXAcc,pAgent); + pRet = new AccFrameEventListener(pXAcc,pAgent); break; case /*AccessibleRole::*/WINDOW: - listener = new AccWindowEventListener(pXAcc,pAgent); + pRet = new AccWindowEventListener(pXAcc,pAgent); break; case /*AccessibleRole::*/ROOT_PANE: - listener = new AccFrameEventListener(pXAcc,pAgent); + pRet = new AccFrameEventListener(pXAcc,pAgent); break; //Container case /*AccessibleRole::*/CANVAS: @@ -879,11 +866,11 @@ AccEventListener* AccObjectWinManager::createAccEventListener(XAccessible* pXAcc case /*AccessibleRole::*/TABLE_CELL: case /*AccessibleRole::*/TOOL_BAR: case /*AccessibleRole::*/VIEW_PORT: - listener = new AccContainerEventListener(pXAcc,pAgent); + pRet = new AccContainerEventListener(pXAcc,pAgent); break; case /*AccessibleRole::*/PARAGRAPH: case /*AccessibleRole::*/HEADING: - listener = new AccParagraphEventListener(pXAcc,pAgent); + pRet = new AccParagraphEventListener(pXAcc,pAgent); break; //Component case /*AccessibleRole::*/CHECK_BOX: @@ -901,15 +888,15 @@ AccEventListener* AccObjectWinManager::createAccEventListener(XAccessible* pXAcc case /*AccessibleRole::*/TOOL_TIP: case /*AccessibleRole::*/SPIN_BOX: case DATE_EDITOR: - listener = new AccComponentEventListener(pXAcc,pAgent); + pRet = new AccComponentEventListener(pXAcc,pAgent); break; //text component case /*AccessibleRole::*/TEXT: - listener = new AccTextComponentEventListener(pXAcc,pAgent); + pRet = new AccTextComponentEventListener(pXAcc,pAgent); break; //menu case /*AccessibleRole::*/MENU: - listener = new AccMenuEventListener(pXAcc,pAgent); + pRet = new AccMenuEventListener(pXAcc,pAgent); break; //object container case /*AccessibleRole::*/SHAPE: @@ -917,27 +904,26 @@ AccEventListener* AccObjectWinManager::createAccEventListener(XAccessible* pXAcc case /*AccessibleRole::*/EMBEDDED_OBJECT: case /*AccessibleRole::*/GRAPHIC: case /*AccessibleRole::*/TEXT_FRAME: - listener = new AccObjectContainerEventListener(pXAcc,pAgent); + pRet = new AccObjectContainerEventListener(pXAcc,pAgent); break; //descendmanager case /*AccessibleRole::*/LIST: - listener = new AccListEventListener(pXAcc,pAgent); + pRet = new AccListEventListener(pXAcc,pAgent); break; case /*AccessibleRole::*/TREE: - listener = new AccTreeEventListener(pXAcc,pAgent); + pRet = new AccTreeEventListener(pXAcc,pAgent); break; //special case /*AccessibleRole::*/COLUMN_HEADER: case /*AccessibleRole::*/TABLE: - listener = new AccTableEventListener(pXAcc,pAgent); + pRet = new AccTableEventListener(pXAcc,pAgent); break; default: - listener = new AccContainerEventListener(pXAcc,pAgent); + pRet = new AccContainerEventListener(pXAcc,pAgent); break; } } - - return listener; + return pRet; } /** |