Branch libreoffice-5-0-4
[LibreOffice.git] / accessibility / source / standard / vclxaccessiblelistitem.cxx
blobd1ea1cfe5d867a7985e1c8d08877f8c15f260bb7
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #include <accessibility/standard/vclxaccessiblelistitem.hxx>
21 #include <toolkit/helper/convert.hxx>
22 #include <accessibility/helper/listboxhelper.hxx>
23 #include <com/sun/star/awt/Point.hpp>
24 #include <com/sun/star/awt/Rectangle.hpp>
25 #include <com/sun/star/awt/Size.hpp>
27 #include <com/sun/star/accessibility/AccessibleEventId.hpp>
28 #include <com/sun/star/accessibility/AccessibleRole.hpp>
29 #include <com/sun/star/accessibility/AccessibleStateType.hpp>
30 #include <com/sun/star/datatransfer/clipboard/XClipboard.hpp>
31 #include <com/sun/star/datatransfer/clipboard/XFlushableClipboard.hpp>
32 #include <cppuhelper/supportsservice.hxx>
33 #include <vcl/svapp.hxx>
34 #include <vcl/controllayout.hxx>
35 #include <vcl/unohelp2.hxx>
36 #include <vcl/settings.hxx>
37 #include <toolkit/awt/vclxwindow.hxx>
38 #include <unotools/accessiblestatesethelper.hxx>
39 #include <unotools/accessiblerelationsethelper.hxx>
40 #include <cppuhelper/typeprovider.hxx>
41 #include <comphelper/sequence.hxx>
42 #include <comphelper/accessibleeventnotifier.hxx>
44 namespace
46 void checkIndex_Impl( sal_Int32 _nIndex, const OUString& _sText ) throw (::com::sun::star::lang::IndexOutOfBoundsException)
48 if ( _nIndex < 0 || _nIndex > _sText.getLength() )
49 throw ::com::sun::star::lang::IndexOutOfBoundsException();
53 // class VCLXAccessibleListItem ------------------------------------------
55 using namespace ::com::sun::star::accessibility;
56 using namespace ::com::sun::star::uno;
57 using namespace ::com::sun::star::beans;
58 using namespace ::com::sun::star::lang;
59 using namespace ::com::sun::star;
62 // Ctor() and Dtor()
64 VCLXAccessibleListItem::VCLXAccessibleListItem( ::accessibility::IComboListBoxHelper* _pListBoxHelper, sal_Int32 _nIndexInParent, const Reference< XAccessible >& _xParent ) :
66 VCLXAccessibleListItem_BASE ( m_aMutex ),
68 m_nIndexInParent( _nIndexInParent ),
69 m_bSelected ( false ),
70 m_bVisible ( false ),
71 m_nClientId ( 0 ),
72 m_pListBoxHelper( _pListBoxHelper ),
73 m_xParent ( _xParent )
76 if ( m_xParent.is() )
77 m_xParentContext = m_xParent->getAccessibleContext();
79 if ( m_pListBoxHelper )
80 m_sEntryText = m_pListBoxHelper->GetEntry( (sal_uInt16)_nIndexInParent );
83 VCLXAccessibleListItem::~VCLXAccessibleListItem()
87 void VCLXAccessibleListItem::SetSelected( bool _bSelected )
89 if ( m_bSelected != _bSelected )
91 Any aOldValue;
92 Any aNewValue;
93 if ( m_bSelected )
94 aOldValue <<= AccessibleStateType::SELECTED;
95 else
96 aNewValue <<= AccessibleStateType::SELECTED;
97 m_bSelected = _bSelected;
98 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
102 void VCLXAccessibleListItem::SetVisible( bool _bVisible )
104 if ( m_bVisible != _bVisible )
106 Any aOldValue, aNewValue;
107 m_bVisible = _bVisible;
108 (_bVisible ? aNewValue : aOldValue ) <<= AccessibleStateType::VISIBLE;
109 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
110 (_bVisible ? aNewValue : aOldValue ) <<= AccessibleStateType::SHOWING;
111 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
115 void VCLXAccessibleListItem::NotifyAccessibleEvent( sal_Int16 _nEventId,
116 const ::com::sun::star::uno::Any& _aOldValue,
117 const ::com::sun::star::uno::Any& _aNewValue )
119 AccessibleEventObject aEvt;
120 aEvt.Source = *this;
121 aEvt.EventId = _nEventId;
122 aEvt.OldValue = _aOldValue;
123 aEvt.NewValue = _aNewValue;
125 if (m_nClientId)
126 comphelper::AccessibleEventNotifier::addEvent( m_nClientId, aEvt );
129 // OCommonAccessibleText
131 OUString VCLXAccessibleListItem::implGetText()
133 return m_sEntryText;
136 Locale VCLXAccessibleListItem::implGetLocale()
138 return Application::GetSettings().GetLanguageTag().getLocale();
141 void VCLXAccessibleListItem::implGetSelection( sal_Int32& nStartIndex, sal_Int32& nEndIndex )
143 nStartIndex = 0;
144 nEndIndex = 0;
147 // XInterface
149 Any SAL_CALL VCLXAccessibleListItem::queryInterface( Type const & rType ) throw (RuntimeException, std::exception)
151 return VCLXAccessibleListItem_BASE::queryInterface( rType );
154 void SAL_CALL VCLXAccessibleListItem::acquire() throw ()
156 VCLXAccessibleListItem_BASE::acquire();
159 void SAL_CALL VCLXAccessibleListItem::release() throw ()
161 VCLXAccessibleListItem_BASE::release();
164 // XTypeProvider
166 Sequence< Type > SAL_CALL VCLXAccessibleListItem::getTypes( ) throw (RuntimeException, std::exception)
168 return VCLXAccessibleListItem_BASE::getTypes();
171 Sequence< sal_Int8 > VCLXAccessibleListItem::getImplementationId() throw (RuntimeException, std::exception)
173 return css::uno::Sequence<sal_Int8>();
176 // XComponent
178 void SAL_CALL VCLXAccessibleListItem::disposing()
180 comphelper::AccessibleEventNotifier::TClientId nId( 0 );
181 Reference< XInterface > xEventSource;
183 ::osl::MutexGuard aGuard( m_aMutex );
185 VCLXAccessibleListItem_BASE::disposing();
186 m_sEntryText.clear();
187 m_pListBoxHelper = NULL;
188 m_xParent = NULL;
189 m_xParentContext = NULL;
191 nId = m_nClientId;
192 m_nClientId = 0;
193 if ( nId )
194 xEventSource = *this;
197 // Send a disposing to all listeners.
198 if ( nId )
199 comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( nId, *this );
202 // XServiceInfo
204 OUString VCLXAccessibleListItem::getImplementationName() throw (RuntimeException, std::exception)
206 return OUString( "com.sun.star.comp.toolkit.AccessibleListItem" );
209 sal_Bool VCLXAccessibleListItem::supportsService( const OUString& rServiceName ) throw (RuntimeException, std::exception)
211 return cppu::supportsService(this, rServiceName);
214 Sequence< OUString > VCLXAccessibleListItem::getSupportedServiceNames() throw (RuntimeException, std::exception)
216 Sequence< OUString > aNames(3);
217 aNames[0] = "com.sun.star.accessibility.AccessibleContext";
218 aNames[1] = "com.sun.star.accessibility.AccessibleComponent";
219 aNames[2] = "com.sun.star.accessibility.AccessibleListItem";
220 return aNames;
223 // XAccessible
225 Reference< XAccessibleContext > SAL_CALL VCLXAccessibleListItem::getAccessibleContext( ) throw (RuntimeException, std::exception)
227 return this;
230 // XAccessibleContext
232 sal_Int32 SAL_CALL VCLXAccessibleListItem::getAccessibleChildCount( ) throw (RuntimeException, std::exception)
234 return 0;
237 Reference< XAccessible > SAL_CALL VCLXAccessibleListItem::getAccessibleChild( sal_Int32 ) throw (RuntimeException, std::exception)
239 return Reference< XAccessible >();
242 Reference< XAccessible > SAL_CALL VCLXAccessibleListItem::getAccessibleParent( ) throw (RuntimeException, std::exception)
244 ::osl::MutexGuard aGuard( m_aMutex );
246 return m_xParent;
249 sal_Int32 SAL_CALL VCLXAccessibleListItem::getAccessibleIndexInParent( ) throw (RuntimeException, std::exception)
251 ::osl::MutexGuard aGuard( m_aMutex );
252 return m_nIndexInParent;
255 sal_Int16 SAL_CALL VCLXAccessibleListItem::getAccessibleRole( ) throw (RuntimeException, std::exception)
257 return AccessibleRole::LIST_ITEM;
258 // return AccessibleRole::LABEL;
261 OUString SAL_CALL VCLXAccessibleListItem::getAccessibleDescription( ) throw (RuntimeException, std::exception)
263 // no description for every item
264 return OUString();
267 OUString SAL_CALL VCLXAccessibleListItem::getAccessibleName( ) throw (RuntimeException, std::exception)
269 ::osl::MutexGuard aGuard( m_aMutex );
271 // entry text == accessible name
272 return implGetText();
275 Reference< XAccessibleRelationSet > SAL_CALL VCLXAccessibleListItem::getAccessibleRelationSet( ) throw (RuntimeException, std::exception)
277 utl::AccessibleRelationSetHelper* pRelationSetHelper = new utl::AccessibleRelationSetHelper;
278 Reference< XAccessibleRelationSet > xSet = pRelationSetHelper;
279 return xSet;
282 Reference< XAccessibleStateSet > SAL_CALL VCLXAccessibleListItem::getAccessibleStateSet( ) throw (RuntimeException, std::exception)
284 ::osl::MutexGuard aGuard( m_aMutex );
286 utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper;
287 Reference< XAccessibleStateSet > xStateSet = pStateSetHelper;
289 if ( !rBHelper.bDisposed && !rBHelper.bInDispose )
291 pStateSetHelper->AddState( AccessibleStateType::TRANSIENT );
293 if(m_pListBoxHelper->IsEnabled())
295 pStateSetHelper->AddState( AccessibleStateType::SELECTABLE );
296 pStateSetHelper->AddState( AccessibleStateType::ENABLED );
297 pStateSetHelper->AddState( AccessibleStateType::SENSITIVE );
300 if ( m_bSelected )
301 pStateSetHelper->AddState( AccessibleStateType::SELECTED );
302 if ( m_bVisible )
304 pStateSetHelper->AddState( AccessibleStateType::VISIBLE );
305 pStateSetHelper->AddState( AccessibleStateType::SHOWING );
308 else
309 pStateSetHelper->AddState( AccessibleStateType::DEFUNC );
311 return xStateSet;
314 Locale SAL_CALL VCLXAccessibleListItem::getLocale( ) throw (IllegalAccessibleComponentStateException, RuntimeException, std::exception)
316 SolarMutexGuard aSolarGuard;
317 ::osl::MutexGuard aGuard( m_aMutex );
319 return implGetLocale();
322 // XAccessibleComponent
324 sal_Bool SAL_CALL VCLXAccessibleListItem::containsPoint( const awt::Point& _aPoint ) throw (RuntimeException, std::exception)
326 SolarMutexGuard aSolarGuard;
327 ::osl::MutexGuard aGuard( m_aMutex );
329 bool bInside = false;
330 if ( m_pListBoxHelper )
332 Rectangle aRect( m_pListBoxHelper->GetBoundingRectangle( (sal_uInt16)m_nIndexInParent ) );
333 aRect.Move(-aRect.TopLeft().X(),-aRect.TopLeft().Y());
334 bInside = aRect.IsInside( VCLPoint( _aPoint ) );
336 return bInside;
339 Reference< XAccessible > SAL_CALL VCLXAccessibleListItem::getAccessibleAtPoint( const awt::Point& ) throw (RuntimeException, std::exception)
341 return Reference< XAccessible >();
344 awt::Rectangle SAL_CALL VCLXAccessibleListItem::getBounds( ) throw (RuntimeException, std::exception)
346 SolarMutexGuard aSolarGuard;
347 ::osl::MutexGuard aGuard( m_aMutex );
349 awt::Rectangle aRect;
350 if ( m_pListBoxHelper )
351 aRect = AWTRectangle( m_pListBoxHelper->GetBoundingRectangle( (sal_uInt16)m_nIndexInParent ) );
353 return aRect;
356 awt::Point SAL_CALL VCLXAccessibleListItem::getLocation( ) throw (RuntimeException, std::exception)
358 SolarMutexGuard aSolarGuard;
359 ::osl::MutexGuard aGuard( m_aMutex );
361 Point aPoint(0,0);
362 if ( m_pListBoxHelper )
364 Rectangle aRect = m_pListBoxHelper->GetBoundingRectangle( (sal_uInt16)m_nIndexInParent );
365 aPoint = aRect.TopLeft();
367 return AWTPoint( aPoint );
370 awt::Point SAL_CALL VCLXAccessibleListItem::getLocationOnScreen( ) throw (RuntimeException, std::exception)
372 SolarMutexGuard aSolarGuard;
373 ::osl::MutexGuard aGuard( m_aMutex );
375 Point aPoint(0,0);
376 if ( m_pListBoxHelper )
378 Rectangle aRect = m_pListBoxHelper->GetBoundingRectangle( (sal_uInt16)m_nIndexInParent );
379 aPoint = aRect.TopLeft();
380 aPoint += m_pListBoxHelper->GetWindowExtentsRelative( NULL ).TopLeft();
382 return AWTPoint( aPoint );
385 awt::Size SAL_CALL VCLXAccessibleListItem::getSize( ) throw (RuntimeException, std::exception)
387 SolarMutexGuard aSolarGuard;
388 ::osl::MutexGuard aGuard( m_aMutex );
390 Size aSize;
391 if ( m_pListBoxHelper )
392 aSize = m_pListBoxHelper->GetBoundingRectangle( (sal_uInt16)m_nIndexInParent ).GetSize();
394 return AWTSize( aSize );
397 void SAL_CALL VCLXAccessibleListItem::grabFocus( ) throw (RuntimeException, std::exception)
399 // no focus for each item
402 // XAccessibleText
404 sal_Int32 SAL_CALL VCLXAccessibleListItem::getCaretPosition() throw (RuntimeException, std::exception)
406 return -1;
409 sal_Bool SAL_CALL VCLXAccessibleListItem::setCaretPosition( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
411 SolarMutexGuard aSolarGuard;
412 ::osl::MutexGuard aGuard( m_aMutex );
414 if ( !implIsValidRange( nIndex, nIndex, implGetText().getLength() ) )
415 throw IndexOutOfBoundsException();
417 return false;
420 sal_Unicode SAL_CALL VCLXAccessibleListItem::getCharacter( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
422 SolarMutexGuard aSolarGuard;
423 ::osl::MutexGuard aGuard( m_aMutex );
425 return OCommonAccessibleText::getCharacter( nIndex );
428 Sequence< PropertyValue > SAL_CALL VCLXAccessibleListItem::getCharacterAttributes( sal_Int32 nIndex, const Sequence< OUString >& ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
430 SolarMutexGuard aSolarGuard;
431 ::osl::MutexGuard aGuard( m_aMutex );
433 OUString sText( implGetText() );
434 if ( !implIsValidIndex( nIndex, sText.getLength() ) )
435 throw IndexOutOfBoundsException();
437 return Sequence< PropertyValue >();
440 awt::Rectangle SAL_CALL VCLXAccessibleListItem::getCharacterBounds( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
442 SolarMutexGuard aSolarGuard;
443 ::osl::MutexGuard aGuard( m_aMutex );
445 OUString sText( implGetText() );
446 if ( !implIsValidIndex( nIndex, sText.getLength() ) )
447 throw IndexOutOfBoundsException();
449 awt::Rectangle aBounds( 0, 0, 0, 0 );
450 if ( m_pListBoxHelper )
452 Rectangle aCharRect = m_pListBoxHelper->GetEntryCharacterBounds( m_nIndexInParent, nIndex );
453 Rectangle aItemRect = m_pListBoxHelper->GetBoundingRectangle( (sal_uInt16)m_nIndexInParent );
454 aCharRect.Move( -aItemRect.Left(), -aItemRect.Top() );
455 aBounds = AWTRectangle( aCharRect );
458 return aBounds;
461 sal_Int32 SAL_CALL VCLXAccessibleListItem::getCharacterCount() throw (RuntimeException, std::exception)
463 SolarMutexGuard aSolarGuard;
464 ::osl::MutexGuard aGuard( m_aMutex );
466 return OCommonAccessibleText::getCharacterCount();
469 sal_Int32 SAL_CALL VCLXAccessibleListItem::getIndexAtPoint( const awt::Point& aPoint ) throw (RuntimeException, std::exception)
471 SolarMutexGuard aSolarGuard;
472 ::osl::MutexGuard aGuard( m_aMutex );
474 sal_Int32 nIndex = -1;
475 if ( m_pListBoxHelper )
477 sal_Int32 nPos = LISTBOX_ENTRY_NOTFOUND;
478 Rectangle aItemRect = m_pListBoxHelper->GetBoundingRectangle( (sal_uInt16)m_nIndexInParent );
479 Point aPnt( VCLPoint( aPoint ) );
480 aPnt += aItemRect.TopLeft();
481 sal_Int32 nI = m_pListBoxHelper->GetIndexForPoint( aPnt, nPos );
482 if ( nI != -1 && m_nIndexInParent == nPos )
483 nIndex = nI;
485 return nIndex;
488 OUString SAL_CALL VCLXAccessibleListItem::getSelectedText() throw (RuntimeException, std::exception)
490 SolarMutexGuard aSolarGuard;
491 ::osl::MutexGuard aGuard( m_aMutex );
493 return OCommonAccessibleText::getSelectedText();
496 sal_Int32 SAL_CALL VCLXAccessibleListItem::getSelectionStart() throw (RuntimeException, std::exception)
498 SolarMutexGuard aSolarGuard;
499 ::osl::MutexGuard aGuard( m_aMutex );
501 return OCommonAccessibleText::getSelectionStart();
504 sal_Int32 SAL_CALL VCLXAccessibleListItem::getSelectionEnd() throw (RuntimeException, std::exception)
506 SolarMutexGuard aSolarGuard;
507 ::osl::MutexGuard aGuard( m_aMutex );
509 return OCommonAccessibleText::getSelectionEnd();
512 sal_Bool SAL_CALL VCLXAccessibleListItem::setSelection( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
514 SolarMutexGuard aSolarGuard;
515 ::osl::MutexGuard aGuard( m_aMutex );
517 if ( !implIsValidRange( nStartIndex, nEndIndex, implGetText().getLength() ) )
518 throw IndexOutOfBoundsException();
520 return false;
523 OUString SAL_CALL VCLXAccessibleListItem::getText() throw (RuntimeException, std::exception)
525 SolarMutexGuard aSolarGuard;
526 ::osl::MutexGuard aGuard( m_aMutex );
528 return OCommonAccessibleText::getText();
531 OUString SAL_CALL VCLXAccessibleListItem::getTextRange( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
533 SolarMutexGuard aSolarGuard;
534 ::osl::MutexGuard aGuard( m_aMutex );
536 return OCommonAccessibleText::getTextRange( nStartIndex, nEndIndex );
539 ::com::sun::star::accessibility::TextSegment SAL_CALL VCLXAccessibleListItem::getTextAtIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception)
541 SolarMutexGuard aSolarGuard;
542 ::osl::MutexGuard aGuard( m_aMutex );
544 return OCommonAccessibleText::getTextAtIndex( nIndex, aTextType );
547 ::com::sun::star::accessibility::TextSegment SAL_CALL VCLXAccessibleListItem::getTextBeforeIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception)
549 SolarMutexGuard aSolarGuard;
550 ::osl::MutexGuard aGuard( m_aMutex );
552 return OCommonAccessibleText::getTextBeforeIndex( nIndex, aTextType );
555 ::com::sun::star::accessibility::TextSegment SAL_CALL VCLXAccessibleListItem::getTextBehindIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception)
557 SolarMutexGuard aSolarGuard;
558 ::osl::MutexGuard aGuard( m_aMutex );
560 return OCommonAccessibleText::getTextBehindIndex( nIndex, aTextType );
563 sal_Bool SAL_CALL VCLXAccessibleListItem::copyText( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
565 SolarMutexGuard aSolarGuard;
566 ::osl::MutexGuard aGuard( m_aMutex );
568 checkIndex_Impl( nStartIndex, m_sEntryText );
569 checkIndex_Impl( nEndIndex, m_sEntryText );
571 bool bRet = false;
572 if ( m_pListBoxHelper )
574 Reference< datatransfer::clipboard::XClipboard > xClipboard = m_pListBoxHelper->GetClipboard();
575 if ( xClipboard.is() )
577 OUString sText( getTextRange( nStartIndex, nEndIndex ) );
578 vcl::unohelper::TextDataObject* pDataObj = new vcl::unohelper::TextDataObject( sText );
580 SolarMutexReleaser aReleaser;
581 xClipboard->setContents( pDataObj, NULL );
582 Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( xClipboard, uno::UNO_QUERY );
583 if( xFlushableClipboard.is() )
584 xFlushableClipboard->flushClipboard();
586 bRet = true;
590 return bRet;
593 // XAccessibleEventBroadcaster
595 void SAL_CALL VCLXAccessibleListItem::addAccessibleEventListener( const Reference< XAccessibleEventListener >& xListener ) throw (RuntimeException, std::exception)
597 if (xListener.is())
599 if (!m_nClientId)
600 m_nClientId = comphelper::AccessibleEventNotifier::registerClient( );
601 comphelper::AccessibleEventNotifier::addEventListener( m_nClientId, xListener );
605 void SAL_CALL VCLXAccessibleListItem::removeAccessibleEventListener( const Reference< XAccessibleEventListener >& xListener ) throw (RuntimeException, std::exception)
607 if ( xListener.is() && m_nClientId )
609 sal_Int32 nListenerCount = comphelper::AccessibleEventNotifier::removeEventListener( m_nClientId, xListener );
610 if ( !nListenerCount )
612 // no listeners anymore
613 // -> revoke ourself. This may lead to the notifier thread dying (if we were the last client),
614 // and at least to us not firing any events anymore, in case somebody calls
615 // NotifyAccessibleEvent, again
616 if ( m_nClientId )
618 comphelper::AccessibleEventNotifier::TClientId nId( m_nClientId );
619 m_nClientId = 0;
620 comphelper::AccessibleEventNotifier::revokeClient( nId );
629 // AF (Oct. 29 2002): Return black as constant foreground color. This is an
630 // initial implementation and has to be substituted by code that determines
631 // the color that is actually used.
632 sal_Int32 SAL_CALL VCLXAccessibleListItem::getForeground()
633 throw (::com::sun::star::uno::RuntimeException, std::exception)
635 return COL_BLACK;
638 // AF (Oct. 29 2002): Return white as constant background color. This is an
639 // initial implementation and has to be substituted by code that determines
640 // the color that is actually used.
641 sal_Int32 SAL_CALL VCLXAccessibleListItem::getBackground()
642 throw (::com::sun::star::uno::RuntimeException, std::exception)
644 return COL_WHITE;
648 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */