diff --git a/mozilla/accessible/src/atk/nsDocAccessibleWrap.cpp b/mozilla/accessible/src/atk/nsDocAccessibleWrap.cpp index e29c1c1fd44..09ebed99513 100644 --- a/mozilla/accessible/src/atk/nsDocAccessibleWrap.cpp +++ b/mozilla/accessible/src/atk/nsDocAccessibleWrap.cpp @@ -349,6 +349,7 @@ NS_IMETHODIMP nsDocAccessibleWrap::FireToolkitEvent(PRUint32 aEvent, case nsIAccessibleEvent::EVENT_ATK_LINK_SELECTED: MAI_LOG_DEBUG(("\n\nReceived: EVENT_ATK_LINK_SELECTED\n")); + atk_focus_tracker_notify(accWrap->GetAtkObject()); g_signal_emit_by_name(accWrap->GetAtkObject(), "link_selected", // Selected link index diff --git a/mozilla/accessible/src/base/nsRootAccessible.cpp b/mozilla/accessible/src/base/nsRootAccessible.cpp index e28f1feffd2..7bc7ed3e738 100644 --- a/mozilla/accessible/src/base/nsRootAccessible.cpp +++ b/mozilla/accessible/src/base/nsRootAccessible.cpp @@ -46,6 +46,7 @@ #include "nsIDOMEventListener.h" #include "nsIDOMEventTarget.h" #include "nsIDOMHTMLAnchorElement.h" +#include "nsIDOMHTMLImageElement.h" #include "nsIDOMHTMLInputElement.h" #include "nsIDOMHTMLSelectElement.h" #include "nsIDOMNSEvent.h" @@ -524,6 +525,25 @@ NS_IMETHODIMP nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent) #ifdef MOZ_ACCESSIBILITY_ATK nsCOMPtr anchorElement(do_QueryInterface(targetNode)); + // For ATK, check whether this link is for an image. + // If so, fire event for the image. + if (anchorElement) { + nsCOMPtr childNode; + if (NS_SUCCEEDED(targetNode->GetFirstChild(getter_AddRefs(childNode)))) { + while (childNode) { + nsCOMPtr imgNode(do_QueryInterface(childNode)); + if (imgNode) { + anchorElement = nsnull; // ignore the link + targetNode = childNode; // only fire event for image + break; + } + nsCOMPtr tmpNode; + tmpNode.swap(childNode); + tmpNode->GetNextSibling(getter_AddRefs(childNode)); + } + } + } + if (anchorElement) { nsCOMPtr blockNode; // For ATK, we don't create any individual object for hyperlink, use its parent who has block frame instead @@ -789,7 +809,7 @@ NS_IMETHODIMP nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent) else if (anchorElement) { nsCOMPtr hyperText(do_QueryInterface(accessible)); if (hyperText) { - nsCOMPtr focusedNode(do_QueryInterface(anchorElement)); + nsCOMPtr focusedNode(do_QueryInterface(anchorElement)); NS_IF_RELEASE(gLastFocusedNode); gLastFocusedNode = focusedNode; NS_IF_ADDREF(gLastFocusedNode);