Bug 1473631: Part 4 - Replace pref observers with callbacks in FocusManager. r?njn
MozReview-Commit-ID: 533Qz2nIkmX
--- a/dom/base/nsFocusManager.cpp
+++ b/dom/base/nsFocusManager.cpp
@@ -183,17 +183,19 @@ static const char* kObservedPrefs[] = {
};
nsFocusManager::nsFocusManager()
: mEventHandlingNeedsFlush(false)
{ }
nsFocusManager::~nsFocusManager()
{
- Preferences::RemoveObservers(this, kObservedPrefs);
+ Preferences::UnregisterCallbacks(
+ PREF_CHANGE_METHOD(nsFocusManager::PrefChanged),
+ kObservedPrefs, this);
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
if (obs) {
obs->RemoveObserver(this, "xpcom-shutdown");
}
}
// static
@@ -208,57 +210,63 @@ nsFocusManager::Init()
Preferences::GetBool("accessibility.tabfocus_applies_to_xul",
nsIContent::sTabFocusModelAppliesToXUL);
sMouseFocusesFormControl =
Preferences::GetBool("accessibility.mouse_focuses_formcontrol", false);
sTestMode = Preferences::GetBool("focusmanager.testmode", false);
- Preferences::AddWeakObservers(fm, kObservedPrefs);
+ Preferences::RegisterCallbacks(
+ PREF_CHANGE_METHOD(nsFocusManager::PrefChanged),
+ kObservedPrefs, fm);
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
if (obs) {
obs->AddObserver(fm, "xpcom-shutdown", true);
}
return NS_OK;
}
// static
void
nsFocusManager::Shutdown()
{
NS_IF_RELEASE(sInstance);
}
+void
+nsFocusManager::PrefChanged(const char* aPref)
+{
+ nsDependentCString pref(aPref);
+ if (pref.EqualsLiteral("accessibility.browsewithcaret")) {
+ UpdateCaretForCaretBrowsingMode();
+ }
+ else if (pref.EqualsLiteral("accessibility.tabfocus_applies_to_xul")) {
+ nsIContent::sTabFocusModelAppliesToXUL =
+ Preferences::GetBool("accessibility.tabfocus_applies_to_xul",
+ nsIContent::sTabFocusModelAppliesToXUL);
+ }
+ else if (pref.EqualsLiteral("accessibility.mouse_focuses_formcontrol")) {
+ sMouseFocusesFormControl =
+ Preferences::GetBool("accessibility.mouse_focuses_formcontrol",
+ false);
+ }
+ else if (pref.EqualsLiteral("focusmanager.testmode")) {
+ sTestMode = Preferences::GetBool("focusmanager.testmode", false);
+ }
+}
+
NS_IMETHODIMP
nsFocusManager::Observe(nsISupports *aSubject,
const char *aTopic,
const char16_t *aData)
{
- if (!nsCRT::strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID)) {
- nsDependentString data(aData);
- if (data.EqualsLiteral("accessibility.browsewithcaret")) {
- UpdateCaretForCaretBrowsingMode();
- }
- else if (data.EqualsLiteral("accessibility.tabfocus_applies_to_xul")) {
- nsIContent::sTabFocusModelAppliesToXUL =
- Preferences::GetBool("accessibility.tabfocus_applies_to_xul",
- nsIContent::sTabFocusModelAppliesToXUL);
- }
- else if (data.EqualsLiteral("accessibility.mouse_focuses_formcontrol")) {
- sMouseFocusesFormControl =
- Preferences::GetBool("accessibility.mouse_focuses_formcontrol",
- false);
- }
- else if (data.EqualsLiteral("focusmanager.testmode")) {
- sTestMode = Preferences::GetBool("focusmanager.testmode", false);
- }
- } else if (!nsCRT::strcmp(aTopic, "xpcom-shutdown")) {
+ if (!nsCRT::strcmp(aTopic, "xpcom-shutdown")) {
mActiveWindow = nullptr;
mFocusedWindow = nullptr;
mFocusedElement = nullptr;
mFirstBlurEvent = nullptr;
mFirstFocusEvent = nullptr;
mWindowBeingLowered = nullptr;
mDelayedBlurFocusEvents.Clear();
mMouseButtonEventHandlingDocument = nullptr;
--- a/dom/base/nsFocusManager.h
+++ b/dom/base/nsFocusManager.h
@@ -52,16 +52,18 @@ public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_NSIOBSERVER
NS_DECL_NSIFOCUSMANAGER
// called to initialize and stop the focus manager at startup and shutdown
static nsresult Init();
static void Shutdown();
+ void PrefChanged(const char* aPref);
+
/**
* Retrieve the single focus manager.
*/
static nsFocusManager* GetFocusManager() { return sInstance; }
/**
* A faster version of nsIFocusManager::GetFocusedElement, returning a
* raw Element pointer (instead of having AddRef-ed Element