mozilla-a11y.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Sun, 25 Dec 2011 10:36:35 +0100
changeset 367 3fabd9f66322
parent 358 b28670af14d5
child 369 04fc00b85b21
permissions -rw-r--r--
begin Firefox 10 cycle
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
358
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
     1
# HG changeset patch
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
     2
# User Michael Gorse <mgorse@suse.com>
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
     3
# Parent d02253d1e8217008dfa26e6e2a901b6a8b75e989
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
     4
a11y only enabled from Gnome 2's GConf setting
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
     5
https://bugzilla.novell.com/show_bug.cgi?id=732898
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
     6
https://bugzilla.mozilla.org/show_bug.cgi?id=693343
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
     7
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
     8
diff --git a/accessible/src/atk/Makefile.in b/accessible/src/atk/Makefile.in
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
     9
--- a/accessible/src/atk/Makefile.in
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    10
+++ b/accessible/src/atk/Makefile.in
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    11
@@ -87,15 +87,19 @@ EXPORTS = \
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    12
 # we want to force the creation of a static lib.
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    13
 FORCE_STATIC_LIB = 1
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    14
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    15
 include $(topsrcdir)/config/rules.mk
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    16
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    17
 CFLAGS		+= $(MOZ_GTK2_CFLAGS)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    18
 CXXFLAGS	+= $(MOZ_GTK2_CFLAGS)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    19
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    20
+ifdef MOZ_ENABLE_DBUS
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    21
+CXXFLAGS += $(MOZ_DBUS_CFLAGS)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    22
+endif
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    23
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    24
 LOCAL_INCLUDES += \
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    25
   -I$(srcdir) \
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    26
   -I$(srcdir)/../base \
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    27
   -I$(srcdir)/../html \
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    28
   -I$(srcdir)/../xul \
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    29
   -I$(topsrcdir)/other-licenses/atk-1.0 \
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    30
   $(NULL)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    31
diff --git a/accessible/src/atk/nsApplicationAccessibleWrap.cpp b/accessible/src/atk/nsApplicationAccessibleWrap.cpp
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    32
--- a/accessible/src/atk/nsApplicationAccessibleWrap.cpp
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    33
+++ b/accessible/src/atk/nsApplicationAccessibleWrap.cpp
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    34
@@ -47,29 +47,27 @@
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    35
 #include "nsIPrefBranch.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    36
 #include "nsIServiceManager.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    37
 #include "nsAutoPtr.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    38
 #include "nsAccessibilityService.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    39
 #include "AtkSocketAccessible.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    40
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    41
 #include <gtk/gtk.h>
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    42
 #include <atk/atk.h>
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    43
+#include <dbus/dbus.h>
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    44
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    45
+using namespace mozilla::a11y;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    46
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    47
 typedef GType (* AtkGetTypeType) (void);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    48
 GType g_atk_hyperlink_impl_type = G_TYPE_INVALID;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    49
