Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / System / Windows / Input / TextServicesCompartmentContext.cs / 1 / TextServicesCompartmentContext.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: Manages Text Services Compartment. // // History: // 07/30/2003 : [....] - 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
- MexNamedPipeBindingElement.cs
- ProbeDuplexAsyncResult.cs
- ErrorWebPart.cs
- TextDecorationLocationValidation.cs
- MetadataArtifactLoaderResource.cs
- ListBoxChrome.cs
- ZipFileInfoCollection.cs
- UnmanagedMarshal.cs
- RequestDescription.cs
- QueryStringParameter.cs
- safex509handles.cs
- MobileSysDescriptionAttribute.cs
- PageStatePersister.cs
- DefaultTextStore.cs
- FunctionQuery.cs
- CroppedBitmap.cs
- UnionCodeGroup.cs
- HtmlFormWrapper.cs
- userdatakeys.cs
- HtmlInputControl.cs
- MailWriter.cs
- SettingsBindableAttribute.cs
- MailDefinition.cs
- EntryIndex.cs
- QilVisitor.cs
- TokenBasedSetEnumerator.cs
- PropertyStore.cs
- FlowNode.cs
- CreateUserWizardStep.cs
- RuntimeConfigurationRecord.cs
- PointAnimationBase.cs
- ExpressionVisitor.cs
- XmlSchemaSimpleType.cs
- ErrorInfoXmlDocument.cs
- BinarySerializer.cs
- TypeValidationEventArgs.cs
- RoutedCommand.cs
- RegistryPermission.cs
- ProgressBarHighlightConverter.cs
- LinearGradientBrush.cs
- SmiEventSink_Default.cs
- PropertyEntry.cs
- TCPListener.cs
- DebugView.cs
- SecUtil.cs
- DocComment.cs
- TextParaClient.cs
- TreeNodeCollection.cs
- DrawingBrush.cs
- shaperfactoryquerycachekey.cs
- querybuilder.cs
- RectangleHotSpot.cs
- IDataContractSurrogate.cs
- NamespaceList.cs
- GifBitmapEncoder.cs
- SoapReflectionImporter.cs
- EntityProviderFactory.cs
- ProfileSettings.cs
- SHA256.cs
- InputBinder.cs
- COM2ExtendedUITypeEditor.cs
- ProtocolsConfigurationHandler.cs
- ipaddressinformationcollection.cs
- TypeDescriptionProvider.cs
- PathData.cs
- HtmlDocument.cs
- WebColorConverter.cs
- ServerValidateEventArgs.cs
- OdbcConnectionOpen.cs
- SqlProviderServices.cs
- SelfIssuedAuthProofToken.cs
- SlotInfo.cs
- UnaryQueryOperator.cs
- SiteMapDataSourceView.cs
- EntityDataSourceDesigner.cs
- DelegatedStream.cs
- _ConnectOverlappedAsyncResult.cs
- relpropertyhelper.cs
- TextServicesManager.cs
- DesignerCategoryAttribute.cs
- Gdiplus.cs
- ResXBuildProvider.cs
- ChannelPoolSettingsElement.cs
- SID.cs
- StaticFileHandler.cs
- FlowLayoutPanel.cs
- WorkflowItemPresenter.cs
- DesignerSerializationVisibilityAttribute.cs
- XmlFormatWriterGenerator.cs
- SignedPkcs7.cs
- GeometryCombineModeValidation.cs
- ContentDisposition.cs
- HttpStreamMessageEncoderFactory.cs
- EmptyStringExpandableObjectConverter.cs
- SafeFileMappingHandle.cs
- Activator.cs
- SQLSingle.cs
- BulletedList.cs
- Application.cs
- RIPEMD160.cs