Bug 1343613 - [3.1] Enable window event dispatcher only on top level window. r=jchen

This commit is contained in:
Eugen Sawin 2017-03-08 23:19:07 +01:00
parent e574bdd70e
commit 307653da17

View File

@ -509,10 +509,13 @@ nsAppShell::Init()
if (obsServ) {
obsServ->AddObserver(this, "browser-delayed-startup-finished", false);
obsServ->AddObserver(this, "profile-after-change", false);
obsServ->AddObserver(this, "chrome-document-loaded", false);
obsServ->AddObserver(this, "tab-child-created", false);
obsServ->AddObserver(this, "quit-application-granted", false);
obsServ->AddObserver(this, "xpcom-shutdown", false);
if (XRE_IsParentProcess()) {
obsServ->AddObserver(this, "chrome-document-loaded", false);
}
}
if (sPowerManagerService)
@ -589,8 +592,11 @@ nsAppShell::Observe(nsISupports* aSubject,
nsCOMPtr<nsIWidget> widget =
WidgetUtils::DOMWindowToWidget(doc->GetWindow());
MOZ_ASSERT(widget);
const auto window = static_cast<nsWindow*>(widget.get());
window->EnableEventDispatcher();
if (widget->WindowType() == nsWindowType::eWindowType_toplevel) {
// Make sure to call this only on top level nsWindow.
const auto window = static_cast<nsWindow*>(widget.get());
window->EnableEventDispatcher();
}
} else if (!strcmp(aTopic, "quit-application-granted")) {
if (jni::IsAvailable()) {
java::GeckoThread::SetState(