-static bool sATKChecked = false;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    50
+static PRBool sATKChecked = PR_FALSE;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    51
 static PRLibrary *sATKLib = nsnull;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    52
 static const char sATKLibName[] = "libatk-1.0.so.0";
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    53
 static const char sATKHyperlinkImplGetTypeSymbol[] =
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    54
     "atk_hyperlink_impl_get_type";
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    55
-static const char sAccEnv [] = "GNOME_ACCESSIBILITY";
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    56
-static const char sSysPrefService [] =
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    57
-    "@mozilla.org/system-preference-service;1";
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    58
-static const char sAccessibilityKey [] =
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    59
-    "config.use_system_prefs.accessibility";
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    60
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    61
 /* gail function pointer */
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    62
 static guint (* gail_add_global_event_listener) (GSignalEmissionHook listener,
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    63
                                                  const gchar *event_type);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    64
 static void (* gail_remove_global_event_listener) (guint remove_listener);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    65
 static void (* gail_remove_key_event_listener) (guint remove_listener);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    66
 static AtkObject * (*gail_get_root) (void);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    67
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    68
@@ -609,36 +607,17 @@ toplevel_event_watcher(GSignalInvocation
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    69
   }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    70
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    71
   return TRUE;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    72
 }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    73
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    74
 PRBool
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    75
 nsApplicationAccessibleWrap::Init()
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    76
 {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    77
-    // XXX following code is copied from widget/src/gtk2/nsWindow.cpp
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    78
-    // we should put it to somewhere that can be used from both modules
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    79
-    // see bug 390761
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    80
-
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    81
-    // check if accessibility enabled/disabled by environment variable
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    82
-    PRBool isGnomeATEnabled = PR_FALSE;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    83
-    const char *envValue = PR_GetEnv(sAccEnv);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    84
-    if (envValue) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    85
-        isGnomeATEnabled = !!atoi(envValue);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    86
-    } else {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    87
-        //check gconf-2 setting
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    88
-        nsresult rv;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    89
-        nsCOMPtr<nsIPrefBranch> sysPrefService =
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    90
-            do_GetService(sSysPrefService, &rv);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    91
-        if (NS_SUCCEEDED(rv) && sysPrefService) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    92
-            sysPrefService->GetBoolPref(sAccessibilityKey, &isGnomeATEnabled);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    93
-        }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    94
-    }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    95
-
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    96
-    if (isGnomeATEnabled) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    97
+    if (ShouldA11yBeEnabled()) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    98
         // load and initialize gail library
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
    99
         nsresult rv = LoadGtkModule(sGail);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   100
         if (NS_SUCCEEDED(rv)) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   101
             (*sGail.init)();
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   102
         }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   103
         else {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   104
             MAI_LOG_DEBUG(("Fail to load lib: %s\n", sGail.libName));
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   105
         }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   106
