void GazeDataHandler(GazeEventArgs gazeEventArgs) { FrameworkElement hitTarget = null; long elapsedTime; _idleDetector.Tick(); if (!VerifyWindowContext()) { return; } // if logging is turned on, log the original data, not the filtered data if ((_sensorSettings.Sensor != Sensors.Sensors.LogPlayback) && (_loggingSettings.LogGazeData)) { _logFilter.Update(gazeEventArgs); } GazeEventArgs ev = _xyFilter.Update(gazeEventArgs); UpdateCursorPosition(ev.Screen); if ((hitTarget = GetHitTargetWithMaxTime(ev, out elapsedTime)) == null) { return; } bool invokeTarget = false; if (hitTarget == _hitTarget) { invokeTarget = HandleSameTarget(ev, hitTarget, elapsedTime); } else { HandleDifferentTarget(hitTarget); } if (invokeTarget) { InvokeTarget(hitTarget); } _hitTarget = hitTarget; if (_hitTarget != _offScreenElement) { FireEyesOn(); } }