Bug 205594, embedded mozilla gtk2 is not accessibility enabled.
r=blizzard. The Accessibility Gtk2 patch, is not for Mozilla Default Build. git-svn-id: svn://10.0.0.236/trunk@142742 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -67,6 +67,11 @@
|
||||
#include "GtkPromptService.h"
|
||||
#endif
|
||||
|
||||
#ifdef MOZ_ACCESSIBILITY_ATK
|
||||
#include "nsIAccessibilityService.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#endif
|
||||
|
||||
#ifdef _BUILD_STATIC_BIN
|
||||
#include "nsStaticComponent.h"
|
||||
nsresult PR_CALLBACK
|
||||
@@ -828,6 +833,36 @@ EmbedPrivate::GetPIDOMWindow(nsPIDOMWindow **aPIWin)
|
||||
|
||||
}
|
||||
|
||||
#ifdef MOZ_ACCESSIBILITY_ATK
|
||||
void *
|
||||
EmbedPrivate::GetAtkObjectForCurrentDocument()
|
||||
{
|
||||
if (!mNavigation)
|
||||
return nsnull;
|
||||
|
||||
nsCOMPtr<nsIAccessibilityService> accService =
|
||||
do_GetService("@mozilla.org/accessibilityService;1");
|
||||
if (accService) {
|
||||
//get current document
|
||||
nsCOMPtr<nsIDOMDocument> domDoc;
|
||||
mNavigation->GetDocument(getter_AddRefs(domDoc));
|
||||
NS_ENSURE_TRUE(domDoc, nsnull);
|
||||
|
||||
nsCOMPtr<nsIDOMNode> domNode(do_QueryInterface(domDoc));
|
||||
NS_ENSURE_TRUE(domNode, nsnull);
|
||||
|
||||
nsCOMPtr<nsIAccessible> acc;
|
||||
accService->GetAccessibleFor(domNode, getter_AddRefs(acc));
|
||||
NS_ENSURE_TRUE(acc, nsnull);
|
||||
|
||||
void *atkObj = nsnull;
|
||||
if (NS_SUCCEEDED(acc->GetNativeInterface(&atkObj)))
|
||||
return atkObj;
|
||||
}
|
||||
return nsnull;
|
||||
}
|
||||
#endif /* MOZ_ACCESSIBILITY_ATK */
|
||||
|
||||
/* static */
|
||||
nsresult
|
||||
EmbedPrivate::StartupProfile(void)
|
||||
|
||||
@@ -104,6 +104,10 @@ class EmbedPrivate {
|
||||
void ChildFocusIn (void);
|
||||
void ChildFocusOut(void);
|
||||
|
||||
#ifdef MOZ_ACCESSIBILITY_ATK
|
||||
void *GetAtkObjectForCurrentDocument();
|
||||
#endif
|
||||
|
||||
GtkMozEmbed *mOwningWidget;
|
||||
|
||||
// all of the objects that we own
|
||||
|
||||
@@ -46,6 +46,10 @@ REQUIRES = xpcom \
|
||||
profdirserviceprovider \
|
||||
$(NULL)
|
||||
|
||||
ifdef ACCESSIBILITY
|
||||
REQUIRES += accessibility
|
||||
endif
|
||||
|
||||
CPPSRCS = \
|
||||
gtkmozembed2.cpp \
|
||||
EmbedPrivate.cpp \
|
||||
|
||||
@@ -194,6 +194,10 @@ gtk_moz_embed_map(GtkWidget *widget);
|
||||
static void
|
||||
gtk_moz_embed_unmap(GtkWidget *widget);
|
||||
|
||||
#ifdef MOZ_ACCESSIBILITY_ATK
|
||||
static AtkObject* gtk_moz_embed_get_accessible (GtkWidget *widget);
|
||||
#endif
|
||||
|
||||
static gint
|
||||
handle_child_focus_in(GtkWidget *aWidget,
|
||||
GdkEventFocus *aGdkFocusEvent,
|
||||
@@ -282,6 +286,10 @@ gtk_moz_embed_class_init(GtkMozEmbedClass *klass)
|
||||
widget_class->map = gtk_moz_embed_map;
|
||||
widget_class->unmap = gtk_moz_embed_unmap;
|
||||
|
||||
#ifdef MOZ_ACCESSIBILITY_ATK
|
||||
widget_class->get_accessible = gtk_moz_embed_get_accessible;
|
||||
#endif
|
||||
|
||||
object_class->destroy = gtk_moz_embed_destroy;
|
||||
|
||||
// set up our signals
|
||||
@@ -697,6 +705,20 @@ gtk_moz_embed_unmap(GtkWidget *widget)
|
||||
embedPrivate->Hide();
|
||||
}
|
||||
|
||||
#ifdef MOZ_ACCESSIBILITY_ATK
|
||||
static AtkObject*
|
||||
gtk_moz_embed_get_accessible (GtkWidget *widget)
|
||||
{
|
||||
g_return_val_if_fail(widget != NULL, NULL);
|
||||
g_return_val_if_fail(GTK_IS_MOZ_EMBED(widget), NULL);
|
||||
|
||||
GtkMozEmbed *embed = GTK_MOZ_EMBED(widget);;
|
||||
EmbedPrivate *embedPrivate = (EmbedPrivate *)embed->data;
|
||||
return NS_STATIC_CAST(AtkObject *,
|
||||
embedPrivate->GetAtkObjectForCurrentDocument());
|
||||
}
|
||||
#endif /* MOZ_ACCESSIBILITY_ATK */
|
||||
|
||||
static gint
|
||||
handle_child_focus_in(GtkWidget *aWidget,
|
||||
GdkEventFocus *aGdkFocusEvent,
|
||||
|
||||
Reference in New Issue
Block a user