offapi/UnoApi_offapi.mk | 1 offapi/com/sun/star/awt/AccessibleTreeListBox.idl | 2 offapi/com/sun/star/awt/AccessibleTreeListBoxEntry.idl | 115 ----------------- vcl/inc/accessibility/accessiblelistboxentry.hxx | 3 vcl/source/accessibility/accessiblelistboxentry.cxx | 79 ++++------- 5 files changed, 33 insertions(+), 167 deletions(-)
New commits: commit 9d2f7546468d9b244afff70a06206b4c2709af63 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Tue Jul 22 10:39:19 2025 +0200 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Tue Jul 22 19:40:37 2025 +0200 [API CHANGE]: a11y: Drop com.sun.star.awt.AccessibleTreeListBoxEntry Drop the unpublished service "com.sun.star.awt.AccessibleTreeListBoxEntry" because it's effectively unused. (The IDL file only documents some internal implementation details of the a11y class implementing the service, and that doc is also outdated/inaccurate.) A search in Google and on Ask [1] didn't give any results that would suggest this unpublished service could be relevant for third party code. (Instances of the service couldn't be created by external code anyway.) [1] https://ask.libreoffice.org/ Change-Id: I4a4291b1147c6c01f0bfe1b939ff378fbd39d46d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188146 Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> Tested-by: Jenkins diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk index 0816d6b987f8..d05f351dcadc 100644 --- a/offapi/UnoApi_offapi.mk +++ b/offapi/UnoApi_offapi.mk @@ -513,7 +513,6 @@ $(eval $(call gb_UnoApi_add_idlfiles_noheader,offapi,com/sun/star/awt,\ AccessibleToolBox \ AccessibleToolBoxItem \ AccessibleTreeListBox \ - AccessibleTreeListBoxEntry \ AccessibleWindow \ AnimatedImagesControl \ AnimatedImagesControlModel \ diff --git a/offapi/com/sun/star/awt/AccessibleTreeListBox.idl b/offapi/com/sun/star/awt/AccessibleTreeListBox.idl index fce939eb8f63..52203587c6a4 100644 --- a/offapi/com/sun/star/awt/AccessibleTreeListBox.idl +++ b/offapi/com/sun/star/awt/AccessibleTreeListBox.idl @@ -46,7 +46,7 @@ service AccessibleTreeListBox <li>Name: The name of a tree list box is its localized label.</li> <li>Description: The description of a tree list box is its localized help text.</li> - <li>Children: There exists children of type com::sun::star::awt::AccessibleTreeListBoxEntry. + <li>Children: There exists children representing the tree list box entries. </li> <li>Parent: The parent is the window that contains the tree list box.</li> <li>Relations: There are no relations.</li> diff --git a/offapi/com/sun/star/awt/AccessibleTreeListBoxEntry.idl b/offapi/com/sun/star/awt/AccessibleTreeListBoxEntry.idl deleted file mode 100644 index e35f4f5aaa3b..000000000000 --- a/offapi/com/sun/star/awt/AccessibleTreeListBoxEntry.idl +++ /dev/null @@ -1,115 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * 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 . - */ - - -module com { module sun { module star { module accessibility { - - interface XAccessibleAction; - interface XAccessibleSelection; - interface XAccessibleText; - interface XAccessibleComponent; - -}; }; }; }; - -module com { module sun { module star { module awt { - - -/** specifies accessibility support for a treelistbox entry. - - @see com::sun::star::accessibility::AccessibleContext - - @see com::sun::star::accessibility::XAccessibleAction - @see com::sun::star::accessibility::XAccessibleSelection - @see com::sun::star::accessibility::XAccessibleText - - @since OOo 1.1.2 -*/ -service AccessibleTreeListBoxEntry -{ - /** This interface gives access to the structural information of a tree list box entry: - - <ul> - <li>Role: The role of a tree list box entry is - com::sun::star::accessibility::AccessibleRole::LABEL.</li> - <li>Name: The name of a tree list box entry is it's text.</li> - <li>Description: The description of a tree list box entry is empty.</li> - <li>Children: There can exist children of type com::sun::star::awt::AccessibleTreeListBoxEntry. - </li> - <li>Parent: The parent is either the com::sun::star::awt::AccessibleTreeListBox - or a com::sun::star::awt::AccessibleTreeListBoxEntry that contains the tree list box entry.</li> - <li>Relations: There are no relations.</li> - <li>States: The states supported by this service are - <ul> - <li>com::sun::star::accessibility::AccessibleStateType::DEFUNC - is set if the object has already been disposed - and subsequent calls to this object result in - com::sun::star::lang::DisposedException - exceptions.</li> - <li>com::sun::star::accessibility::AccessibleStateType::ENABLED - is set if the object is enabled.</li> - <li>com::sun::star::accessibility::AccessibleStateType::SHOWING - is set if the object is displayed on the screen.</li> - <li>com::sun::star::accessibility::AccessibleStateType::VISIBLE - is always set.</li> - <li>com::sun::star::accessibility::AccessibleStateType::EDITABLE - is set when a tree list box entry can be edited.</li> - <li>com::sun::star::accessibility::AccessibleStateType::EXPANDABLE - is always set.</li> - <li>com::sun::star::accessibility::AccessibleStateType::EXPANDED - is set when it is expanded.</li> - <li>com::sun::star::accessibility::AccessibleStateType::COLLAPSED - is set when it is collapsed.</li> - <li>com::sun::star::accessibility::AccessibleStateType::CHECKED - is set when it is checkable.</li> - <li>com::sun::star::accessibility::AccessibleStateType::CHECKED - is set when it is checked.</li> - <li>com::sun::star::accessibility::AccessibleStateType::SELECTABLE - is always set.</li> - <li>com::sun::star::accessibility::AccessibleStateType::SELECTED - is set when it is selected.</li> - </ul> - </li> - </ul> - */ - service com::sun::star::accessibility::AccessibleContext; - - interface com::sun::star::accessibility::XAccessibleComponent; - - /** This interface gives access to the actions that can be executed for - a menu. The supported actions for a tree list box entry are: - <ul> - <li>toggleExpand</li> - </ul> - */ - interface com::sun::star::accessibility::XAccessibleAction; - - /** This interface gives access to the selectable children of a - tree list box entry. - */ - interface com::sun::star::accessibility::XAccessibleSelection; - - /** This interface gives read-only access to the text representation - of a tool box item. - */ - interface com::sun::star::accessibility::XAccessibleText; -}; - -}; }; }; }; - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/accessibility/accessiblelistboxentry.cxx b/vcl/source/accessibility/accessiblelistboxentry.cxx index 22703168e43f..e8d2e8ffeac8 100644 --- a/vcl/source/accessibility/accessiblelistboxentry.cxx +++ b/vcl/source/accessibility/accessiblelistboxentry.cxx @@ -188,8 +188,7 @@ OUString SAL_CALL AccessibleListBoxEntry::getImplementationName() Sequence< OUString > SAL_CALL AccessibleListBoxEntry::getSupportedServiceNames() { return {u"com.sun.star.accessibility.AccessibleContext"_ustr, - u"com.sun.star.accessibility.AccessibleComponent"_ustr, - u"com.sun.star.awt.AccessibleTreeListBoxEntry"_ustr}; + u"com.sun.star.accessibility.AccessibleComponent"_ustr}; } sal_Bool SAL_CALL AccessibleListBoxEntry::supportsService( const OUString& _rServiceName ) commit eaa317f383a8e915a8f286bd88f5f9af66130dd1 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Tue Jul 22 10:30:21 2025 +0200 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Tue Jul 22 19:40:31 2025 +0200 vcl a11y: Drop AccessibleListBoxEntry::IsAlive_Impl ... and AccessibleListBoxEntry::EnsureIsAlive that uses it. Instead rely on the base class OAccessible::isAlive and OAccessible::ensureAlive. The additional check for `m_pTreeListBox` being non-null is redundant, as it is set in the ctor and only cleared (set to null) in AccessibleListBoxEntry::disposing, at which point OAccessible::isAlive will also return false. Change-Id: I7b5f92d284e3d1cb7a683fbdfc7ec267b3a4f026 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188145 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/vcl/inc/accessibility/accessiblelistboxentry.hxx b/vcl/inc/accessibility/accessiblelistboxentry.hxx index 148a5844959e..55d44ce4c578 100644 --- a/vcl/inc/accessibility/accessiblelistboxentry.hxx +++ b/vcl/inc/accessibility/accessiblelistboxentry.hxx @@ -57,13 +57,10 @@ private: unotools::WeakReference<AccessibleListBox> m_wListBox; tools::Rectangle GetBoundingBox_Impl() const; - bool IsAlive_Impl() const; bool IsShowing_Impl() const; /// @throws css::lang::IndexOutOfBoundsException void CheckActionIndex(sal_Int32 nIndex); - /// @throws css::lang::DisposedException - void EnsureIsAlive() const; /** this function is called upon disposing the component */ diff --git a/vcl/source/accessibility/accessiblelistboxentry.cxx b/vcl/source/accessibility/accessiblelistboxentry.cxx index 5503547eb51c..22703168e43f 100644 --- a/vcl/source/accessibility/accessiblelistboxentry.cxx +++ b/vcl/source/accessibility/accessiblelistboxentry.cxx @@ -111,11 +111,6 @@ tools::Rectangle AccessibleListBoxEntry::GetBoundingBox_Impl() const return aRect; } -bool AccessibleListBoxEntry::IsAlive_Impl() const -{ - return isAlive() && m_pTreeListBox; -} - bool AccessibleListBoxEntry::IsShowing_Impl() const { Reference< XAccessible > xParent = implGetParentAccessible( ); @@ -140,12 +135,6 @@ void AccessibleListBoxEntry::CheckActionIndex(sal_Int32 nIndex) throw css::lang::IndexOutOfBoundsException(); } -void AccessibleListBoxEntry::EnsureIsAlive() const -{ - if ( !IsAlive_Impl() ) - throw lang::DisposedException(); -} - OUString AccessibleListBoxEntry::implGetText() { SvTreeListEntry* pEntry = m_pTreeListBox->GetEntryFromPath( m_aEntryPath ); @@ -215,7 +204,7 @@ sal_Int64 SAL_CALL AccessibleListBoxEntry::getAccessibleChildCount( ) SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); SvTreeListEntry* pEntry = m_pTreeListBox->GetEntryFromPath( m_aEntryPath ); sal_Int32 nCount = 0; if ( pEntry ) @@ -228,7 +217,7 @@ Reference< XAccessible > SAL_CALL AccessibleListBoxEntry::getAccessibleChild( sa { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); SvTreeListEntry* pEntry = GetRealChild(i); if ( !pEntry ) @@ -278,7 +267,7 @@ Reference< XAccessible > SAL_CALL AccessibleListBoxEntry::getAccessibleParent( { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); return implGetParentAccessible( ); } @@ -363,7 +352,7 @@ OUString SAL_CALL AccessibleListBoxEntry::getAccessibleName( ) { ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); if (SvTreeListEntry* pEntry = m_pTreeListBox->GetEntryFromPath(m_aEntryPath)) { @@ -396,7 +385,7 @@ sal_Int64 SAL_CALL AccessibleListBoxEntry::getAccessibleStateSet( ) sal_Int64 nStateSet = 0; - if ( IsAlive_Impl() ) + if (isAlive()) { switch(getAccessibleRole()) { @@ -442,7 +431,7 @@ Reference< XAccessible > SAL_CALL AccessibleListBoxEntry::getAccessibleAtPoint( SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); SvTreeListEntry* pEntry = m_pTreeListBox->GetEntry(vcl::unohelper::ConvertToVCLPoint(_aPoint)); if ( !pEntry ) @@ -505,7 +494,7 @@ awt::Rectangle SAL_CALL AccessibleListBoxEntry::getCharacterBounds( sal_Int32 nI SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); if ( !implIsValidIndex( nIndex, implGetText().getLength() ) ) throw IndexOutOfBoundsException(); @@ -529,7 +518,7 @@ sal_Int32 SAL_CALL AccessibleListBoxEntry::getIndexAtPoint( const awt::Point& aP { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); if(aPoint.X==0 && aPoint.Y==0) return 0; sal_Int32 nIndex = -1; @@ -551,7 +540,7 @@ sal_Bool SAL_CALL AccessibleListBoxEntry::copyText( sal_Int32 nStartIndex, sal_I { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); OUString sText = implGetText(); if ( ( 0 > nStartIndex ) || ( sText.getLength() <= nStartIndex ) @@ -602,7 +591,7 @@ sal_Bool SAL_CALL AccessibleListBoxEntry::doAccessibleAction( sal_Int32 nIndex ) bool bRet = false; CheckActionIndex(nIndex); - EnsureIsAlive(); + ensureAlive(); SvTreeFlags treeFlag = m_pTreeListBox->GetTreeFlags(); if( nIndex == 0 && (treeFlag & SvTreeFlags::CHKBTN) ) @@ -639,7 +628,7 @@ OUString SAL_CALL AccessibleListBoxEntry::getAccessibleActionDescription( sal_In ::osl::MutexGuard aGuard( m_aMutex ); CheckActionIndex(nIndex); - EnsureIsAlive(); + ensureAlive(); SvTreeListEntry* pEntry = m_pTreeListBox->GetEntryFromPath( m_aEntryPath ); SvButtonState state = m_pTreeListBox->GetCheckButtonState( pEntry ); @@ -686,7 +675,7 @@ void SAL_CALL AccessibleListBoxEntry::selectAccessibleChild( sal_Int64 nChildInd SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); if (nChildIndex < 0 || nChildIndex >= getAccessibleChildCount()) throw IndexOutOfBoundsException(); @@ -703,7 +692,7 @@ sal_Bool SAL_CALL AccessibleListBoxEntry::isAccessibleChildSelected( sal_Int64 n SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); if (nChildIndex < 0 || nChildIndex >= getAccessibleChildCount()) throw IndexOutOfBoundsException(); @@ -721,7 +710,7 @@ void SAL_CALL AccessibleListBoxEntry::clearAccessibleSelection( ) SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); SvTreeListEntry* pParent = m_pTreeListBox->GetEntryFromPath( m_aEntryPath ); if ( !pParent ) @@ -740,7 +729,7 @@ void SAL_CALL AccessibleListBoxEntry::selectAllAccessibleChildren( ) SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); SvTreeListEntry* pParent = m_pTreeListBox->GetEntryFromPath( m_aEntryPath ); if ( !pParent ) @@ -759,7 +748,7 @@ sal_Int64 SAL_CALL AccessibleListBoxEntry::getSelectedAccessibleChildCount( ) SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); sal_Int64 nSelCount = 0; @@ -782,7 +771,7 @@ Reference< XAccessible > SAL_CALL AccessibleListBoxEntry::getSelectedAccessibleC SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); if ( nSelectedChildIndex < 0 || nSelectedChildIndex >= getSelectedAccessibleChildCount() ) throw IndexOutOfBoundsException(); @@ -817,7 +806,7 @@ void SAL_CALL AccessibleListBoxEntry::deselectAccessibleChild( sal_Int64 nSelect SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); if (nSelectedChildIndex < 0 || nSelectedChildIndex >= getAccessibleChildCount()) throw IndexOutOfBoundsException(); @@ -837,7 +826,7 @@ sal_Bool SAL_CALL AccessibleListBoxEntry::setCaretPosition ( sal_Int32 nIndex ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); if ( !implIsValidRange( nIndex, nIndex, implGetText().getLength() ) ) throw IndexOutOfBoundsException(); @@ -848,14 +837,14 @@ sal_Unicode SAL_CALL AccessibleListBoxEntry::getCharacter( sal_Int32 nIndex ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); return OCommonAccessibleText::implGetCharacter( implGetText(), nIndex ); } css::uno::Sequence< css::beans::PropertyValue > SAL_CALL AccessibleListBoxEntry::getCharacterAttributes( sal_Int32 nIndex, const css::uno::Sequence< OUString >& ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); OUString sText( implGetText() ); @@ -868,7 +857,7 @@ sal_Int32 SAL_CALL AccessibleListBoxEntry::getCharacterCount( ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); return implGetText().getLength(); } @@ -876,28 +865,28 @@ OUString SAL_CALL AccessibleListBoxEntry::getSelectedText( ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); return OUString(); } sal_Int32 SAL_CALL AccessibleListBoxEntry::getSelectionStart( ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); return 0; } sal_Int32 SAL_CALL AccessibleListBoxEntry::getSelectionEnd( ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); return 0; } sal_Bool SAL_CALL AccessibleListBoxEntry::setSelection( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); if ( !implIsValidRange( nStartIndex, nEndIndex, implGetText().getLength() ) ) throw IndexOutOfBoundsException(); @@ -908,35 +897,35 @@ OUString SAL_CALL AccessibleListBoxEntry::getText( ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); return implGetText( ); } OUString SAL_CALL AccessibleListBoxEntry::getTextRange( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); return OCommonAccessibleText::implGetTextRange( implGetText(), nStartIndex, nEndIndex ); } css::accessibility::TextSegment SAL_CALL AccessibleListBoxEntry::getTextAtIndex( sal_Int32 nIndex, sal_Int16 aTextType ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); return OCommonAccessibleText::getTextAtIndex( nIndex ,aTextType); } css::accessibility::TextSegment SAL_CALL AccessibleListBoxEntry::getTextBeforeIndex( sal_Int32 nIndex, sal_Int16 aTextType ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); return OCommonAccessibleText::getTextBeforeIndex( nIndex ,aTextType); } css::accessibility::TextSegment SAL_CALL AccessibleListBoxEntry::getTextBehindIndex( sal_Int32 nIndex, sal_Int16 aTextType ) { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - EnsureIsAlive(); + ensureAlive(); return OCommonAccessibleText::getTextBehindIndex( nIndex ,aTextType); } commit 411e83bca0f49fee6e8d8d155f1235d1db35fc09 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Tue Jul 22 10:19:53 2025 +0200 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Tue Jul 22 19:40:22 2025 +0200 vcl list box entry a11y: Drop duplicate logic when dying This VclEventId::ObjectDying case already calls dispose(), and AccessibleListBoxEntry::disposing already includes the logic duplicated in addition, so drop it. Change-Id: Id623939f2cadd5d18a7f3c908e8f48875c59ebd8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188144 Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> Tested-by: Jenkins diff --git a/vcl/source/accessibility/accessiblelistboxentry.cxx b/vcl/source/accessibility/accessiblelistboxentry.cxx index ca01914f5b85..5503547eb51c 100644 --- a/vcl/source/accessibility/accessiblelistboxentry.cxx +++ b/vcl/source/accessibility/accessiblelistboxentry.cxx @@ -84,9 +84,6 @@ IMPL_LINK( AccessibleListBoxEntry, WindowEventListener, VclWindowEvent&, rEvent, } case VclEventId::ObjectDying : { - if ( m_pTreeListBox ) - m_pTreeListBox->RemoveEventListener( LINK( this, AccessibleListBoxEntry, WindowEventListener ) ); - m_pTreeListBox = nullptr; dispose(); break; }