Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / System / Windows / Input / TextServicesCompartmentContext.cs / 1 / 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
- ObfuscateAssemblyAttribute.cs
- CheckBoxAutomationPeer.cs
- ScrollBarRenderer.cs
- RowVisual.cs
- OdbcReferenceCollection.cs
- XmlReader.cs
- InvalidateEvent.cs
- LayoutEditorPart.cs
- GlyphingCache.cs
- ScriptResourceAttribute.cs
- DTCTransactionManager.cs
- ResourceDescriptionAttribute.cs
- DbParameterHelper.cs
- SByte.cs
- Transform3D.cs
- FillErrorEventArgs.cs
- ImageCodecInfo.cs
- EmbeddedMailObject.cs
- NetworkStream.cs
- _ListenerAsyncResult.cs
- Menu.cs
- FactoryMaker.cs
- BinaryReader.cs
- Trustee.cs
- mansign.cs
- FrameworkContentElement.cs
- ResizingMessageFilter.cs
- CurrencyManager.cs
- XMLSyntaxException.cs
- HttpResponseInternalWrapper.cs
- Calendar.cs
- Int32KeyFrameCollection.cs
- HtmlGenericControl.cs
- HttpResponse.cs
- PolyQuadraticBezierSegment.cs
- SQLRoleProvider.cs
- DLinqAssociationProvider.cs
- ContainsRowNumberChecker.cs
- PageAdapter.cs
- MailWriter.cs
- SamlAdvice.cs
- ConfigUtil.cs
- TdsParser.cs
- ModifierKeysValueSerializer.cs
- DataGridViewCellFormattingEventArgs.cs
- GridViewColumnHeaderAutomationPeer.cs
- IImplicitResourceProvider.cs
- FileInfo.cs
- _BaseOverlappedAsyncResult.cs
- SmiRequestExecutor.cs
- StyleTypedPropertyAttribute.cs
- SqlUDTStorage.cs
- QilScopedVisitor.cs
- ComAdminInterfaces.cs
- HttpCachePolicy.cs
- TextParaLineResult.cs
- XpsSerializationManagerAsync.cs
- TextEditorContextMenu.cs
- Debugger.cs
- CommandPlan.cs
- StyleBamlTreeBuilder.cs
- HttpCapabilitiesEvaluator.cs
- RectAnimationUsingKeyFrames.cs
- ConnectionsZone.cs
- BufferedReadStream.cs
- BaseHashHelper.cs
- WpfPayload.cs
- InstanceDescriptor.cs
- CompositeControl.cs
- CacheAxisQuery.cs
- BuildProviderCollection.cs
- COM2TypeInfoProcessor.cs
- CryptoApi.cs
- ServerValidateEventArgs.cs
- AttributeCollection.cs
- RulePatternOps.cs
- StatusBarPanelClickEvent.cs
- JsonObjectDataContract.cs
- StateItem.cs
- pingexception.cs
- Rfc2898DeriveBytes.cs
- GatewayDefinition.cs
- NativeMethods.cs
- AppSettingsExpressionBuilder.cs
- WebPartsPersonalization.cs
- ArraySet.cs
- FixedSOMElement.cs
- PeerApplication.cs
- TypeSystemProvider.cs
- DefaultProxySection.cs
- ImmutableObjectAttribute.cs
- PackageRelationshipCollection.cs
- DeferredTextReference.cs
- DateTimeOffset.cs
- PostBackOptions.cs
- FileFormatException.cs
- PropertyGridCommands.cs
- DbParameterCollection.cs
- Aggregates.cs
- OuterGlowBitmapEffect.cs