1*3a700b0aSSteve Yin /**************************************************************
2*3a700b0aSSteve Yin  *
3*3a700b0aSSteve Yin  * Licensed to the Apache Software Foundation (ASF) under one
4*3a700b0aSSteve Yin  * or more contributor license agreements.  See the NOTICE file
5*3a700b0aSSteve Yin  * distributed with this work for additional information
6*3a700b0aSSteve Yin  * regarding copyright ownership.  The ASF licenses this file
7*3a700b0aSSteve Yin  * to you under the Apache License, Version 2.0 (the
8*3a700b0aSSteve Yin  * "License"); you may not use this file except in compliance
9*3a700b0aSSteve Yin  * with the License.  You may obtain a copy of the License at
10*3a700b0aSSteve Yin  *
11*3a700b0aSSteve Yin  *   http://www.apache.org/licenses/LICENSE-2.0
12*3a700b0aSSteve Yin  *
13*3a700b0aSSteve Yin  * Unless required by applicable law or agreed to in writing,
14*3a700b0aSSteve Yin  * software distributed under the License is distributed on an
15*3a700b0aSSteve Yin  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*3a700b0aSSteve Yin  * KIND, either express or implied.  See the License for the
17*3a700b0aSSteve Yin  * specific language governing permissions and limitations
18*3a700b0aSSteve Yin  * under the License.
19*3a700b0aSSteve Yin  *
20*3a700b0aSSteve Yin  *************************************************************/
215fdc4257SSteve Yin 
225fdc4257SSteve Yin #include "AccObjectManagerAgent.hxx"
235fdc4257SSteve Yin #include "AccObjectWinManager.hxx"
245fdc4257SSteve Yin 
255fdc4257SSteve Yin #include "UAccCOM2.h"
265fdc4257SSteve Yin 
275fdc4257SSteve Yin using namespace com::sun::star::uno;
285fdc4257SSteve Yin using namespace com::sun::star::accessibility;
295fdc4257SSteve Yin 
305fdc4257SSteve Yin /**
315fdc4257SSteve Yin    * Construction/Destruction.
325fdc4257SSteve Yin    * @param
335fdc4257SSteve Yin    * @return
345fdc4257SSteve Yin    */
355fdc4257SSteve Yin AccObjectManagerAgent::AccObjectManagerAgent():
365fdc4257SSteve Yin         pWinManager(NULL)
375fdc4257SSteve Yin {
385fdc4257SSteve Yin     if( pWinManager == NULL )
395fdc4257SSteve Yin     {
405fdc4257SSteve Yin         pWinManager = AccObjectWinManager::CreateAccObjectWinManagerInstance(this);
415fdc4257SSteve Yin     }
425fdc4257SSteve Yin }
435fdc4257SSteve Yin 
445fdc4257SSteve Yin AccObjectManagerAgent::~AccObjectManagerAgent()
455fdc4257SSteve Yin {
465fdc4257SSteve Yin     delete pWinManager;
475fdc4257SSteve Yin     pWinManager = NULL;
485fdc4257SSteve Yin }
495fdc4257SSteve Yin 
505fdc4257SSteve Yin /**
515fdc4257SSteve Yin    * Interface of updating MSAA name when UNO name_changed event occurs.
525fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
535fdc4257SSteve Yin    * @return
545fdc4257SSteve Yin    */
555fdc4257SSteve Yin void  AccObjectManagerAgent::UpdateAccName( XAccessible* pXAcc )
565fdc4257SSteve Yin {
575fdc4257SSteve Yin     if( pWinManager )
585fdc4257SSteve Yin         pWinManager->UpdateAccName( pXAcc );
595fdc4257SSteve Yin }
605fdc4257SSteve Yin 
615fdc4257SSteve Yin /**
625fdc4257SSteve Yin    * Interface of updating MSAA name when UNO action changed event occurs.
635fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
645fdc4257SSteve Yin    * @return
655fdc4257SSteve Yin    */
665fdc4257SSteve Yin void  AccObjectManagerAgent::UpdateAction( XAccessible* pXAcc )
675fdc4257SSteve Yin {
685fdc4257SSteve Yin     if( pWinManager )
695fdc4257SSteve Yin         pWinManager->UpdateAction( pXAcc );
705fdc4257SSteve Yin }
715fdc4257SSteve Yin 
725fdc4257SSteve Yin /**
735fdc4257SSteve Yin    * Interface of updating MSAA value when UNO value_changed event occurs.
745fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
755fdc4257SSteve Yin    * @param pAny New value.
765fdc4257SSteve Yin    * @return
775fdc4257SSteve Yin    */
785fdc4257SSteve Yin void  AccObjectManagerAgent::UpdateValue( XAccessible* pXAcc, Any pAny )
795fdc4257SSteve Yin {
805fdc4257SSteve Yin     if( pWinManager )
815fdc4257SSteve Yin         pWinManager->SetValue( pXAcc, pAny );
825fdc4257SSteve Yin }
835fdc4257SSteve Yin 
845fdc4257SSteve Yin /**
855fdc4257SSteve Yin    * Interface of updating MSAA value when UNO value_changed event occurs.If we can not
865fdc4257SSteve Yin    * find new value,we'll get new value from pXAcc to update com value.
875fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
885fdc4257SSteve Yin    * @return
895fdc4257SSteve Yin    */
905fdc4257SSteve Yin void  AccObjectManagerAgent::UpdateValue( XAccessible* pXAcc )
915fdc4257SSteve Yin {
925fdc4257SSteve Yin     if( pWinManager )
935fdc4257SSteve Yin         pWinManager->UpdateValue( pXAcc );
945fdc4257SSteve Yin }
955fdc4257SSteve Yin 
965fdc4257SSteve Yin /**
975fdc4257SSteve Yin    * Interface of updating MSAA name when UNO name_changed event occurs.
985fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
995fdc4257SSteve Yin    * @param newName New UNO accessible name.
1005fdc4257SSteve Yin    * @return
1015fdc4257SSteve Yin    */
1025fdc4257SSteve Yin void  AccObjectManagerAgent::UpdateAccName( XAccessible* pXAcc, Any newName)
1035fdc4257SSteve Yin {
1045fdc4257SSteve Yin     if( pWinManager )
1055fdc4257SSteve Yin         pWinManager->SetAccName( pXAcc, newName );
1065fdc4257SSteve Yin }
1075fdc4257SSteve Yin 
1085fdc4257SSteve Yin 
1095fdc4257SSteve Yin /**
1105fdc4257SSteve Yin    * Interface of updating MSAA location when UNO location_changed event occurs.
1115fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
1125fdc4257SSteve Yin    * @param pXAcc Uno The top position of new location.
1135fdc4257SSteve Yin    * @param pXAcc Uno The left position of new location.
1145fdc4257SSteve Yin    * @param pXAcc Uno The width of new location.
1155fdc4257SSteve Yin    * @param pXAcc Uno The width of new location.
1165fdc4257SSteve Yin    * @return
1175fdc4257SSteve Yin    */
1185fdc4257SSteve Yin void  AccObjectManagerAgent::UpdateLocation( XAccessible* /* pXAcc */, long /*top*/, long /*left*/, long /*width*/, long /*height*/ )
1195fdc4257SSteve Yin {
1205fdc4257SSteve Yin #ifdef _IMPL_WIN
1215fdc4257SSteve Yin     if( pWinManager )
1225fdc4257SSteve Yin         pWinManager->SetLocation( pXAcc, top, left, width, height );
1235fdc4257SSteve Yin #endif
1245fdc4257SSteve Yin }
1255fdc4257SSteve Yin 
1265fdc4257SSteve Yin /**
1275fdc4257SSteve Yin    * Interface of updating MSAA name when UNO description_changed event occurs.
1285fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
1295fdc4257SSteve Yin    * @param newDesc New UNO accessible description.
1305fdc4257SSteve Yin    * @return
1315fdc4257SSteve Yin    */
1325fdc4257SSteve Yin void  AccObjectManagerAgent::UpdateDescription( XAccessible* pXAcc, Any newDesc )
1335fdc4257SSteve Yin {
1345fdc4257SSteve Yin     if( pWinManager )
1355fdc4257SSteve Yin         pWinManager->SetDescription( pXAcc, newDesc );
1365fdc4257SSteve Yin }
1375fdc4257SSteve Yin 
1385fdc4257SSteve Yin /**
1395fdc4257SSteve Yin    * When a new UNO XAccessible object is found by listener,we'll create a corresponding
1405fdc4257SSteve Yin    * com object and insert it to our manager list.
1415fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
1425fdc4257SSteve Yin    * @param pWnd The top window handle containing control.
1435fdc4257SSteve Yin    * @return If the method is correctly processed.
1445fdc4257SSteve Yin    */
1455fdc4257SSteve Yin unsigned char AccObjectManagerAgent::InsertAccObj( XAccessible* pXAcc,XAccessible* pParentXAcc,long pWnd)
1465fdc4257SSteve Yin {
1475fdc4257SSteve Yin     if( pWinManager )
1485fdc4257SSteve Yin         return (unsigned char)pWinManager->InsertAccObj( pXAcc, pParentXAcc,HWND((void*)pWnd) );
1495fdc4257SSteve Yin 
1505fdc4257SSteve Yin     return sal_False;
1515fdc4257SSteve Yin }
1525fdc4257SSteve Yin 
1535fdc4257SSteve Yin /**
1545fdc4257SSteve Yin    * save the pair <topwindowhandle, XAccessible>
1555fdc4257SSteve Yin    * @param hWnd, top window handle
1565fdc4257SSteve Yin    * @param pXAcc XAccessible interface for top window
1575fdc4257SSteve Yin    * @return void
1585fdc4257SSteve Yin    */
1595fdc4257SSteve Yin void AccObjectManagerAgent::SaveTopWindowHandle(long hWnd, com::sun::star::accessibility::XAccessible* pXAcc)
1605fdc4257SSteve Yin {
1615fdc4257SSteve Yin     if( pWinManager )
1625fdc4257SSteve Yin         pWinManager->SaveTopWindowHandle( HWND((void*)hWnd), pXAcc );
1635fdc4257SSteve Yin }
1645fdc4257SSteve Yin 
1655fdc4257SSteve Yin 
1665fdc4257SSteve Yin /**
1675fdc4257SSteve Yin    * When a UNO XAccessible object's new children are found by listener,we'll create
1685fdc4257SSteve Yin    * corresponding com objects and insert them to our manager list.
1695fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
1705fdc4257SSteve Yin    * @param pWnd The top window handle containing control.
1715fdc4257SSteve Yin    * @return If the method is correctly processed.
1725fdc4257SSteve Yin    */
1735fdc4257SSteve Yin unsigned char AccObjectManagerAgent::InsertChildrenAccObj( XAccessible* pXAcc,
1745fdc4257SSteve Yin         long pWnd)
1755fdc4257SSteve Yin {
1765fdc4257SSteve Yin     if( pWinManager )
1775fdc4257SSteve Yin         return (unsigned char)pWinManager->InsertChildrenAccObj( pXAcc, HWND((void*)pWnd) );
1785fdc4257SSteve Yin 
1795fdc4257SSteve Yin     return sal_False;
1805fdc4257SSteve Yin }
1815fdc4257SSteve Yin 
1825fdc4257SSteve Yin /**
1835fdc4257SSteve Yin    * When a new UNO XAccessible object is destroied,we'll delete its corresponding
1845fdc4257SSteve Yin    * com object and remove it from our manager list.
1855fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
1865fdc4257SSteve Yin    * @return
1875fdc4257SSteve Yin    */
1885fdc4257SSteve Yin void AccObjectManagerAgent::DeleteAccObj( XAccessible* pXAcc )
1895fdc4257SSteve Yin {
1905fdc4257SSteve Yin     if( pWinManager )
1915fdc4257SSteve Yin         pWinManager->DeleteAccObj( pXAcc );
1925fdc4257SSteve Yin }
1935fdc4257SSteve Yin 
1945fdc4257SSteve Yin /**
1955fdc4257SSteve Yin    * When new UNO children XAccessible objects are destroyed,we'll delete their
1965fdc4257SSteve Yin    * corresponding com objects and remove them from our manager list.
1975fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
1985fdc4257SSteve Yin    * @return
1995fdc4257SSteve Yin    */
2005fdc4257SSteve Yin void AccObjectManagerAgent::DeleteChildrenAccObj( XAccessible* pXAcc )
2015fdc4257SSteve Yin {
2025fdc4257SSteve Yin     if( pWinManager )
2035fdc4257SSteve Yin         pWinManager->DeleteChildrenAccObj( pXAcc );
2045fdc4257SSteve Yin }
2055fdc4257SSteve Yin 
2065fdc4257SSteve Yin /**
2075fdc4257SSteve Yin    * Interface of decreasing MSAA state when some UNO state is decreased.
2085fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
2095fdc4257SSteve Yin    * @param pState The lost state of control.
2105fdc4257SSteve Yin    * @return
2115fdc4257SSteve Yin    */
2125fdc4257SSteve Yin void AccObjectManagerAgent::DecreaseState( XAccessible* pXAcc,unsigned short pState )
2135fdc4257SSteve Yin {
2145fdc4257SSteve Yin     if(pWinManager)
2155fdc4257SSteve Yin     {
2165fdc4257SSteve Yin         pWinManager->DecreaseState( pXAcc,  pState );
2175fdc4257SSteve Yin     }
2185fdc4257SSteve Yin }
2195fdc4257SSteve Yin 
2205fdc4257SSteve Yin /**
2215fdc4257SSteve Yin    * Interface of increasing MSAA name when some UNO state is increased.
2225fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
2235fdc4257SSteve Yin    * @param pState The new state of control.
2245fdc4257SSteve Yin    * @return
2255fdc4257SSteve Yin    */
2265fdc4257SSteve Yin void AccObjectManagerAgent::IncreaseState( XAccessible* pXAcc,unsigned short pState )
2275fdc4257SSteve Yin {
2285fdc4257SSteve Yin     if(pWinManager)
2295fdc4257SSteve Yin     {
2305fdc4257SSteve Yin         pWinManager->IncreaseState( pXAcc,  pState );
2315fdc4257SSteve Yin     }
2325fdc4257SSteve Yin }
2335fdc4257SSteve Yin 
2345fdc4257SSteve Yin void  AccObjectManagerAgent::UpdateState( com::sun::star::accessibility::XAccessible* pXAcc )
2355fdc4257SSteve Yin {
2365fdc4257SSteve Yin     if(pWinManager)
2375fdc4257SSteve Yin         pWinManager->UpdateState(pXAcc);
2385fdc4257SSteve Yin }
2395fdc4257SSteve Yin 
2405fdc4257SSteve Yin /**
2415fdc4257SSteve Yin    * Interface of notify MSAA event when some UNO event occured.
2425fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
2435fdc4257SSteve Yin    * @param pEvent UNO event ID.
2445fdc4257SSteve Yin    * @return If the method is correctly processed.
2455fdc4257SSteve Yin    */
2465fdc4257SSteve Yin unsigned char AccObjectManagerAgent::NotifyAccEvent( short pEvent,XAccessible* pXAcc )
2475fdc4257SSteve Yin {
2485fdc4257SSteve Yin     if(pWinManager)
2495fdc4257SSteve Yin         return (unsigned char)pWinManager->NotifyAccEvent(pXAcc,pEvent);
2505fdc4257SSteve Yin 
2515fdc4257SSteve Yin     return sal_False;
2525fdc4257SSteve Yin }
2535fdc4257SSteve Yin 
2545fdc4257SSteve Yin /**
2555fdc4257SSteve Yin    * Judge whether a XAccessible object is a container object.
2565fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
2575fdc4257SSteve Yin    * @return If the method is correctly processed.
2585fdc4257SSteve Yin    */
2595fdc4257SSteve Yin unsigned short AccObjectManagerAgent::IsContainer( XAccessible* pXAcc )
2605fdc4257SSteve Yin {
2615fdc4257SSteve Yin     if(pWinManager)
2625fdc4257SSteve Yin         return (unsigned char)pWinManager->IsContainer(pXAcc);
2635fdc4257SSteve Yin 
2645fdc4257SSteve Yin     return sal_False;
2655fdc4257SSteve Yin }
2665fdc4257SSteve Yin 
2675fdc4257SSteve Yin /**
2685fdc4257SSteve Yin    * Return com object interface by querying XAccessible interface.
2695fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
2705fdc4257SSteve Yin    * @return Com interface.
2715fdc4257SSteve Yin    */
2725fdc4257SSteve Yin IMAccessible* AccObjectManagerAgent::GetIMAccByXAcc(XAccessible* pXAcc)
2735fdc4257SSteve Yin {
2745fdc4257SSteve Yin     if(pWinManager)
2755fdc4257SSteve Yin         return pWinManager->GetIMAccByXAcc(pXAcc);
2765fdc4257SSteve Yin 
2775fdc4257SSteve Yin     return NULL;
2785fdc4257SSteve Yin }
2795fdc4257SSteve Yin 
2805fdc4257SSteve Yin /**
2815fdc4257SSteve Yin    * Notify manger when a XAccessible object is destroying.
2825fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
2835fdc4257SSteve Yin    * @return.
2845fdc4257SSteve Yin    */
2855fdc4257SSteve Yin void  AccObjectManagerAgent::NotifyDestroy(XAccessible* pXAcc)
2865fdc4257SSteve Yin {
2875fdc4257SSteve Yin     if(pWinManager)
2885fdc4257SSteve Yin         pWinManager->NotifyDestroy(pXAcc);
2895fdc4257SSteve Yin }
2905fdc4257SSteve Yin 
2915fdc4257SSteve Yin /**
2925fdc4257SSteve Yin    * Return com object interface by querying child id.
2935fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
2945fdc4257SSteve Yin    * @return Com interface.
2955fdc4257SSteve Yin    */
2965fdc4257SSteve Yin void AccObjectManagerAgent::GetIAccessibleFromResID(long childID,IMAccessible** pIMAcc)
2975fdc4257SSteve Yin {
2985fdc4257SSteve Yin     if(pWinManager)
2995fdc4257SSteve Yin         *pIMAcc = pWinManager->GetIAccessibleFromResID(childID);
3005fdc4257SSteve Yin }
3015fdc4257SSteve Yin 
3025fdc4257SSteve Yin /**
3035fdc4257SSteve Yin    * Return object interface by querying interface.
3045fdc4257SSteve Yin    * @param pXAcc Uno XAccessible interface of control.
3055fdc4257SSteve Yin    * @return Com interface.
3065fdc4257SSteve Yin    */
3075fdc4257SSteve Yin unsigned char AccObjectManagerAgent::GetIAccessibleFromXAccessible(XAccessible* pXAcc, IAccessible** ppXI)
3085fdc4257SSteve Yin {
3095fdc4257SSteve Yin     if(pWinManager)
3105fdc4257SSteve Yin     {
3115fdc4257SSteve Yin         *ppXI = (IAccessible*)pWinManager->GetIMAccByXAcc(pXAcc);
3125fdc4257SSteve Yin         if(*ppXI)
3135fdc4257SSteve Yin             return sal_True;
3145fdc4257SSteve Yin     }
3155fdc4257SSteve Yin     return sal_False;
3165fdc4257SSteve Yin }
3175fdc4257SSteve Yin 
3185fdc4257SSteve Yin XAccessible* AccObjectManagerAgent::GetParentXAccessible( XAccessible* pXAcc )
3195fdc4257SSteve Yin {
3205fdc4257SSteve Yin     if(pWinManager)
3215fdc4257SSteve Yin         return pWinManager->GetParentXAccessible( pXAcc );
3225fdc4257SSteve Yin 
3235fdc4257SSteve Yin     return NULL;
3245fdc4257SSteve Yin }
3255fdc4257SSteve Yin 
3265fdc4257SSteve Yin short AccObjectManagerAgent::GetParentRole( XAccessible* pXAcc )
3275fdc4257SSteve Yin {
3285fdc4257SSteve Yin     if(pWinManager)
3295fdc4257SSteve Yin         return pWinManager->GetParentRole( pXAcc );
3305fdc4257SSteve Yin 
3315fdc4257SSteve Yin     return -1;
3325fdc4257SSteve Yin }
3335fdc4257SSteve Yin 
3345fdc4257SSteve Yin void AccObjectManagerAgent::UpdateDescription( XAccessible* pXAcc )
3355fdc4257SSteve Yin {
3365fdc4257SSteve Yin     if(pWinManager)
3375fdc4257SSteve Yin         pWinManager->UpdateDescription( pXAcc );
3385fdc4257SSteve Yin }
3395fdc4257SSteve Yin 
3405fdc4257SSteve Yin void AccObjectManagerAgent::UpdateChildState(com::sun::star::accessibility::XAccessible* pXAcc)
3415fdc4257SSteve Yin {
3425fdc4257SSteve Yin     if(pWinManager)
3435fdc4257SSteve Yin         pWinManager->UpdateChildState( pXAcc );
3445fdc4257SSteve Yin }
3455fdc4257SSteve Yin 
3465fdc4257SSteve Yin 
3475fdc4257SSteve Yin bool AccObjectManagerAgent::IsSpecialToolboItem(com::sun::star::accessibility::XAccessible* pXAcc)
3485fdc4257SSteve Yin {
3495fdc4257SSteve Yin     if(pWinManager)
3505fdc4257SSteve Yin         return pWinManager->IsSpecialToolboItem( pXAcc );
3515fdc4257SSteve Yin 
3525fdc4257SSteve Yin     return false;
3535fdc4257SSteve Yin }
3545fdc4257SSteve Yin 
3555fdc4257SSteve Yin short AccObjectManagerAgent::GetRole(com::sun::star::accessibility::XAccessible* pXAcc)
3565fdc4257SSteve Yin {
3575fdc4257SSteve Yin     if(pWinManager)
3585fdc4257SSteve Yin         return pWinManager->GetRole( pXAcc );
3595fdc4257SSteve Yin 
3605fdc4257SSteve Yin     return -1;
3615fdc4257SSteve Yin }
3625fdc4257SSteve Yin 
3635fdc4257SSteve Yin XAccessible* AccObjectManagerAgent::GetAccDocByAccTopWin( XAccessible* pXAcc )
3645fdc4257SSteve Yin {
3655fdc4257SSteve Yin     if (pWinManager)
3665fdc4257SSteve Yin     {
3675fdc4257SSteve Yin         return pWinManager->GetAccDocByAccTopWin( pXAcc );
3685fdc4257SSteve Yin     }
3695fdc4257SSteve Yin     return NULL;
3705fdc4257SSteve Yin }
3715fdc4257SSteve Yin bool AccObjectManagerAgent::IsTopWinAcc( com::sun::star::accessibility::XAccessible* pXAcc )
3725fdc4257SSteve Yin {
3735fdc4257SSteve Yin     if (pWinManager)
3745fdc4257SSteve Yin     {
3755fdc4257SSteve Yin         return pWinManager->IsTopWinAcc( pXAcc );
3765fdc4257SSteve Yin     }
3775fdc4257SSteve Yin     return NULL;
3785fdc4257SSteve Yin }
3795fdc4257SSteve Yin 
3805fdc4257SSteve Yin bool AccObjectManagerAgent::IsStateManageDescendant(com::sun::star::accessibility::XAccessible* pXAcc)
3815fdc4257SSteve Yin {
3825fdc4257SSteve Yin     if(pWinManager)
3835fdc4257SSteve Yin         return pWinManager->IsStateManageDescendant( pXAcc );
3845fdc4257SSteve Yin 
3855fdc4257SSteve Yin     return sal_False;
3865fdc4257SSteve Yin }
387