From 4bd1061965b5138ff4496a78eef02ec2f65eb01c Mon Sep 17 00:00:00 2001 From: "bolian.yin%sun.com" Date: Thu, 22 May 2003 04:00:56 +0000 Subject: [PATCH] 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 --- .../browser/gtk/src/EmbedPrivate.cpp | 35 +++++++++++++++++++ .../embedding/browser/gtk/src/EmbedPrivate.h | 4 +++ mozilla/embedding/browser/gtk/src/Makefile.in | 4 +++ .../browser/gtk/src/gtkmozembed2.cpp | 22 ++++++++++++ 4 files changed, 65 insertions(+) diff --git a/mozilla/embedding/browser/gtk/src/EmbedPrivate.cpp b/mozilla/embedding/browser/gtk/src/EmbedPrivate.cpp index 0b0fa84319d..5ae17c31e4c 100644 --- a/mozilla/embedding/browser/gtk/src/EmbedPrivate.cpp +++ b/mozilla/embedding/browser/gtk/src/EmbedPrivate.cpp @@ -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 accService = + do_GetService("@mozilla.org/accessibilityService;1"); + if (accService) { + //get current document + nsCOMPtr domDoc; + mNavigation->GetDocument(getter_AddRefs(domDoc)); + NS_ENSURE_TRUE(domDoc, nsnull); + + nsCOMPtr domNode(do_QueryInterface(domDoc)); + NS_ENSURE_TRUE(domNode, nsnull); + + nsCOMPtr 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) diff --git a/mozilla/embedding/browser/gtk/src/EmbedPrivate.h b/mozilla/embedding/browser/gtk/src/EmbedPrivate.h index 8c0f90ebc7f..24c1fe74baa 100644 --- a/mozilla/embedding/browser/gtk/src/EmbedPrivate.h +++ b/mozilla/embedding/browser/gtk/src/EmbedPrivate.h @@ -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 diff --git a/mozilla/embedding/browser/gtk/src/Makefile.in b/mozilla/embedding/browser/gtk/src/Makefile.in index ed43bf86fd6..3448906c9be 100644 --- a/mozilla/embedding/browser/gtk/src/Makefile.in +++ b/mozilla/embedding/browser/gtk/src/Makefile.in @@ -46,6 +46,10 @@ REQUIRES = xpcom \ profdirserviceprovider \ $(NULL) +ifdef ACCESSIBILITY +REQUIRES += accessibility +endif + CPPSRCS = \ gtkmozembed2.cpp \ EmbedPrivate.cpp \ diff --git a/mozilla/embedding/browser/gtk/src/gtkmozembed2.cpp b/mozilla/embedding/browser/gtk/src/gtkmozembed2.cpp index 54fd8cae043..14f61a04e84 100644 --- a/mozilla/embedding/browser/gtk/src/gtkmozembed2.cpp +++ b/mozilla/embedding/browser/gtk/src/gtkmozembed2.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,