From a5e1837869391ff21ccccf035ef936b998cb5dc0 Mon Sep 17 00:00:00 2001 From: Ginn Chen Date: Thu, 3 Jul 2008 15:10:16 +0800 Subject: [PATCH] Bug 441233 Missing focus events in Thunderbird account wizard dialog r=surkov.alexander --- accessible/src/atk/nsAccessibleWrap.cpp | 15 +++++++++------ accessible/src/base/nsRootAccessible.h | 6 +++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/accessible/src/atk/nsAccessibleWrap.cpp b/accessible/src/atk/nsAccessibleWrap.cpp index 7a88684a9..2e3328987 100644 --- a/accessible/src/atk/nsAccessibleWrap.cpp +++ b/accessible/src/atk/nsAccessibleWrap.cpp @@ -1316,19 +1316,22 @@ nsAccessibleWrap::FirePlatformEvent(nsIAccessibleEvent *aEvent) case nsIAccessibleEvent::EVENT_WINDOW_ACTIVATE: { MAI_LOG_DEBUG(("\n\nReceived: EVENT_WINDOW_ACTIVATED\n")); - nsDocAccessibleWrap *accDocWrap = - static_cast(accessible.get()); - accDocWrap->mActivated = PR_TRUE; + nsRootAccessible *rootAcc = + static_cast(accessible.get()); + rootAcc->mActivated = PR_TRUE; guint id = g_signal_lookup ("activate", MAI_TYPE_ATK_OBJECT); g_signal_emit(atkObj, id, 0); + + // Always fire a current focus event after activation. + rootAcc->FireCurrentFocusEvent(); } break; case nsIAccessibleEvent::EVENT_WINDOW_DEACTIVATE: { MAI_LOG_DEBUG(("\n\nReceived: EVENT_WINDOW_DEACTIVATED\n")); - nsDocAccessibleWrap *accDocWrap = - static_cast(accessible.get()); - accDocWrap->mActivated = PR_FALSE; + nsRootAccessible *rootAcc = + static_cast(accessible.get()); + rootAcc->mActivated = PR_FALSE; guint id = g_signal_lookup ("deactivate", MAI_TYPE_ATK_OBJECT); g_signal_emit(atkObj, id, 0); } break; diff --git a/accessible/src/base/nsRootAccessible.h b/accessible/src/base/nsRootAccessible.h index c84a5a208..2a6702168 100644 --- a/accessible/src/base/nsRootAccessible.h +++ b/accessible/src/base/nsRootAccessible.h @@ -107,6 +107,11 @@ class nsRootAccessible : public nsDocAccessibleWrap, nsIDOMEvent *aFocusEvent, PRBool aForceEvent = PR_FALSE, PRBool aIsAsynch = PR_FALSE); + /** + * Fire an accessible focus event for the current focused node, + * if there is a focus. + */ + void FireCurrentFocusEvent(); nsCaretAccessible *GetCaretAccessible(); @@ -121,7 +126,6 @@ class nsRootAccessible : public nsDocAccessibleWrap, nsIDOMNode* aTargetNode); static void GetTargetNode(nsIDOMEvent *aEvent, nsIDOMNode **aTargetNode); void TryFireEarlyLoadEvent(nsIDOMNode *aDocNode); - void FireCurrentFocusEvent(); void GetChromeEventHandler(nsIDOMEventTarget **aChromeTarget); /** -- 2.11.4.GIT