зеркало из https://github.com/mozilla/pjs.git
Bug 357583. Allow XPCOM clients to init accessibility when they use nsIAccessible. r=surkov, sr=roc
This commit is contained in:
Родитель
32949a6427
Коммит
7a83b690b4
|
@ -65,6 +65,7 @@
|
|||
#include "nsITimer.h"
|
||||
#include "nsRootAccessible.h"
|
||||
#include "nsIFocusController.h"
|
||||
#include "nsIObserverService.h"
|
||||
|
||||
/* For documentation of the accessibility architecture,
|
||||
* see http://lxr.mozilla.org/seamonkey/source/accessible/accessible-docs.html
|
||||
|
@ -224,6 +225,20 @@ void nsAccessNode::InitXPAccessibility()
|
|||
}
|
||||
|
||||
gIsAccessibilityActive = PR_TRUE;
|
||||
NotifyA11yInitOrShutdown();
|
||||
}
|
||||
|
||||
void nsAccessNode::NotifyA11yInitOrShutdown()
|
||||
{
|
||||
nsCOMPtr<nsIObserverService> obsService =
|
||||
do_GetService("@mozilla.org/observer-service;1");
|
||||
NS_ASSERTION(obsService, "No observer service to notify of a11y init/shutdown");
|
||||
if (obsService) {
|
||||
static const PRUnichar kInitIndicator[] = { '1', 0 };
|
||||
static const PRUnichar kShutdownIndicator[] = { '0', 0 };
|
||||
obsService->NotifyObservers(nsnull, "a11y-init-or-shutdown",
|
||||
gIsAccessibilityActive ? kInitIndicator : kShutdownIndicator);
|
||||
}
|
||||
}
|
||||
|
||||
void nsAccessNode::ShutdownXPAccessibility()
|
||||
|
@ -244,6 +259,7 @@ void nsAccessNode::ShutdownXPAccessibility()
|
|||
ClearCache(gGlobalDocAccessibleCache);
|
||||
|
||||
gIsAccessibilityActive = PR_FALSE;
|
||||
NotifyA11yInitOrShutdown();
|
||||
}
|
||||
|
||||
already_AddRefed<nsIPresShell> nsAccessNode::GetPresShell()
|
||||
|
|
|
@ -165,6 +165,11 @@ protected:
|
|||
PRBool mIsInitialized;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Notify global nsIObserver's that a11y is getting init'd or shutdown
|
||||
*/
|
||||
static void NotifyA11yInitOrShutdown();
|
||||
|
||||
// Static data, we do our own refcounting for our static data
|
||||
static nsIStringBundle *gStringBundle;
|
||||
static nsIStringBundle *gKeyStringBundle;
|
||||
|
|
|
@ -636,7 +636,8 @@ public:
|
|||
virtual void VerifyStyleTree() = 0;
|
||||
#endif
|
||||
|
||||
PRBool IsAccessibilityActive() { return mIsAccessibilityActive; }
|
||||
static PRBool gIsAccessibilityActive;
|
||||
static PRBool IsAccessibilityActive() { return gIsAccessibilityActive; }
|
||||
|
||||
/**
|
||||
* Stop all active elements (plugins and the caret) in this presentation and
|
||||
|
|
|
@ -204,6 +204,8 @@
|
|||
static NS_DEFINE_CID(kCSSStyleSheetCID, NS_CSS_STYLESHEET_CID);
|
||||
static NS_DEFINE_IID(kRangeCID, NS_RANGE_CID);
|
||||
|
||||
PRBool nsIPresShell::gIsAccessibilityActive = PR_FALSE;
|
||||
|
||||
// convert a color value to a string, in the CSS format #RRGGBB
|
||||
// * - initially created for bugs 31816, 20760, 22963
|
||||
static void ColorToString(nscolor aColor, nsAutoString &aString);
|
||||
|
@ -1419,7 +1421,6 @@ NS_NewPresShell(nsIPresShell** aInstancePtrResult)
|
|||
|
||||
PresShell::PresShell()
|
||||
{
|
||||
mIsAccessibilityActive = PR_FALSE;
|
||||
mSelection = nsnull;
|
||||
#ifdef MOZ_REFLOW_PERF
|
||||
mReflowCountMgr = new ReflowCountMgr();
|
||||
|
@ -1577,6 +1578,9 @@ PresShell::Init(nsIDocument* aDocument,
|
|||
os->AddObserver(this, "user-sheet-removed", PR_FALSE);
|
||||
#ifdef MOZ_XUL
|
||||
os->AddObserver(this, "chrome-flush-skin-caches", PR_FALSE);
|
||||
#endif
|
||||
#ifdef ACCESSIBILITY
|
||||
os->AddObserver(this, "a11y-init-or-shutdown", PR_FALSE);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -3343,7 +3347,7 @@ PresShell::CancelAllPendingReflows()
|
|||
#ifdef ACCESSIBILITY
|
||||
void nsIPresShell::InvalidateAccessibleSubtree(nsIContent *aContent)
|
||||
{
|
||||
if (mIsAccessibilityActive) {
|
||||
if (gIsAccessibilityActive) {
|
||||
nsCOMPtr<nsIAccessibilityService> accService =
|
||||
do_GetService("@mozilla.org/accessibilityService;1");
|
||||
if (accService) {
|
||||
|
@ -5678,7 +5682,6 @@ PresShell::HandleEventInternal(nsEvent* aEvent, nsIView *aView,
|
|||
// We'll make sure the right number of Addref's occur before
|
||||
// handing this back to the accessibility client
|
||||
NS_STATIC_CAST(nsAccessibleEvent*, aEvent)->accessible = acc;
|
||||
mIsAccessibilityActive = PR_TRUE;
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
@ -6397,6 +6400,11 @@ PresShell::Observe(nsISupports* aSubject,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
#ifdef ACCESSIBILITY
|
||||
if (!nsCRT::strcmp(aTopic, "a11y-init-or-shutdown")) {
|
||||
gIsAccessibilityActive = aData && *aData == '1';
|
||||
}
|
||||
#endif
|
||||
NS_WARNING("unrecognized topic in PresShell::Observe");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче