22#include <com/sun/star/accessibility/XAccessible.hpp>
23#include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
24#include <com/sun/star/accessibility/XAccessibleEventListener.hpp>
25#include <com/sun/star/accessibility/XAccessibleComponent.hpp>
26#include <com/sun/star/accessibility/AccessibleRole.hpp>
27#include <com/sun/star/accessibility/AccessibleStateType.hpp>
99 if(lParam == OBJID_CLIENT )
104 if ( pRetIMAcc && lParam == OBJID_CLIENT )
106 LRESULT
result = LresultFromObject(IID_IAccessible, wParam, pRetIMAcc);
107 pRetIMAcc->Release();
120 if( pXAcc ==
nullptr)
125 XIdToAccObjHash::iterator pIndTemp =
XIdAccList.find( pXAcc );
129 return &(pIndTemp->second);
141 XHWNDToXAccHash::iterator iterResult =
HwndXAcc.find(hWnd);
144 XAccessible* pXAcc = iterResult->second;
169 if( pXAcc ==
nullptr)
173 pRContext = pXAcc->getAccessibleContext();
174 if( !pRContext.is() )
180 if(selfAccObj==
nullptr)
183 long dChildID = selfAccObj->
GetResID();
193 NotifyWinEvent( EVENT_OBJECT_FOCUS,hAcc, OBJID_CLIENT,dChildID );
197 NotifyWinEvent( EVENT_OBJECT_STATECHANGE,hAcc, OBJID_CLIENT,dChildID );
200 NotifyWinEvent( EVENT_OBJECT_STATECHANGE,hAcc, OBJID_CLIENT,dChildID );
203 NotifyWinEvent( EVENT_OBJECT_STATECHANGE,hAcc, OBJID_CLIENT,dChildID );
212 NotifyWinEvent( EVENT_OBJECT_FOCUS,hAcc, OBJID_CLIENT,dChildID );
216 if (pRContext->getAccessibleRole() == AccessibleRole::NOTIFICATION)
217 NotifyWinEvent(EVENT_SYSTEM_ALERT, hAcc, OBJID_CLIENT, dChildID);
220 NotifyWinEvent( EVENT_SYSTEM_MENUSTART,hAcc, OBJID_CLIENT,dChildID );
223 NotifyWinEvent( EVENT_SYSTEM_MENUEND,hAcc, OBJID_CLIENT,dChildID );
226 NotifyWinEvent( EVENT_SYSTEM_MENUPOPUPSTART,hAcc, OBJID_CLIENT,dChildID );
229 NotifyWinEvent( EVENT_SYSTEM_MENUPOPUPEND,hAcc, OBJID_CLIENT,dChildID );
232 NotifyWinEvent( EVENT_OBJECT_SELECTION,hAcc, OBJID_CLIENT,dChildID );
235 NotifyWinEvent( EVENT_OBJECT_SELECTIONADD,hAcc, OBJID_CLIENT,dChildID );
238 NotifyWinEvent( EVENT_OBJECT_SELECTIONREMOVE,hAcc, OBJID_CLIENT,dChildID );
241 NotifyWinEvent( EVENT_OBJECT_SELECTIONWITHIN,hAcc, OBJID_CLIENT,dChildID );
245 NotifyWinEvent( EVENT_OBJECT_VALUECHANGE,hAcc, OBJID_CLIENT,dChildID );
248 NotifyWinEvent( EVENT_OBJECT_NAMECHANGE,hAcc, OBJID_CLIENT,dChildID );
251 NotifyWinEvent( EVENT_OBJECT_DESCRIPTIONCHANGE,hAcc, OBJID_CLIENT,dChildID );
264 NotifyWinEvent( EVENT_OBJECT_FOCUS,hAcc, OBJID_CLIENT,dChildID );
267 NotifyWinEvent( EVENT_OBJECT_LOCATIONCHANGE,hAcc, OBJID_CLIENT,dChildID );
273 NotifyWinEvent( EVENT_OBJECT_SHOW,hAcc, OBJID_CLIENT,dChildID );
274 NotifyWinEvent( EVENT_SYSTEM_FOREGROUND,hAcc, OBJID_CLIENT,dChildID );
298 NotifyWinEvent( EVENT_OBJECT_REORDER,hAcc, OBJID_CLIENT,dChildID );
304 NotifyWinEvent( EVENT_OBJECT_DESTROY,hAcc, OBJID_CLIENT,dChildID );
307 NotifyWinEvent( EVENT_OBJECT_CREATE ,hAcc, OBJID_CLIENT,dChildID );
363 return pRContext->getAccessibleRole();
383 if (pAccObjOld && pAccObjOld != pAccObjNew)
410 [&pXAcc](XHWNDToXAccHash::value_type& rEntry) { return rEntry.second == pXAcc; });
449 if( pXAcc ==
nullptr )
457 XIdToAccObjHash::iterator temp =
XIdAccList.find(pXAcc);
479 if (accObj.
GetRole() == AccessibleRole::DOCUMENT ||
480 accObj.
GetRole() == AccessibleRole::DOCUMENT_PRESENTATION ||
481 accObj.
GetRole() == AccessibleRole::DOCUMENT_SPREADSHEET ||
482 accObj.
GetRole() == AccessibleRole::DOCUMENT_TEXT)
490 pListener->RemoveMeFromBroadcaster(
false);
528 if( pXAcc ==
nullptr)
530 pRContext = pXAcc->getAccessibleContext();
531 if( !pRContext.is() )
534 short role = pRContext->getAccessibleRole();
536 if(css::accessibility::AccessibleRole::DOCUMENT == role ||
537 css::accessibility::AccessibleRole::DOCUMENT_PRESENTATION == role ||
538 css::accessibility::AccessibleRole::DOCUMENT_SPREADSHEET == role ||
539 css::accessibility::AccessibleRole::DOCUMENT_TEXT == role)
547 const sal_Int64
nCount = pRContext->getAccessibleChildCount();
551 = pRContext->getAccessibleChild(
i);
552 XAccessible* mpAccessible = mxAccessible.get();
553 if(mpAccessible !=
nullptr)
596 if( pXAcc ==
nullptr)
599 pRContext = pXAcc->getAccessibleContext();
600 if( !pRContext.is() )
604 short nCurRole =
GetRole(pXAcc);
608 XIdToAccObjHash::iterator itXacc =
XIdAccList.find( pXAcc );
611 if (AccessibleRole::SHAPE == nCurRole)
619 XIdToAccObjHash::iterator itXaccParent =
XIdAccList.find( pParentXAcc );
630 if( pWnd ==
nullptr )
638 if( pWnd ==
nullptr )
649 if (pObj.
GetRole() == AccessibleRole::DOCUMENT ||
650 pObj.
GetRole() == AccessibleRole::DOCUMENT_PRESENTATION ||
651 pObj.
GetRole() == AccessibleRole::DOCUMENT_SPREADSHEET ||
652 pObj.
GetRole() == AccessibleRole::DOCUMENT_TEXT)
654 XHWNDToDocumentHash::iterator aIter =
XHWNDDocList.find(pWnd);
669 if (broadcaster.is())
672 broadcaster->addAccessibleEventListener(xListener);
681 XIdToAccObjHash::iterator pIndTemp =
XIdAccList.find( pXAcc );
723 switch( xContext->getAccessibleRole() )
725 case AccessibleRole::DIALOG:
728 case AccessibleRole::FRAME:
731 case AccessibleRole::WINDOW:
734 case AccessibleRole::ROOT_PANE:
738 case AccessibleRole::CANVAS:
739 case AccessibleRole::COMBO_BOX:
740 case AccessibleRole::DOCUMENT:
741 case AccessibleRole::DOCUMENT_PRESENTATION:
742 case AccessibleRole::DOCUMENT_SPREADSHEET:
743 case AccessibleRole::DOCUMENT_TEXT:
744 case AccessibleRole::END_NOTE:
745 case AccessibleRole::FILLER:
746 case AccessibleRole::FOOTNOTE:
747 case AccessibleRole::FOOTER:
748 case AccessibleRole::HEADER:
749 case AccessibleRole::LAYERED_PANE:
750 case AccessibleRole::MENU_BAR:
751 case AccessibleRole::POPUP_MENU:
752 case AccessibleRole::OPTION_PANE:
753 case AccessibleRole::PAGE_TAB:
754 case AccessibleRole::PAGE_TAB_LIST:
755 case AccessibleRole::PANEL:
756 case AccessibleRole::SCROLL_PANE:
757 case AccessibleRole::SPLIT_PANE:
758 case AccessibleRole::STATUS_BAR:
759 case AccessibleRole::TABLE_CELL:
760 case AccessibleRole::TOOL_BAR:
761 case AccessibleRole::VIEW_PORT:
764 case AccessibleRole::PARAGRAPH:
765 case AccessibleRole::HEADING:
769 case AccessibleRole::CHECK_BOX:
770 case AccessibleRole::ICON:
771 case AccessibleRole::LABEL:
772 case AccessibleRole::STATIC:
773 case AccessibleRole::NOTIFICATION:
774 case AccessibleRole::MENU_ITEM:
775 case AccessibleRole::CHECK_MENU_ITEM:
776 case AccessibleRole::RADIO_MENU_ITEM:
777 case AccessibleRole::PUSH_BUTTON:
778 case AccessibleRole::RADIO_BUTTON:
779 case AccessibleRole::SCROLL_BAR:
780 case AccessibleRole::SEPARATOR:
781 case AccessibleRole::TOGGLE_BUTTON:
782 case AccessibleRole::BUTTON_DROPDOWN:
783 case AccessibleRole::TOOL_TIP:
784 case AccessibleRole::SPIN_BOX:
785 case AccessibleRole::DATE_EDITOR:
789 case AccessibleRole::TEXT:
793 case AccessibleRole::MENU:
797 case AccessibleRole::SHAPE:
799 case AccessibleRole::EMBEDDED_OBJECT:
800 case AccessibleRole::GRAPHIC:
801 case AccessibleRole::TEXT_FRAME:
805 case AccessibleRole::LIST:
808 case AccessibleRole::TREE:
812 case AccessibleRole::COLUMN_HEADER:
813 case AccessibleRole::TABLE:
933 switch( xContext->getAccessibleRole() )
935 case AccessibleRole::DIALOG:
936 case AccessibleRole::FRAME:
937 case AccessibleRole::WINDOW:
938 case AccessibleRole::ROOT_PANE:
939 case AccessibleRole::CANVAS:
940 case AccessibleRole::COMBO_BOX:
941 case AccessibleRole::DOCUMENT:
942 case AccessibleRole::DOCUMENT_PRESENTATION:
943 case AccessibleRole::DOCUMENT_SPREADSHEET:
944 case AccessibleRole::DOCUMENT_TEXT:
945 case AccessibleRole::EMBEDDED_OBJECT:
946 case AccessibleRole::END_NOTE:
947 case AccessibleRole::FILLER:
948 case AccessibleRole::FOOTNOTE:
949 case AccessibleRole::FOOTER:
950 case AccessibleRole::GRAPHIC:
951 case AccessibleRole::GROUP_BOX:
952 case AccessibleRole::HEADER:
953 case AccessibleRole::LAYERED_PANE:
954 case AccessibleRole::MENU_BAR:
955 case AccessibleRole::POPUP_MENU:
956 case AccessibleRole::OPTION_PANE:
957 case AccessibleRole::PAGE_TAB:
958 case AccessibleRole::PAGE_TAB_LIST:
959 case AccessibleRole::PANEL:
960 case AccessibleRole::SCROLL_PANE:
961 case AccessibleRole::SPLIT_PANE:
962 case AccessibleRole::STATUS_BAR:
963 case AccessibleRole::TABLE_CELL:
964 case AccessibleRole::TEXT_FRAME:
965 case AccessibleRole::TOOL_BAR:
966 case AccessibleRole::VIEW_PORT:
967 case AccessibleRole::SHAPE:
969 case AccessibleRole::COLUMN_HEADER:
970 case AccessibleRole::TABLE:
974 case AccessibleRole::MENU:
1001 sal_Int64 nRState = xContext->getAccessibleStateSet();
1002 return nRState & AccessibleStateType::MANAGES_DESCENDANTS;
1033 XResIdToAccObjHash::iterator pIndTemp =
XResIdAccList.find( resID );
1065 const sal_Int64
nCount = xContext->getAccessibleChildCount();
1090 if (pRContext->getAccessibleRole() == AccessibleRole::TOGGLE_BUTTON)
1102 assert(pXAcc !=
nullptr);
1106 return xContext->getAccessibleRole();
1113 XHWNDToDocumentHash::iterator aIter;
1117 return aIter->second;
AccComponentEventListener is inherited from AccEventListener.
AccContainerEventListener is inherited from AccEventListener.
AccDialogEventListener is inherited from AccEventListener.
AccFrameEventListener is inherited from AccEventListener.
AccListEventListener is inherited from AccDescendantManagerEventListener.
AccObjectContainerEventListener is inherited from AccContainerEventListener.
XResIdToAccObjHash XResIdAccList
bool IsSpecialToolbarItem(css::accessibility::XAccessible *pXAcc)
static short GetRole(css::accessibility::XAccessible *pXAcc)
void UpdateValue(css::accessibility::XAccessible *pXAcc)
Set corresponding com object's value via XAccessible interface.
void DecreaseState(css::accessibility::XAccessible *pXAcc, sal_Int64 nState)
state is a combination integer, each bit of which represents a single state, such as focused,...
XIdToAccObjHash XIdAccList
void NotifyDestroy(css::accessibility::XAccessible *pXAcc)
Notify some object will be destroyed.
void SetAccName(css::accessibility::XAccessible *pXAcc, css::uno::Any newName)
Set corresponding com object's name via XAccessible interface and new name.
static bool IsStateManageDescendant(css::accessibility::XAccessible *pAccessible)
Judge if a XAccessible object has ManageDescendant event.
::rtl::Reference< AccEventListener > CreateAccEventListener(css::accessibility::XAccessible *pXAcc)
Create the corresponding listener.
void UpdateAccFocus(css::accessibility::XAccessible *newFocus)
Update focus object by new focused XAccessible interface.
AccObjectWinManager(AccObjectManagerAgent *Agent=nullptr)
constructor
IMAccessible * GetIMAccByXAcc(css::accessibility::XAccessible *pXAcc)
Query and get IAccessible interface by XAccessible interface from list.
short GetParentRole(css::accessibility::XAccessible *pXAcc)
Get Parent role by XAccessible interface.
static void DeleteAccChildNode(AccObject *pChild)
Delete child element from children list.
void DeleteFromHwndXAcc(css::accessibility::XAccessible const *pXAcc)
Delete XAccessible items in top window handle hashtable.
static void InsertAccChildNode(AccObject *pCurObj, AccObject *pParentObj, HWND pWnd)
Insert child object.
void IncreaseState(css::accessibility::XAccessible *pXAcc, sal_Int64 nState)
state is a combination integer, each bit of which represents a single state,such as focused,...
css::accessibility::XAccessible * oldFocus
css::accessibility::XAccessible * GetParentXAccessible(css::accessibility::XAccessible *pXAcc)
Get Parent XAccessible interface by XAccessible interface.
std::recursive_mutex m_Mutex
void SetValue(css::accessibility::XAccessible *pXAcc, css::uno::Any pAny)
Set corresponding com object's value via XAccessible interface and new value.
virtual ~AccObjectWinManager()
Destructor,clear all resource.
css::accessibility::XAccessible * GetAccDocByAccTopWin(css::accessibility::XAccessible *pXAcc)
XHWNDToDocumentHash XHWNDDocList
AccObjectManagerAgent * pAgent
long ImpleGenerateResID()
Generate a child ID, which is used for AT.
bool InsertAccObj(css::accessibility::XAccessible *pXAcc, css::accessibility::XAccessible *pParentXAcc, HWND pWnd)
Insert child object.
bool IsTopWinAcc(css::accessibility::XAccessible *pXAcc)
static rtl::Reference< AccEventListener > DeleteAccListener(AccObject *pAccObj)
Delete listener that inspects some XAccessible object.
void DeleteChildrenAccObj(css::accessibility::XAccessible *pAccObj)
Delete all children with the tree root of XAccessible pointer.
css::accessibility::XAccessible * GetAccDocByHWND(HWND hWnd)
IMAccessible * GetTopWindowIMAccessible(HWND hWnd)
get acc object of top window by its handle
void DeleteAccObj(css::accessibility::XAccessible *pXAcc)
Delete Acc object self.
LRESULT Get_ToATInterface(HWND hWnd, long lParam, WPARAM wParam)
Get valid com object interface when notifying some MSAA event.
void UpdateState(css::accessibility::XAccessible *pXAcc)
void UpdateChildState(css::accessibility::XAccessible *pXAcc)
void SaveTopWindowHandle(HWND hWnd, css::accessibility::XAccessible *pXAcc)
save the pair <topwindowhandle, XAccessible>
IMAccessible * GetIAccessibleFromResID(long resID)
Query and get IAccessible interface by child id from list.
void UpdateAccName(css::accessibility::XAccessible *pXAcc)
Set corresponding com object's accessible name via XAccessible interface and new name.
static bool IsContainer(css::accessibility::XAccessible *pAccessible)
Judge if a XAccessible object is a container object.
AccObject * GetAccObjByXAcc(css::accessibility::XAccessible *pXAcc)
Search AccObject by XAccessible pointer from our container.
bool InsertChildrenAccObj(css::accessibility::XAccessible *pXAcc, HWND pWnd=nullptr)
Insert all children of the current acc object.
bool NotifyAccEvent(css::accessibility::XAccessible *pXAcc, UnoMSAAEvent eEvent)
Simulate MSAA event via XAccessible interface and event type.
void UpdateAction(css::accessibility::XAccessible *pXAcc)
void UpdateName()
Update name property to com object.
void unsetFocus()
Unset self from focus object in parent child list.
void DecreaseState(sal_Int64 xState)
Decrease state of com object.
void UpdateAction()
Update default action property to com object.
void IncreaseState(sal_Int64 xState)
Increase state of com object.
void DeleteChild(AccObject *pChild)
Delete a child element.
void UpdateDefaultAction()
Set special default action description string via UNO role.
void SetParentObj(AccObject *pParentAccObj)
void UpdateState()
update state information from uno to com
void SetParentHWND(HWND hWnd)
void UpdateValue()
Update value property to com object.
short GetRole() const
Get role property via pAny.
void setFocus()
Set self to focus object in parent child list.
bool UpdateAccessibleInfoFromUnoToMSAA()
Public method to mapping information between MSAA and UNO.
void InsertChild(AccObject *pChild, short pos=LAST_CHILD)
Insert a child element.
void SetValue(css::uno::Any pAny)
Set value property via pAny.
AccObject * GetParentObj()
css::uno::Reference< css::accessibility::XAccessible > const & GetXAccessible()
::rtl::Reference< AccEventListener > SetListener(::rtl::Reference< AccEventListener > const &pListener)
void SetName(css::uno::Any newName)
Set name property via pAny.
IMAccessible * GetIMAccessible()
AccObject * NextChild()
Get next child element.
void UpdateValidWindow()
In order to windows API WindowFromAccessibleObject, we sometimes to set a pure top window accessible ...
AccParagraphEventListener is inherited from AccContainerEventListener.
AccTableEventListener is inherited from AccDescendantManagerEventListener.
AccTextComponentEventListener is inherited from AccComponentEventListener.
AccTreeEventListener is inherited from AccDescendantManagerEventListener.
AccWindowEventListener is inherited from AccEventListener.
long GenerateNewResID()
SubList stores those IDs that were ever generated and deleted, the method return the ID from subList ...
@ IA2_EVENT_TEXT_CARET_MOVED
The caret has moved to a new position.
@ IA2_EVENT_TEXT_COLUMN_CHANGED
The caret moved from one column to the next.
@ IA2_EVENT_PAGE_CHANGED
A slide changed in a presentation document or a page boundary was crossed in a word processing docume...
@ IA2_EVENT_TEXT_SELECTION_CHANGED
The text selection changed.
@ IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED
A table's row description changed.
@ IA2_EVENT_SECTION_CHANGED
The caret moved from one section to the next.
@ IA2_EVENT_ACTION_CHANGED
The change of the number or attributes of actions of an accessible object is signaled by events of th...
@ IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED
A table's column description changed.
@ IA2_EVENT_VISIBLE_DATA_CHANGED
A visible data event indicates the change of the visual appearance of an accessible object.
@ IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED
A table's column header changed.
@ IA2_EVENT_TABLE_ROW_HEADER_CHANGED
A table's row header changed.
@ IA2_EVENT_TABLE_MODEL_CHANGED
A table's data changed.
@ IA2_EVENT_TABLE_CAPTION_CHANGED
A table caption changed.
@ IA2_EVENT_TEXT_CHANGED
Deprecated.
@ IA2_EVENT_TABLE_SUMMARY_CHANGED
A table's summary changed.
OUString newName(std::u16string_view aNewPrefix, std::u16string_view aOldPrefix, std::u16string_view old_Name)
@ SELECTION_CHANGED_REMOVE
@ TABLE_ROW_DESCRIPTION_CHANGED
@ TABLE_ROW_HEADER_CHANGED
@ OBJECT_DESCRIPTIONCHANGE
@ TABLE_COLUMN_DESCRIPTION_CHANGED
@ SELECTION_CHANGED_WITHIN
@ TABLE_COLUMN_HEADER_CHANGED
@ ACTIVE_DESCENDANT_CHANGED