PRBool nsAutoWindowStateHelper::DispatchCustomEvent(const char *aEventName) { if (!mWindow) { return PR_TRUE; } #ifdef DEBUG { nsCOMPtr<nsPIDOMWindow> window(do_QueryInterface(mWindow)); NS_ASSERTION(window->GetExtantDocument() != nsnull, "nsPrompt used too early on window object!"); } #endif nsCOMPtr<nsIDOMDocument> domdoc; mWindow->GetDocument(getter_AddRefs(domdoc)); nsCOMPtr<nsIDOMDocumentEvent> docevent(do_QueryInterface(domdoc)); nsCOMPtr<nsIDOMEvent> event; PRBool defaultActionEnabled = PR_TRUE; if (docevent) { docevent->CreateEvent(NS_LITERAL_STRING("Events"), getter_AddRefs(event)); nsCOMPtr<nsIPrivateDOMEvent> privateEvent(do_QueryInterface(event)); if (privateEvent) { event->InitEvent(NS_ConvertASCIItoUTF16(aEventName), PR_TRUE, PR_TRUE); privateEvent->SetTrusted(PR_TRUE); nsCOMPtr<nsIDOMEventTarget> target(do_QueryInterface(mWindow)); target->DispatchEvent(event, &defaultActionEnabled); } } return defaultActionEnabled; }
NS_IMETHODIMP nsAccelerometer::AccelerationChanged(double alpha, double beta, double gamma) { if (!mEnabled) return NS_ERROR_NOT_INITIALIZED; if (alpha > 360) alpha = 360; if (alpha < 0) alpha = 0; if (beta > 180) beta = 180; if (beta < -180) beta = -180; if (gamma > 90) gamma = 90; if (gamma < -90) gamma = -90; if (!mNewListener) { if (PR_ABS(mLastAlpha - alpha) < 1 && PR_ABS(mLastBeta - beta) < 1 && PR_ABS(mLastGamma - gamma) < 1) return NS_OK; } mLastAlpha = alpha; mLastBeta = beta; mLastGamma = gamma; mNewListener = PR_FALSE; for (PRUint32 i = mListeners.Count(); i > 0 ; ) { --i; nsRefPtr<nsIAcceleration> a = new nsAcceleration(alpha, beta, gamma); mListeners[i]->OnAccelerationChange(a); } for (PRUint32 i = mWindowListeners.Count(); i > 0 ; ) { --i; nsCOMPtr<nsIDOMDocument> domdoc; mWindowListeners[i]->GetDocument(getter_AddRefs(domdoc)); nsCOMPtr<nsIDOMDocumentEvent> docevent(do_QueryInterface(domdoc)); nsCOMPtr<nsIDOMEvent> event; PRBool defaultActionEnabled = PR_TRUE; if (docevent) { docevent->CreateEvent(NS_LITERAL_STRING("DeviceOrientationEvent"), getter_AddRefs(event)); nsCOMPtr<nsIDOMDeviceOrientationEvent> oe = do_QueryInterface(event); if (event) { oe->InitDeviceOrientationEvent(NS_LITERAL_STRING("deviceorientation"), PR_TRUE, PR_FALSE, alpha, beta, gamma, PR_TRUE); nsCOMPtr<nsIPrivateDOMEvent> privateEvent = do_QueryInterface(event); if (privateEvent) privateEvent->SetTrusted(PR_TRUE); nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(mWindowListeners[i]); target->DispatchEvent(event, &defaultActionEnabled); } } } return NS_OK; }