File: Base\System\Windows\Interop\IKeyboardInputSite.cs
Project: wpf\src\WindowsBase.csproj (WindowsBase)
using System;
using System.Security;
using System.Security.Permissions;
using System.Windows.Input;
 
namespace System.Windows.Interop
{
    /// <summary>
    ///     Containers provide a unique IKeyboardInputSite instance for each
    ///     component they contain.
    /// </summary> 
    public interface IKeyboardInputSite
    {
        /// <summary>
        ///     Unregisters a child KeyboardInputSink from this sink.
        /// </summary>
        /// <remarks>
        ///     This API requires unrestricted UI Window permission.
        /// </remarks>
        /// <SecurityNote>
        ///     Critical: This API can be used for input spoofing
        ///     PublicOK: This method has a demand on it.
        /// </SecurityNote>
        [SecurityCritical, UIPermissionAttribute(SecurityAction.LinkDemand, Unrestricted=true)]
        void Unregister();
 
        /// <summary>
        ///     Returns the sink associated with this site (the "child", not
        ///     the "parent" sink that owns the site).  There's no way of
        ///     getting from the site to the parent sink.
        /// </summary> 
        IKeyboardInputSink Sink {get;}
 
        /// <summary>
        ///     Components call this when they want to move focus ("tab") but
        ///     have nowhere further to tab within their own component.  Return
        ///     value is true if the site moved focus, false if the calling
        ///     component still has focus and should wrap around.
        /// </summary> 
        bool OnNoMoreTabStops(TraversalRequest request);
 
    }
}