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 / 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
- X509Certificate.cs
- RootProfilePropertySettingsCollection.cs
- ProcessModelInfo.cs
- DesignerVerb.cs
- Encoder.cs
- RoleGroupCollection.cs
- LinkClickEvent.cs
- CallSite.cs
- PointCollection.cs
- View.cs
- XXXOnTypeBuilderInstantiation.cs
- XmlTextReaderImplHelpers.cs
- Mutex.cs
- RectangleGeometry.cs
- SpellerError.cs
- CanExecuteRoutedEventArgs.cs
- AncestorChangedEventArgs.cs
- TextTreeInsertUndoUnit.cs
- ExtractorMetadata.cs
- MachineKeyConverter.cs
- DataExpression.cs
- OSFeature.cs
- ReadOnlyDataSource.cs
- ChtmlCommandAdapter.cs
- StateDesignerConnector.cs
- SystemWebCachingSectionGroup.cs
- SettingsProperty.cs
- MbpInfo.cs
- NeutralResourcesLanguageAttribute.cs
- CodeTypeDelegate.cs
- OdbcEnvironmentHandle.cs
- AtlasWeb.Designer.cs
- ResourceReferenceExpressionConverter.cs
- GridView.cs
- Registry.cs
- UIElementCollection.cs
- Label.cs
- _FtpControlStream.cs
- RootProjectionNode.cs
- DataRowChangeEvent.cs
- NumericUpDown.cs
- SqlClientWrapperSmiStreamChars.cs
- PeerValidationBehavior.cs
- And.cs
- BaseDataBoundControlDesigner.cs
- CheckBox.cs
- AnchoredBlock.cs
- DataGridToolTip.cs
- PageStatePersister.cs
- CodeComment.cs
- FileDialogPermission.cs
- arabicshape.cs
- DataSet.cs
- AnimatedTypeHelpers.cs
- WindowsAuthenticationModule.cs
- FilePrompt.cs
- ManagedFilter.cs
- XmlObjectSerializerContext.cs
- ClockGroup.cs
- Brushes.cs
- DirectionalLight.cs
- SemaphoreSecurity.cs
- SafeProcessHandle.cs
- SchemaTableColumn.cs
- ThrowHelper.cs
- AnnotationResourceCollection.cs
- ServerType.cs
- GeneralTransform3DTo2D.cs
- SamlSubject.cs
- TextTreeInsertElementUndoUnit.cs
- CharacterMetrics.cs
- Interlocked.cs
- DataSourceHelper.cs
- ExceptionHandlers.cs
- ActivityInterfaces.cs
- PersonalizationProviderHelper.cs
- EntityDataSourceUtil.cs
- CreateUserWizardAutoFormat.cs
- RuntimeWrappedException.cs
- ControlEvent.cs
- DataKey.cs
- TextParentUndoUnit.cs
- XXXInfos.cs
- Knowncolors.cs
- AuthorizationRuleCollection.cs
- AccessDataSourceView.cs
- WindowsTokenRoleProvider.cs
- WsatRegistrationHeader.cs
- ISAPIRuntime.cs
- SelectionItemPatternIdentifiers.cs
- PolicyValidator.cs
- sqlmetadatafactory.cs
- MemoryStream.cs
- SurrogateEncoder.cs
- XD.cs
- TextServicesCompartmentEventSink.cs
- TransactionScope.cs
- HtmlControl.cs
- RuntimeConfigurationRecord.cs
- DbProviderManifest.cs