/// <summary>
        ///     Initializes a new instance of the InputReportEventArgs class.
        /// </summary>
        /// <param name="inputDevice">
        ///     The input device to associate this input with.
        /// </param>
        /// <param name="report">
        ///     The input report being processed.
        /// </param>
        public InputReportEventArgs(InputDevice inputDevice,
                                    InputReport report)
            : base(inputDevice, ((report != null) ? report.Timestamp : DateTime.MinValue))
        {
            if (report == null)
                throw new ArgumentNullException("report");

            Report = report;
        }
        /// <summary>
        ///     Initializes a new instance of the InputReportEventArgs class.
        /// </summary>
        /// <param name="inputDevice">
        ///     The input device to associate this input with.
        /// </param>
        /// <param name="report">
        ///     The input report being processed.
        /// </param>
        public InputReportEventArgs(InputDevice inputDevice,
                                    InputReport report)
            : base(inputDevice, ((report != null) ? report.Timestamp : DateTime.MinValue))
        {
            if (report == null)
            {
                throw new ArgumentNullException("report");
            }

            Report = report;
        }
        /// <summary>
        ///     Reports input to the input manager.
        /// </summary>
        /// <returns>
        ///     Whether or not any event generated as a consequence of this
        ///     event was handled.
        /// </returns>
        // do we really need this?  Make the "providers" call InputManager.ProcessInput themselves.
        // we currently need to map back to providers for other reasons.
        public bool ReportInput(InputDevice device, InputReport inputReport)
        {
            if (_isDisposed)
            {
                throw new InvalidOperationException();
            }

            bool handled = false;

            InputReportEventArgs input = new InputReportEventArgs(device, inputReport);
            input.RoutedEvent = InputManager.PreviewInputReportEvent;

            if (_inputManager != null)
            {
                handled = _inputManager.ProcessInput(input);
            }

            return handled;
        }
        /// <summary>
        ///     Reports input to the input manager.
        /// </summary>
        /// <returns>
        ///     Whether or not any event generated as a consequence of this
        ///     event was handled.
        /// </returns>
        // do we really need this?  Make the "providers" call InputManager.ProcessInput themselves.
        // we currently need to map back to providers for other reasons.
        public bool ReportInput(InputDevice device, InputReport inputReport)
        {
            if (_isDisposed)
            {
                throw new InvalidOperationException();
            }

            bool handled = false;

            InputReportEventArgs input = new InputReportEventArgs(device, inputReport);

            input.RoutedEvent = InputManager.PreviewInputReportEvent;

            if (_inputManager != null)
            {
                handled = _inputManager.ProcessInput(input);
            }

            return(handled);
        }