HwndSourceKeyboardInputSite.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Core / CSharp / System / Windows / InterOp / HwndSourceKeyboardInputSite.cs / 1 / HwndSourceKeyboardInputSite.cs

                            using System; 
using System.Windows.Input;
using System.Collections;
using MS.Win32;
using System.Windows.Media; 
using System.Windows.Threading;
 
using SR=MS.Internal.PresentationCore.SR; 
using SRID=MS.Internal.PresentationCore.SRID;
using System.Security ; 
using MS.Internal.PresentationCore;

namespace System.Windows.Interop
{ 
    internal class HwndSourceKeyboardInputSite : IKeyboardInputSite
    { 
        public HwndSourceKeyboardInputSite(HwndSource source, IKeyboardInputSink sink) 
        {
            if(source == null) 
            {
                throw new ArgumentNullException("source");
            }
            if(sink == null) 
            {
                throw new ArgumentNullException("sink"); 
            } 
            if(!(sink is UIElement))
            { 
                throw new ArgumentException(SR.Get(SRID.KeyboardSinkMustBeAnElement), "sink");
            }

            _source = source; 

            _sink = sink; 
            _sink.KeyboardInputSite = this; 

            _sinkElement = sink as UIElement; 
        }

#region IKeyboardInputSite
        ///  
        ///     Unregisters a child KeyboardInputSink from this sink.
        ///  
        ///  
        ///     Requires unmanaged code permission.
        ///  
        ///
        ///     Critical - calls CriticalUnregister.
        ///     TreatAsSafe: - Interface declaration demands unrestricted UI permission
        /// 
        [ SecurityCritical,SecurityTreatAsSafe ]
        void IKeyboardInputSite.Unregister() 
        { 
            CriticalUnregister();
        } 

        /// 
        ///     Unregisters a child KeyboardInputSink from this sink.
        ///  
        /// 
        ///     Critical - calls CriticalUnregisterKeyboardInputSink 
        ///  
        [ SecurityCritical ]
        internal void CriticalUnregister() 
        {
            if(_source != null && _sink != null)
            {
                _source.CriticalUnregisterKeyboardInputSink(this); 
                _sink.KeyboardInputSite = null;
            } 
 
            _source = null;
            _sink = null; 
        }
        /// 
        ///     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.
        ///  
        IKeyboardInputSink IKeyboardInputSite.Sink 
        {
            get 
            {
                return _sink;
            }
        } 

        ///  
        ///     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.
        /// 
        bool IKeyboardInputSite.OnNoMoreTabStops(TraversalRequest request)
        { 
            bool traversed = false;
 
            if(_sinkElement != null) 
            {
                traversed = _sinkElement.MoveFocus(request); 
            }

            return traversed;
        } 

#endregion IKeyboardInputSite 
 
        private HwndSource _source;
        private IKeyboardInputSink _sink; 
        private UIElement _sinkElement;
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using System; 
using System.Windows.Input;
using System.Collections;
using MS.Win32;
using System.Windows.Media; 
using System.Windows.Threading;
 
using SR=MS.Internal.PresentationCore.SR; 
using SRID=MS.Internal.PresentationCore.SRID;
using System.Security ; 
using MS.Internal.PresentationCore;

namespace System.Windows.Interop
{ 
    internal class HwndSourceKeyboardInputSite : IKeyboardInputSite
    { 
        public HwndSourceKeyboardInputSite(HwndSource source, IKeyboardInputSink sink) 
        {
            if(source == null) 
            {
                throw new ArgumentNullException("source");
            }
            if(sink == null) 
            {
                throw new ArgumentNullException("sink"); 
            } 
            if(!(sink is UIElement))
            { 
                throw new ArgumentException(SR.Get(SRID.KeyboardSinkMustBeAnElement), "sink");
            }

            _source = source; 

            _sink = sink; 
            _sink.KeyboardInputSite = this; 

            _sinkElement = sink as UIElement; 
        }

#region IKeyboardInputSite
        ///  
        ///     Unregisters a child KeyboardInputSink from this sink.
        ///  
        ///  
        ///     Requires unmanaged code permission.
        ///  
        ///
        ///     Critical - calls CriticalUnregister.
        ///     TreatAsSafe: - Interface declaration demands unrestricted UI permission
        /// 
        [ SecurityCritical,SecurityTreatAsSafe ]
        void IKeyboardInputSite.Unregister() 
        { 
            CriticalUnregister();
        } 

        /// 
        ///     Unregisters a child KeyboardInputSink from this sink.
        ///  
        /// 
        ///     Critical - calls CriticalUnregisterKeyboardInputSink 
        ///  
        [ SecurityCritical ]
        internal void CriticalUnregister() 
        {
            if(_source != null && _sink != null)
            {
                _source.CriticalUnregisterKeyboardInputSink(this); 
                _sink.KeyboardInputSite = null;
            } 
 
            _source = null;
            _sink = null; 
        }
        /// 
        ///     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.
        ///  
        IKeyboardInputSink IKeyboardInputSite.Sink 
        {
            get 
            {
                return _sink;
            }
        } 

        ///  
        ///     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.
        /// 
        bool IKeyboardInputSite.OnNoMoreTabStops(TraversalRequest request)
        { 
            bool traversed = false;
 
            if(_sinkElement != null) 
            {
                traversed = _sinkElement.MoveFocus(request); 
            }

            return traversed;
        } 

#endregion IKeyboardInputSite 
 
        private HwndSource _source;
        private IKeyboardInputSink _sink; 
        private UIElement _sinkElement;
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK