Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Input / TextServicesCompartmentContext.cs / 1305600 / TextServicesCompartmentContext.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: Manages Text Services Compartment. // // History: // 07/30/2003 : yutakas - Ported from .net tree. // //--------------------------------------------------------------------------- using System; using System.Runtime.InteropServices; using System.Windows.Threading; using System.Security; using System.Security.Permissions; using System.Diagnostics; using System.Collections; using MS.Internal; using MS.Utility; using MS.Win32; namespace System.Windows.Input { //----------------------------------------------------- // // TextServicesCompartmentContext class // //----------------------------------------------------- internal class TextServicesCompartmentContext { //------------------------------------------------------ // // Constructors // //----------------------------------------------------- ////// private constructer to avoid from creating instance outside. /// private TextServicesCompartmentContext() { } //------------------------------------------------------ // // Internal Methods // //------------------------------------------------------ #region Internal Methods ////// Get the compartment of the given input method state. /// ////// Critical - retrieves message pump/input manager wrapper class /// TreatAsSafe - returns safe wrapper for property request /// [SecurityCritical, SecurityTreatAsSafe] internal TextServicesCompartment GetCompartment(InputMethodStateType statetype) { for (int i = 0; i < InputMethodEventTypeInfo.InfoList.Length; i++) { InputMethodEventTypeInfo iminfo = InputMethodEventTypeInfo.InfoList[i]; if (iminfo.Type == statetype) { if (iminfo.Scope == CompartmentScope.Thread) return GetThreadCompartment(iminfo.Guid); else if (iminfo.Scope == CompartmentScope.Global) return GetGlobalCompartment(iminfo.Guid); } } return null; } ////// Get the thread compartment of the Guid. /// ////// Critical - manipulates input manager/message pump /// [SecurityCritical] internal TextServicesCompartment GetThreadCompartment(Guid guid) { // No TextServices are installed so that the compartment won't work. if (!TextServicesLoader.ServicesInstalled || TextServicesContext.DispatcherCurrent == null) return null; UnsafeNativeMethods.ITfThreadMgr threadmgr = TextServicesContext.DispatcherCurrent.ThreadManager; if (threadmgr == null) return null; if (_compartmentTable == null) _compartmentTable = new Hashtable(); TextServicesCompartment compartment; compartment = _compartmentTable[guid] as TextServicesCompartment; if (compartment == null) { compartment = new TextServicesCompartment(guid, threadmgr as UnsafeNativeMethods.ITfCompartmentMgr); _compartmentTable[guid] = compartment; } return compartment; } ////// Get the global compartment of the Guid. /// ////// Critical - access input manager directly /// [SecurityCritical] internal TextServicesCompartment GetGlobalCompartment(Guid guid) { // No TextServices are installed so that the compartment won't work. if (!TextServicesLoader.ServicesInstalled || TextServicesContext.DispatcherCurrent == null) return null; if (_globalcompartmentTable == null) _globalcompartmentTable = new Hashtable(); if (_globalcompartmentmanager == null) { UnsafeNativeMethods.ITfThreadMgr threadmgr = TextServicesContext.DispatcherCurrent.ThreadManager; if (threadmgr == null) return null; threadmgr.GetGlobalCompartment(out _globalcompartmentmanager); } TextServicesCompartment compartment = null; compartment = _globalcompartmentTable[guid] as TextServicesCompartment; if (compartment == null) { compartment = new TextServicesCompartment(guid, _globalcompartmentmanager); _globalcompartmentTable[guid] = compartment; } return compartment; } #endregion Internal Methods //----------------------------------------------------- // // Internal Properties // //------------------------------------------------------ ////// Create and get thread local compartment context. /// internal static TextServicesCompartmentContext Current { get { // TextServicesCompartmentContext for the current Dispatcher is stored in InputMethod of // the current Dispatcher. if (InputMethod.Current.TextServicesCompartmentContext == null) InputMethod.Current.TextServicesCompartmentContext = new TextServicesCompartmentContext(); return InputMethod.Current.TextServicesCompartmentContext; } } //----------------------------------------------------- // // Private Fields // //----------------------------------------------------- // cache of ITfCompartments private Hashtable _compartmentTable; private Hashtable _globalcompartmentTable; // cache of the global compartment manager private UnsafeNativeMethods.ITfCompartmentMgr _globalcompartmentmanager; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: Manages Text Services Compartment. // // History: // 07/30/2003 : yutakas - Ported from .net tree. // //--------------------------------------------------------------------------- using System; using System.Runtime.InteropServices; using System.Windows.Threading; using System.Security; using System.Security.Permissions; using System.Diagnostics; using System.Collections; using MS.Internal; using MS.Utility; using MS.Win32; namespace System.Windows.Input { //----------------------------------------------------- // // TextServicesCompartmentContext class // //----------------------------------------------------- internal class TextServicesCompartmentContext { //------------------------------------------------------ // // Constructors // //----------------------------------------------------- ////// private constructer to avoid from creating instance outside. /// private TextServicesCompartmentContext() { } //------------------------------------------------------ // // Internal Methods // //------------------------------------------------------ #region Internal Methods ////// Get the compartment of the given input method state. /// ////// Critical - retrieves message pump/input manager wrapper class /// TreatAsSafe - returns safe wrapper for property request /// [SecurityCritical, SecurityTreatAsSafe] internal TextServicesCompartment GetCompartment(InputMethodStateType statetype) { for (int i = 0; i < InputMethodEventTypeInfo.InfoList.Length; i++) { InputMethodEventTypeInfo iminfo = InputMethodEventTypeInfo.InfoList[i]; if (iminfo.Type == statetype) { if (iminfo.Scope == CompartmentScope.Thread) return GetThreadCompartment(iminfo.Guid); else if (iminfo.Scope == CompartmentScope.Global) return GetGlobalCompartment(iminfo.Guid); } } return null; } ////// Get the thread compartment of the Guid. /// ////// Critical - manipulates input manager/message pump /// [SecurityCritical] internal TextServicesCompartment GetThreadCompartment(Guid guid) { // No TextServices are installed so that the compartment won't work. if (!TextServicesLoader.ServicesInstalled || TextServicesContext.DispatcherCurrent == null) return null; UnsafeNativeMethods.ITfThreadMgr threadmgr = TextServicesContext.DispatcherCurrent.ThreadManager; if (threadmgr == null) return null; if (_compartmentTable == null) _compartmentTable = new Hashtable(); TextServicesCompartment compartment; compartment = _compartmentTable[guid] as TextServicesCompartment; if (compartment == null) { compartment = new TextServicesCompartment(guid, threadmgr as UnsafeNativeMethods.ITfCompartmentMgr); _compartmentTable[guid] = compartment; } return compartment; } ////// Get the global compartment of the Guid. /// ////// Critical - access input manager directly /// [SecurityCritical] internal TextServicesCompartment GetGlobalCompartment(Guid guid) { // No TextServices are installed so that the compartment won't work. if (!TextServicesLoader.ServicesInstalled || TextServicesContext.DispatcherCurrent == null) return null; if (_globalcompartmentTable == null) _globalcompartmentTable = new Hashtable(); if (_globalcompartmentmanager == null) { UnsafeNativeMethods.ITfThreadMgr threadmgr = TextServicesContext.DispatcherCurrent.ThreadManager; if (threadmgr == null) return null; threadmgr.GetGlobalCompartment(out _globalcompartmentmanager); } TextServicesCompartment compartment = null; compartment = _globalcompartmentTable[guid] as TextServicesCompartment; if (compartment == null) { compartment = new TextServicesCompartment(guid, _globalcompartmentmanager); _globalcompartmentTable[guid] = compartment; } return compartment; } #endregion Internal Methods //----------------------------------------------------- // // Internal Properties // //------------------------------------------------------ ////// Create and get thread local compartment context. /// internal static TextServicesCompartmentContext Current { get { // TextServicesCompartmentContext for the current Dispatcher is stored in InputMethod of // the current Dispatcher. if (InputMethod.Current.TextServicesCompartmentContext == null) InputMethod.Current.TextServicesCompartmentContext = new TextServicesCompartmentContext(); return InputMethod.Current.TextServicesCompartmentContext; } } //----------------------------------------------------- // // Private Fields // //----------------------------------------------------- // cache of ITfCompartments private Hashtable _compartmentTable; private Hashtable _globalcompartmentTable; // cache of the global compartment manager private UnsafeNativeMethods.ITfCompartmentMgr _globalcompartmentmanager; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WmlLinkAdapter.cs
- MenuScrollingVisibilityConverter.cs
- XmlnsCompatibleWithAttribute.cs
- CodeAssignStatement.cs
- RichTextBox.cs
- JsonByteArrayDataContract.cs
- OpCellTreeNode.cs
- BitmapEffect.cs
- TagPrefixAttribute.cs
- OdbcConnectionStringbuilder.cs
- Rectangle.cs
- SourceFileInfo.cs
- CodeTypeOfExpression.cs
- MetadataSource.cs
- HtmlPhoneCallAdapter.cs
- ImplicitInputBrush.cs
- ListViewGroupConverter.cs
- ProxyWebPartManager.cs
- ModelUtilities.cs
- ProtocolsConfigurationHandler.cs
- ImageKeyConverter.cs
- ContextMenuStrip.cs
- WebPartManagerInternals.cs
- CheckBoxField.cs
- UrlAuthFailedErrorFormatter.cs
- DependencyStoreSurrogate.cs
- HandlerBase.cs
- CustomPopupPlacement.cs
- LicenseProviderAttribute.cs
- SharedUtils.cs
- MailWebEventProvider.cs
- WrapperEqualityComparer.cs
- CodeBlockBuilder.cs
- XmlBaseReader.cs
- InstanceKey.cs
- BaseComponentEditor.cs
- TransactionFlowOption.cs
- WebPartConnectionsDisconnectVerb.cs
- OleDbMetaDataFactory.cs
- ServiceProviders.cs
- PersonalizableTypeEntry.cs
- ProxyManager.cs
- MetafileHeader.cs
- AssemblyBuilder.cs
- DisplayInformation.cs
- CodeAssignStatement.cs
- GenericTypeParameterBuilder.cs
- DataGridState.cs
- complextypematerializer.cs
- PseudoWebRequest.cs
- TouchFrameEventArgs.cs
- DataSetViewSchema.cs
- UIElementIsland.cs
- SimpleWebHandlerParser.cs
- WebPartVerbCollection.cs
- SerTrace.cs
- ISessionStateStore.cs
- TextServicesContext.cs
- TraceUtils.cs
- DataGridColumnHeaderItemAutomationPeer.cs
- TypeNameParser.cs
- PageHandlerFactory.cs
- CanonicalFontFamilyReference.cs
- AutoScrollHelper.cs
- InputLanguage.cs
- TagMapCollection.cs
- DataSourceControl.cs
- DataGridViewDataErrorEventArgs.cs
- GeometryModel3D.cs
- IgnorePropertiesAttribute.cs
- ParserOptions.cs
- MimeTypeMapper.cs
- GridViewActionList.cs
- AttributeUsageAttribute.cs
- HttpCacheVaryByContentEncodings.cs
- BamlBinaryReader.cs
- OleDbError.cs
- UnauthorizedAccessException.cs
- Decoder.cs
- TemplatePropertyEntry.cs
- WebSysDisplayNameAttribute.cs
- ReflectTypeDescriptionProvider.cs
- DocumentCollection.cs
- RenderDataDrawingContext.cs
- PrinterResolution.cs
- ActivityCodeGenerator.cs
- MemoryMappedViewAccessor.cs
- ResolveCriteriaApril2005.cs
- ChunkedMemoryStream.cs
- Point3DKeyFrameCollection.cs
- EncodingInfo.cs
- ElementHostPropertyMap.cs
- BuilderPropertyEntry.cs
- X509WindowsSecurityToken.cs
- BaseComponentEditor.cs
- InstanceCollisionException.cs
- Inline.cs
- WriteableBitmap.cs
- MexNamedPipeBindingElement.cs
- AvtEvent.cs