@@ -877,8 +856,129 @@ LoadGtkModule(GnomeAccessibilityModule& 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   107
                        aModule.init ? aModule.shutdownName : aModule.initName,
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   108
                        aModule.libName));
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   109
         PR_UnloadLibrary(aModule.lib);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   110
         aModule.lib = NULL;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   111
         return NS_ERROR_FAILURE;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   112
     }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   113
     return NS_OK;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   114
 }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   115
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   116
+namespace mozilla {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   117
+namespace a11y {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   118
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   119
+#ifdef MOZ_ENABLE_DBUS
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   120
+static DBusPendingCall *a11yPendingCall = NULL;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   121
+#endif
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   122
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   123
+void
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   124
+PreInit()
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   125
+{
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   126
+  static PRBool sChecked = FALSE;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   127
+  if (sChecked)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   128
+    return;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   129
+  sChecked = TRUE;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   130
+  DBusError error;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   131
+  dbus_error_init(&error);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   132
+  DBusConnection* bus = dbus_bus_get(DBUS_BUS_SESSION, &error);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   133
+  if (!bus)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   134
+    return;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   135
+  dbus_connection_set_exit_on_disconnect(bus, FALSE);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   136
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   137
+  DBusMessage *message;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   138
+  message = dbus_message_new_method_call("org.a11y.Bus", "/org/a11y/bus",
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   139
+                                         "org.freedesktop.DBus.Properties",
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   140
+                                         "Get");
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   141
+  if (!message)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   142
+    goto dbus_done;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   143
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   144
+  static const char* iface = "org.a11y.Status";
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   145
+  static const char* member = "IsEnabled";
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   146
+  dbus_message_append_args(message, DBUS_TYPE_STRING, &iface,
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   147
+                           DBUS_TYPE_STRING, &member, DBUS_TYPE_INVALID);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   148
+  dbus_connection_send_with_reply(bus, message, &a11yPendingCall, 1000);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   149
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   150
+dbus_done:
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   151
+  if (message)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   152
+    dbus_message_unref(message);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   153
+  if (bus)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   154
+    dbus_connection_unref(bus);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   155
+  dbus_error_free(&error);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   156
+}
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   157
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   158
+PRBool
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   159
+ShouldA11yBeEnabled()
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   160
+{
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   161
+  static PRBool sChecked = PR_FALSE, sShouldEnable = PR_FALSE;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   162
+  if (sChecked)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   163
+    return sShouldEnable;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   164
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   165
+  sChecked = PR_TRUE;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   166
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   167
+  // check if accessibility enabled/disabled by environment variable
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   168
+  static const char sAccEnv [] = "GNOME_ACCESSIBILITY";
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   169
+  const char* envValue = PR_GetEnv(sAccEnv);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   170
+  if (envValue)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   171
+    return sShouldEnable = !!atoi(envValue);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   172
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   173
+#ifdef MOZ_ENABLE_DBUS
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   174
+  PreInit();
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   175
+  PRBool dbusSuccess = PR_FALSE;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   176
+  DBusMessage *reply = nsnull;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   177
+  if (a11yPendingCall) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   178
+    dbus_pending_call_block(a11yPendingCall);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   179
+    reply = dbus_pending_call_steal_reply(a11yPendingCall);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   180
+    dbus_pending_call_unref(a11yPendingCall);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   181
+    a11yPendingCall = nsnull;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   182
+  }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   183
+  if (!reply ||
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   184
+      dbus_message_get_type(reply) != DBUS_MESSAGE_TYPE_METHOD_RETURN ||
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   185
+      strcmp(dbus_message_get_signature (reply), "v"))
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   186
+    goto dbus_done;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   187
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   188
+  DBusMessageIter iter, iter_variant, iter_struct;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   189
+  dbus_bool_t dResult;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   190
+  dbus_message_iter_init(reply, &iter);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   191
+  dbus_message_iter_recurse (&iter, &iter_variant);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   192
+  switch (dbus_message_iter_get_arg_type(&iter_variant)) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   193
+    case DBUS_TYPE_STRUCT:
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   194
+      // at-spi2-core 2.2.0-2.2.1 had a bug where it returned a struct
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   195
+      dbus_message_iter_recurse(&iter_variant, &iter_struct);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   196
+      if (dbus_message_iter_get_arg_type(&iter_struct) == DBUS_TYPE_BOOLEAN) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   197
+        dbus_message_iter_get_basic(&iter_struct, &dResult);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   198
+        sShouldEnable = dResult;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   199
+        dbusSuccess = true;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   200
+      }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   201
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   202
+      break;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   203
+    case DBUS_TYPE_BOOLEAN:
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   204
+      dbus_message_iter_get_basic(&iter_variant, &dResult);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   205
+      sShouldEnable = dResult;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   206
+      dbusSuccess = true;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   207
+      break;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   208
+    default:
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   209
+      break;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   210
+  }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   211
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   212
+  dbus_done:
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   213
+  if (reply)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   214
+    dbus_message_unref(reply);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   215
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   216
+  if (dbusSuccess)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   217
+    return sShouldEnable;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   218
+#endif
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   219
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   220
+  //check gconf-2 setting
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   221
+  nsresult rv = NS_OK;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   222
+  static const char sSysPrefService [] =
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   223
+    "@mozilla.org/system-preference-service;1";
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   224
+  static const char sAccessibilityKey [] =
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   225
+    "config.use_system_prefs.accessibility";
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   226
+  nsCOMPtr<nsIPrefBranch> sysPrefService =
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   227
+    do_GetService(sSysPrefService, &rv);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   228
+  if (NS_SUCCEEDED(rv) && sysPrefService)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   229
+    sysPrefService->GetBoolPref(sAccessibilityKey, &sShouldEnable);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   230
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   231
+  return sShouldEnable;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   232
+}
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   233
+} // namespace a11y
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   234
+} // namespace mozilla
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   235
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   236
diff --git a/accessible/src/base/nsAccessibilityService.h b/accessible/src/base/nsAccessibilityService.h
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   237
--- a/accessible/src/base/nsAccessibilityService.h
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   238
+++ b/accessible/src/base/nsAccessibilityService.h
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   239
@@ -41,16 +41,36 @@
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   240
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   241
 #include "nsIAccessibilityService.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   242
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   243
 #include "a11yGeneric.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   244
 #include "nsAccDocManager.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   245
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   246
 #include "nsIObserver.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   247
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   248
+namespace mozilla {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   249
+namespace a11y {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   250
+#ifdef MOZ_ACCESSIBILITY_ATK
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   251
+/**
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   252
+ * Perform initialization that should be done as soon as possible, in order
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   253
+ * to minimize startup time.
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   254
+ * XXX: this function and the next defined in nsApplicationAccessibleWrap.cpp
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   255
+ */
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   256
+void PreInit();
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   257
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   258
+/**
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   259
+ * Is platform accessibility enabled.
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   260
+ * Only used on linux with atk for now.
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   261
+ */
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   262
+PRBool ShouldA11yBeEnabled();
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   263
+#endif
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   264
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   265
+} // namespace a11y
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   266
+} // namespace mozilla
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   267
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   268
 class nsAccessibilityService : public nsAccDocManager,
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   269
                                public nsIAccessibilityService,
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   270
                                public nsIObserver
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   271
 {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   272
 public:
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   273
   virtual ~nsAccessibilityService();
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   274
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   275
   NS_DECL_ISUPPORTS_INHERITED
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   276
diff --git a/widget/src/gtk2/nsWindow.cpp b/widget/src/gtk2/nsWindow.cpp
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   277
--- a/widget/src/gtk2/nsWindow.cpp
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   278
+++ b/widget/src/gtk2/nsWindow.cpp
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   279
@@ -103,29 +103,20 @@
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   280
 #include "nsIStringBundle.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   281
 #include "nsGfxCIID.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   282
 #include "nsIObserverService.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   283
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   284
 #include "nsIdleService.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   285
 #include "nsIPropertyBag2.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   286
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   287
 #ifdef ACCESSIBILITY
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   288
-#include "nsIAccessibilityService.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   289
+#include "nsAccessibilityService.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   290
 #include "nsIAccessibleDocument.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   291
-#include "prenv.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   292
-#include "stdlib.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   293
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   294
 using namespace mozilla;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   295
-
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   296
-static PRBool sAccessibilityChecked = PR_FALSE;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   297
-/* static */
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   298
-PRBool nsWindow::sAccessibilityEnabled = PR_FALSE;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   299
-static const char sSysPrefService [] = "@mozilla.org/system-preference-service;1";
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   300
-static const char sAccEnv [] = "GNOME_ACCESSIBILITY";
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   301
-static const char sAccessibilityKey [] = "config.use_system_prefs.accessibility";
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   302
 #endif
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   303
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   304
 /* For SetIcon */
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   305
 #include "nsAppDirectoryServiceDefs.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   306
 #include "nsXPIDLString.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   307
 #include "nsIFile.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   308
 #include "nsILocalFile.h"
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   309
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   310
@@ -1109,19 +1100,18 @@ nsWindow::Show(PRBool aState)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   311
             NativeResize(mBounds.x, mBounds.y, mBounds.width, mBounds.height,
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   312
                          PR_FALSE);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   313
         } else if (mNeedsResize) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   314
             NativeResize(mBounds.width, mBounds.height, PR_FALSE);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   315
         }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   316
     }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   317
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   318
 #ifdef ACCESSIBILITY
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   319
-    if (aState && sAccessibilityEnabled) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   320
+    if (aState && a11y::ShouldA11yBeEnabled())
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   321
         CreateRootAccessible();
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   322
-    }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   323
 #endif
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   324
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   325
     NativeShow(aState);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   326
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   327
     return NS_OK;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   328
 }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   329
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   330
 NS_IMETHODIMP
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   331
@@ -3887,16 +3877,21 @@ nsWindow::Create(nsIWidget        *aPare
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   332
     nsIWidget *baseParent = aInitData &&
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   333
         (aInitData->mWindowType == eWindowType_dialog ||
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   334
          aInitData->mWindowType == eWindowType_toplevel ||
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   335
          aInitData->mWindowType == eWindowType_invisible) ?
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   336
         nsnull : aParent;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   337
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   338
     NS_ASSERTION(!mWindowGroup, "already have window group (leaking it)");
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   339
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   340
+#ifdef ACCESSIBILITY
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   341
+    // Send a DBus message to check whether a11y is enabled
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   342
+    a11y::PreInit();
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   343
+#endif
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   344
+
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   345
     // initialize all the common bits of this class
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   346
     BaseCreate(baseParent, aRect, aHandleEventFunction, aContext,
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   347
                aAppShell, aToolkit, aInitData);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   348
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   349
     // Do we need to listen for resizes?
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   350
     PRBool listenForResizes = PR_FALSE;;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   351
     if (aNativeParent || (aInitData && aInitData->mListenForResizes))
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   352
         listenForResizes = PR_TRUE;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   353
@@ -4278,43 +4273,16 @@ nsWindow::Create(nsIWidget        *aPare
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   354
         LOG(("\tmGdkWindow %p %lx\n", (void *)mGdkWindow,
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   355
              gdk_x11_window_get_xid(mGdkWindow)));
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   356
     }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   357
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   358
     // resize so that everything is set to the right dimensions
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   359
     if (!mIsTopLevel)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   360
         Resize(mBounds.x, mBounds.y, mBounds.width, mBounds.height, PR_FALSE);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   361
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   362
-#ifdef ACCESSIBILITY
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   363
-    nsresult rv;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   364
-    if (!sAccessibilityChecked) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   365
-        sAccessibilityChecked = PR_TRUE;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   366
-
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   367
-        //check if accessibility enabled/disabled by environment variable
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   368
-        const char *envValue = PR_GetEnv(sAccEnv);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   369
-        if (envValue) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   370
-            sAccessibilityEnabled = atoi(envValue) != 0;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   371
-            LOG(("Accessibility Env %s=%s\n", sAccEnv, envValue));
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   372
-        }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   373
-        //check gconf-2 setting
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   374
-        else {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   375
-            nsCOMPtr<nsIPrefBranch> sysPrefService =
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   376
-                do_GetService(sSysPrefService, &rv);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   377
-            if (NS_SUCCEEDED(rv) && sysPrefService) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   378
-
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   379
-                // do the work to get gconf setting.
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   380
-                // will be done soon later.
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   381
-                sysPrefService->GetBoolPref(sAccessibilityKey,
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   382
-                                            &sAccessibilityEnabled);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   383
-            }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   384
-
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   385
-        }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   386
-    }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   387
-#endif
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   388
-
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   389
 #ifdef MOZ_DFB
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   390
     if (!mDFB) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   391
          DirectFBCreate( &mDFB );
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   392
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   393
          D_ASSUME( mDFB != NULL );
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   394
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   395
          if (mDFB)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   396
               mDFB->GetDisplayLayer( mDFB, DLID_PRIMARY, &mDFBLayer );
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   397
@@ -6504,19 +6472,18 @@ nsWindow::DispatchAccessibleEvent()
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   398
     DispatchEvent(&event, status);
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   399
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   400
     return event.mAccessible;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   401
 }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   402
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   403
 void
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   404
 nsWindow::DispatchEventToRootAccessible(PRUint32 aEventType)
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   405
 {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   406
-    if (!sAccessibilityEnabled) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   407
+    if (!a11y::ShouldA11yBeEnabled())
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   408
         return;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   409
-    }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   410
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   411
     nsCOMPtr<nsIAccessibilityService> accService =
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   412
         do_GetService("@mozilla.org/accessibilityService;1");
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   413
     if (!accService) {
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   414
         return;
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   415
     }
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   416
 
b28670af14d5 Read a11y status from Gnome3
Michael Gorse <mgorse@suse.com>
parents:
diff changeset
   417
     // Get the root document accessible and fire event to it.