From: Esme Povirk esme@codeweavers.com
--- dlls/comctl32/tab.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c index 8943d9dce7c..03187046d15 100644 --- a/dlls/comctl32/tab.c +++ b/dlls/comctl32/tab.c @@ -271,6 +271,10 @@ static inline LRESULT TAB_SetCurSel (TAB_INFO *infoPtr, INT iItem)
TAB_EnsureSelectionVisible(infoPtr); TAB_InvalidateTabArea(infoPtr); + if (iItem >= 0) + NotifyWinEvent(EVENT_OBJECT_SELECTION, infoPtr->hwnd, OBJID_CLIENT, iItem + 1); + else + NotifyWinEvent(EVENT_OBJECT_SELECTION, infoPtr->hwnd, OBJID_CLIENT, 0); }
return prevItem; @@ -286,6 +290,8 @@ static LRESULT TAB_SetCurFocus (TAB_INFO *infoPtr, INT iItem) infoPtr->iSelected = -1; TAB_SendSimpleNotify(infoPtr, TCN_SELCHANGE); TAB_InvalidateTabArea(infoPtr); + if (!(infoPtr->dwStyle & TCS_BUTTONS)) + NotifyWinEvent(EVENT_OBJECT_SELECTION, infoPtr->hwnd, OBJID_CLIENT, 0); } } else if (iItem < infoPtr->uNumItem) { @@ -306,6 +312,7 @@ static LRESULT TAB_SetCurFocus (TAB_INFO *infoPtr, INT iItem) InvalidateRect(infoPtr->hwnd, &r, FALSE);
TAB_SendSimpleNotify(infoPtr, TCN_FOCUSCHANGE); + NotifyWinEvent(EVENT_OBJECT_FOCUS, infoPtr->hwnd, OBJID_CLIENT, iItem + 1); } } else { INT oldFocus = infoPtr->uFocus; @@ -320,6 +327,7 @@ static LRESULT TAB_SetCurFocus (TAB_INFO *infoPtr, INT iItem) infoPtr->iSelected = iItem; TAB_EnsureSelectionVisible(infoPtr); TAB_InvalidateTabArea(infoPtr); + NotifyWinEvent(EVENT_OBJECT_SELECTION, infoPtr->hwnd, OBJID_CLIENT, iItem + 1); } } } @@ -2635,6 +2643,9 @@ TAB_InsertItemT (TAB_INFO *infoPtr, INT iItem, const TCITEMW *pti, BOOL bUnicode else InvalidateRect(infoPtr->hwnd, NULL, TRUE);
+ /* The last item is always the "new" MSAA object. */ + NotifyWinEvent(EVENT_OBJECT_CREATE, infoPtr->hwnd, OBJID_CLIENT, infoPtr->uNumItem); + TRACE("[%p]: added item %d %s\n", infoPtr->hwnd, iItem, debugstr_w(item->pszText));
@@ -2861,6 +2872,9 @@ static LRESULT TAB_DeleteItem (TAB_INFO *infoPtr, INT iItem) /* reposition and repaint tabs */ TAB_SetItemBounds(infoPtr);
+ /* The last item is always the destroyed MSAA object */ + NotifyWinEvent(EVENT_OBJECT_DESTROY, infoPtr->hwnd, OBJID_CLIENT, infoPtr->uNumItem + 1); + return TRUE; }